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