Do współpracy z relacyjnymi bazami danych w Javie służy wbudowany interfejs programowania aplikacji - JDBC (Java DataBase Connectivity). W celu nawiązania połączenia z bazą, użytkownik musi zadbać o odpowiedni sterownik JDBC do swojej bazy danych. Więcej informacji o jdbc można znaleźć tutaj.
Niezależnie od rodzaju bazy danych, z jaką chcemy się połączyć, zawsze sprowadza się to do następujących kroków:
1.załadowania odpowiednich sterowników
2.nawiązania połączenia do bazy danych
3.wysłania zapytania
4.przetworzenia odpowiedzi
W przypadku SQL Servera najnowszy driver jdbc można pobrać tutaj.
W pierwszym kroku musimy załadować odpowiednią klasę tak, aby była ona dostępna podczas próby nawiązania połączenia.
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
W tym momencie jesteśmy już gotowi do nawiązania połączenia:
String url = "jdbc:sqlserver://localhost;databaseName=dbName;user=userName;password=pass;"; Connection connection = DriverManager.getConnection(url);
O tym jak odpowiednio zbudować parametr url w połączeniu z SQL Server, można poczytać tutaj.
Przed przystąpieniem do tworzenia aplikacji w processing'u dobrze jest sprawdzić sobie połączenie np w Microsoft SQL Server Management Studio Express.
Uczulam na ten moment, bo początkowo nie potrafiłem skonfigurować odpowiednio połączenia. Okazało się, że serwer był ustawiony tylko w Windows Authentication mode, a powinien być w SQL Server and Windows Authentication mode.
Jeżeli wszystko jest ok, możemy przejść dalej do tworzenia naszej aplikacji. Przypominam jeszcze o tym, że odpowiedni driver jdbc, należy umieścić w podkatalogu projektu o nazwie code.
Aplikacja w Processing - program główny:
import java.sql.ResultSet;
void setup()
{
size( 400, 400 );
int x = 15;
int y = 25;
fill(0);
PFont metaBold;
metaBold = loadFont("Georgia-Bold-20.vlw");
textFont(metaBold,20);
Database db = new Database("localhost","MyTests","test2","test123");
ResultSet rs = db.query("SELECT Name FROM Locations");
try {
while (rs.next( )) {
String descr = rs.getString(1);
text(descr,x,y);
y = y + 25;
println(descr);
}
} catch (SQLException e) {
e.printStackTrace( );
}
}
Klasa realizująca połączenie z bazą danych:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
class Database {
Connection conn;
String host;
String user;
String pass;
String dbname;
int port = 1433; //standardowy port SQL
public Database(String host, String dbname, String user, String pass) {
this.host = host;
this.user = user;
this.pass = pass;
this.dbname = dbname;
conn = connect( );
}
public Connection connect( ) {
try {
//dla połączenia z MySql
//Class.forName("com.mysql.jdbc.Driver").newInstance();
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace( );
} catch (InstantiationException e) {
e.printStackTrace( );
} catch (IllegalAccessException e) {
e.printStackTrace( );
}
try {
String url = "jdbc:sqlserver://"+host+";databaseName="+dbname+";user="+user+";password="+pass+";";
return DriverManager.getConnection(url);
} catch (SQLException e) {
e.printStackTrace( );
return null;
}
}
public ResultSet query(String query) {
try {
Statement st = conn.createStatement( );
ResultSet rs = st.executeQuery(query);
return rs;
} catch (SQLException e) {
e.printStackTrace( );
return null;
}
}
}
A oto rezultat:



Komentarze
Prześlij komentarz