Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何连接PostgreSQL server查询数据库名称列表_Java_Sql_Postgresql_Connection - Fatal编程技术网

Java 如何连接PostgreSQL server查询数据库名称列表

Java 如何连接PostgreSQL server查询数据库名称列表,java,sql,postgresql,connection,Java,Sql,Postgresql,Connection,我可以使用jdbc:postgresql://host:port/database使用jdbc驱动程序连接到postgresql server中的数据库 但是我想连接到postgresql服务器并在那里找到数据库列表。当我使用jdbc:postgresql://localhost:5432,我收到一个异常,名为 java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost:5432 是否有任何其他

我可以使用
jdbc:postgresql://host:port/database
使用jdbc驱动程序连接到postgresql server中的数据库

但是我想连接到postgresql服务器并在那里找到数据库列表。当我使用
jdbc:postgresql://localhost:5432
,我收到一个异常,名为

java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost:5432

是否有任何其他驱动程序或方法可以在不知道服务器中的数据库名称的情况下连接到服务器并查询那里的数据库列表

AFAIK,这超出了JDBC的能力。我建议你重新考虑处理更大问题的方法。环境变量或属性文件可能是解决方案。

确定。我自己已经弄明白了。我可以使用这个字符串通过jdbc驱动程序连接到服务器

jdbc:postgresql://localhost:5432/?

并可以使用此代码段获取数据库列表

private void listDownAllDatabases() {
        try {
            PreparedStatement ps = connection
                    .prepareStatement("SELECT datname FROM pg_database WHERE datistemplate = false;");
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getString(1));
            }
            rs.close();
            ps.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * Dev Parzival
 */
public class TestingDatabase {
    static String driver="org.postgresql.Driver";
    static String jdbc_url="jdbc:postgresql://localhost:5432/";
    static String username="username",password="password";
    static PrintStream out;
    static{
        out=System.out;
    }
    public static void main(String $[]){
        //SELECT datname FROM pg_database
        try{
            Class.forName(driver);
            Connection connection= DriverManager.getConnection(jdbc_url,username,password);
            Statement statement=connection.createStatement();
            ResultSet result=statement.executeQuery("SELECT datname FROM pg_database");
            while(result.next()){
                System.out.println(result.getString(1));
            }
            connection.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}
参考资料:我用它来获取所有数据库列表

private void listDownAllDatabases() {
        try {
            PreparedStatement ps = connection
                    .prepareStatement("SELECT datname FROM pg_database WHERE datistemplate = false;");
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getString(1));
            }
            rs.close();
            ps.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * Dev Parzival
 */
public class TestingDatabase {
    static String driver="org.postgresql.Driver";
    static String jdbc_url="jdbc:postgresql://localhost:5432/";
    static String username="username",password="password";
    static PrintStream out;
    static{
        out=System.out;
    }
    public static void main(String $[]){
        //SELECT datname FROM pg_database
        try{
            Class.forName(driver);
            Connection connection= DriverManager.getConnection(jdbc_url,username,password);
            Statement statement=connection.createStatement();
            ResultSet result=statement.executeQuery("SELECT datname FROM pg_database");
            while(result.next()){
                System.out.println(result.getString(1));
            }
            connection.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

希望这能对某人有所帮助

@Jay:不,那没什么帮助。请仔细阅读这个问题。出于安全原因,这是不可能的。看看这个@Jay:看来这是可能的。查看我的答案:)您必须在
//主机:端口
之后提供斜杠<代码>jdbc:postgresql://localhost:5432/-能否请您更详细地说明这意味着环境变量或属性文件可能是一种解决方案?通常,应用程序不知道数据库的原因是因为应用程序运行在不同的环境中,例如开发、测试、UAT、,这通常涉及不同的服务器和数据库,但想法是一样的。我们的想法是描述应用程序外部的数据库(或服务器),以便管理员可以设置值。这并不超出jdbc的能力。请阅读我的答案。我已经测试了它,它工作正常。这很有趣。显然,PostgreSQL内置了一种功能。看起来MySql支持类似的功能。一个重要的细节是,不能指定用户和密码。否则它无法连接。