JDBCUdało mi się połączyć bazę danych PostgreSQL z .NET. Dostałem zapytanie czy to samo mogę zrobić używając Javy i JDBC. Można. Cały proces przygotowania tego wpisu był dużo przyjemniejszy. W .NET z tego, co wiem nie ma gotowych sterowników do PostgreSQL ,a użycie w tym wypadku ODBC wymaga przejścia kilku okienek dialogowych. W Javie ten proces jest łatwiejszy.
Oto więc jak połączyć się z PostgreSQL używając sterownika JDBC.
Pobierz najpierw bibliotekę z tej strony http://jdbc.postgresql.org/download.html
Załącz ją do projektu.
Kod połączenia do bazy jest następujący.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Test {
public static void main(String[] args) throws SQLException {
try {
Class.forName("org.postgresql.Driver");
Connection connection = null;
// "jdbc:postgresql://nazwahosta:port/nazwabazy","uzytkownik", "haslo"
connection = DriverManager.getConnection(
"jdbc:postgresql://localhost:5432/postgres","postgres", "mojehaslo");
connection.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.append("Nie masz sterownika");
}
catch (SQLException e )
{
e.printStackTrace();
System.out.append("Zle dane");
}
}
}
Metoda getConnection przyjmuje trzy parametry. Pierwszy parametr to string określający nazwę hosta, rodzaj systemu i nazwę bazy.
“jdbc:postgresql://nazwahosta:port/nazwabazy",
Pozostałe parametry określają uwierzytelnienie do bazy.
"uzytkownik", "haslo"
PostgreSQL mam zainstalowanego lokalnie (ze standardowym ustawieniami) więc moja ścieżka jest następująca.
DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres","postgres", "haslo");
Samo połączenie jest bezużyteczne dlatego postanowiłem z bazy Postgresql wyciągnąć informację o wszystkich bazach w moim systemie.
Tabelka pg_database jest tabelą systemową i powinna ona istnieć zawsze. Wykonałem do niej zapytanie w przykładzie .NET i teraz zrobię to samo w Javie.
public static void main(String[] args) throws SQLException {
Statement statement = null;
Connection connection = null;
try {
Class.forName("org.postgresql.Driver");
// "jdbc:postgresql://nazwahosta:port/
// nazwabazy","uzytkownik", "haslo"
connection = DriverManager.getConnection(
"jdbc:postgresql://localhost:5432" +
"/postgres","postgres", "haslo");
String selectTableSQL = "SELECT datname, datallowconn FROM pg_database;";
statement = connection.createStatement();
System.out.println(selectTableSQL);
// wykonywanie SQL
ResultSet rs = statement.executeQuery(selectTableSQL);
while (rs.next()) {
String databaseName = rs.getString("datname");
String allowConnection = rs.getString("datallowconn");
System.out.println("Database Name : " + databaseName);
System.out.println("Allow Connection: " + allowConnection);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.append("Nie masz sterownika");
}
catch (SQLException e )
{
e.printStackTrace();
System.out.append("Zle dane");
}
finally {
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
}
}
Powyższy kod wydrukuje w konsoli wszystkie dostępne bazy w systemie PostgreSQL, jak i informację o możliwości połączenia.
SELECT datname, datallowconn FROM pg_database;
Database Name : template1
Allow Connection: t
Database Name : template0
Allow Connection: f
Database Name : postgres
Allow Connection: t
Database Name : test
Allow Connection: t
To wszystko. Miłego Programowania.