0

是否可以使用 java 查找 PostgreSQL 版本并使用 java 代码启动 PostgreSQL 服务器?

要查找版本,我们有 PG_VERSION 文件,该文件在 PostgreSQL 数据目录下有版本,但我们不能依赖它,因为该文件可以编辑。请帮帮我。任何建议都非常感谢。

4

5 回答 5

3

您还可以使用 DatabaseMetaData查找服务器的版本。它具有用于获取有关服务器信息的辅助方法。getDatabaseProductVersion(), getDatabaseMajorVersion(),getDatabaseMinorVersion() 会给你数据库服务器版本。

于 2012-10-26T06:02:34.280 回答
2

快速谷歌搜索显示查询:

select version();

通过 JDBC 运行它,无论如何你都有 java。至于运行 postgres 服务器本身,我认为旧方法Runtime.exec/ProcessBuilder可以完成这项工作。您可能想在它上面创建某种脚本,但我猜它应该工作的方式,没有其他方法。

如果您在linux机器上运行,也许您应该将服务器安装为服务并分别运行它,但从Java的角度来看(如果您真的想从java运行它)它仍然是对外部进程的调用。

希望这可以帮助

于 2012-10-26T05:52:21.710 回答
0

如果PG_VERSION被编辑,服务器将不会启动。不要那样做。一般来说,PostgreSQL 数据目录是禁止直接编辑的。

在运行时,您可以使用SELECT version()来获取正在运行的服务器的版本。

可以使用 启动和停止服务器pg_ctl。您可以检查服务器二进制文件的版本,无论服务器是否正在运行postgres --versionpg_ctl --version.

二进制文件和数据目录的位置是您可以根据安装服务器的方式来控制的。

于 2012-10-26T05:52:36.980 回答
0

运行查询: select version()
将为您提供 posgresql 的确切版本

于 2012-10-26T06:34:54.593 回答
0

您也可以使用DatabaseMetaData界面。它更加通用,不仅适用于 postgreSQL,而且为您提供的不仅仅是数据库版本。这是有关如何使用它的示例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;

/**
 * @author Binyamin Regev on on 30/11/2016.
 * @version 1.0
 * @since 1.8
 */

public class DatabaseMetaDataHelper {

    static Connection connection = null;
    static DatabaseMetaData metadata = null;


    public DatabaseMetaDataHelper() throws SQLException{

        boolean success = initJDBCDriver();
        if (!success) { throw new SQLException("INIT JDBC DRIVER FAILED!"); }

        success = connectToDatabase();
        if (!success) { throw new SQLException("Connect to database FAILED"); }

        connection = databaseConnection.getConnection();

        try {
            metadata = databaseConnection.getConnection().getMetaData();
        } catch (SQLException e) {
            System.err.println("There was an error getting the metadata: " + e.getMessage());
            e.printStackTrace();
        }
    }

    public boolean initJDBCDriver() {
        try {
            Class.forName("org.postgresql.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("Where is your PostgreSQL JDBC Driver? Include in your library path!");
            e.printStackTrace();
            return false;
        }

        System.out.println("PostgreSQL JDBC Driver Registered!");
        return true;
    }

    public boolean connectToDatabase() {
        try {
            connection = DriverManager.getConnection(
                    "jdbc:postgresql://127.0.0.1:5432/postgres",
                    "postgres",
                    "admin");

        } catch (SQLException e) {
            System.out.println("Connection Failed! Check output console");
            e.printStackTrace();
            return false;
        }

        if (connection == null) {
            System.out.println("Failed to make connection!");
            return false;
        }

        System.out.println("You made it, take control your database now!");
        return true;
    }

    public static Connection getConnection() {
        return connection;
    }

    public static String getDatabaseProductName() {
        try {
            return metadata.getDatabaseProductName();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getDriverName() {
        try {
            return metadata.getDriverName();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getUserName() {
        try {
            return metadata.getUserName();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getDatabaseProductVersion() {
        try {
            return metadata.getUserName();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getDriverVersion() {
        try {
            return metadata.getDriverVersion();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getURL() {
        try {
            return metadata.getURL();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static int getDriverMinorVersion() {
        return metadata.getDriverMinorVersion();
    }

    public static int getDriverMajorVersion() {
        return metadata.getDriverMajorVersion();
    }

    public static int getDatabaseMinorVersion() {
        try {
            return metadata.getDatabaseMinorVersion();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return -1;
    }

    public static int getDatabaseMajorVersion() {
        try {
            return metadata.getDatabaseMajorVersion();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return -1;
    }

    public static int getJDBCMajorVersion() {
        try {
            return metadata.getJDBCMajorVersion();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return -1;
    }

    public static int getJDBCMinorVersion() {
        try {
            return metadata.getJDBCMinorVersion();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return -1;
    }

    public static void main(String[] args) {
        try {
            DatabaseMetaDataHelper helper = new DatabaseMetaDataHelper();
            int result = helper.connectToDatabase();

            System.out.println("Database product name = " + getDatabaseProductName());
            System.out.println("Database product version = " + getDatabaseProductVersion());
            System.out.println("Database User name = " + getUserName());
            System.out.println("Driver name = " + getDriverName());
            System.out.println("Driver version = " + getDriverVersion());
            System.out.println("URL = " + getURL());
            System.out.println("Driver major version = " + getDriverMajorVersion());
            System.out.println("Driver minor version = " + getDriverMinorVersion());
            System.out.println("Databse major version = " + getDatabaseMajorVersion());
            System.out.println("Databse minor version = " + getDatabaseMinorVersion());
            System.out.println("JDBC major version = " + getJDBCMajorVersion());
            System.out.println("JDBC minor version = " + getJDBCMinorVersion());

            /*
             * Print all the tables of the database scheme,
             * with their names and structure
             */
            getColumnsMetadata(getTablesMetadata());
        } catch (SQLException e) {
            System.out.println(e.getMessage());
            System.err.println("There was an error retrieving the metadata properties: "+ e.getMessage());
        }
    }
}
于 2016-11-30T14:46:19.673 回答