List 如何通过JDBC驱动程序列出服务器上的PostgreSQL数据库?
我必须制作一个图形界面,允许用户输入一个IP/端口(最好不要输入其他端口),并列出在这个地址找到的所有PostgreSQL数据库 服务器上的pg_hba.conf文件将按以下方式配置:List 如何通过JDBC驱动程序列出服务器上的PostgreSQL数据库?,list,postgresql,jdbc,database-schema,List,Postgresql,Jdbc,Database Schema,我必须制作一个图形界面,允许用户输入一个IP/端口(最好不要输入其他端口),并列出在这个地址找到的所有PostgreSQL数据库 服务器上的pg_hba.conf文件将按以下方式配置: host all all 0.0.0.0/0 md5 host all all 0.0.0.0/0 trust try ( Connection conn = DriverManager.getConnection("jdbc:postgresql://
host all all 0.0.0.0/0 md5
host all all 0.0.0.0/0 trust
try (
Connection conn = DriverManager.getConnection("jdbc:postgresql://<ip>:<port>/postgres", "postgres", null);
PreparedStatement ps = conn.prepareStatement("SELECT datname FROM pg_database WHERE datistemplate = false;");
ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getString(1));
}
}
catch (Exception e) { e.printStackTrace(System.err); }
有没有一种方法可以列出数据库而不必连接其中一个
如果我这样设置服务器的配置:
host all all 0.0.0.0/0 md5
host all all 0.0.0.0/0 trust
try (
Connection conn = DriverManager.getConnection("jdbc:postgresql://<ip>:<port>/postgres", "postgres", null);
PreparedStatement ps = conn.prepareStatement("SELECT datname FROM pg_database WHERE datistemplate = false;");
ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getString(1));
}
}
catch (Exception e) { e.printStackTrace(System.err); }
我可以通过postgres用户连接到postgres数据库,并按以下方式列出数据库:
host all all 0.0.0.0/0 md5
host all all 0.0.0.0/0 trust
try (
Connection conn = DriverManager.getConnection("jdbc:postgresql://<ip>:<port>/postgres", "postgres", null);
PreparedStatement ps = conn.prepareStatement("SELECT datname FROM pg_database WHERE datistemplate = false;");
ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getString(1));
}
}
catch (Exception e) { e.printStackTrace(System.err); }
试试看(
连接conn=DriverManager.getConnection(“jdbc:postgresql://:/postgres”,“postgres”,null);
PreparedStatement ps=conn.prepareStatement(“从pg_数据库中选择datname,其中datistemplate=false;”);
结果集rs=ps.executeQuery()){
while(rs.next()){
System.out.println(rs.getString(1));
}
}
catch(异常e){e.printStackTrace(System.err);}
但是信托期权确实是不安全的,不能使用它。但是,如果不给用户一个密码,就无法使用JDBC连接到该用户,对吗?不行,正如您所说:如果不先连接到任何数据库,就无法查询任何数据库(列出数据库是一种查询) 希望PostgreSQL在
pg_hba.conf
中有一个内置的安全系统。您必须(在防火墙顶部)对其进行调整,以仅允许:
- 特定IP
- 和/或特定用户
- 使用特定的身份验证机制