使用java查找版本并启动PostgreSQL

使用java查找版本并启动PostgreSQL,java,postgresql,Java,Postgresql,是否可以使用java查找PostgreSQL版本,并使用java代码启动PostgreSQL服务器 要查找版本,我们有PG_版本文件,该文件的版本位于PostgreSQL数据目录下,但我们不能依赖它,因为该文件可以编辑。请帮帮我。非常感谢您的建议 快速谷歌搜索显示查询: select version(); 通过JDBC运行它,您仍然拥有java。 至于运行postgres服务器本身,我认为旧的方式Runtime.exec/ProcessBuilder可以完成这项工作。你可能想在它上面创建一些脚

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


要查找版本,我们有PG_版本文件,该文件的版本位于PostgreSQL数据目录下,但我们不能依赖它,因为该文件可以编辑。请帮帮我。非常感谢您的建议

快速谷歌搜索显示查询:

select version();
通过JDBC运行它,您仍然拥有java。 至于运行postgres服务器本身,我认为旧的方式
Runtime.exec/ProcessBuilder
可以完成这项工作。你可能想在它上面创建一些脚本,但是我想,它应该是这样工作的,没有其他方法了

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


希望这有助于

快速谷歌搜索揭示查询:

select version();
通过JDBC运行它,您仍然拥有java。 至于运行postgres服务器本身,我认为旧的方式
Runtime.exec/ProcessBuilder
可以完成这项工作。你可能想在它上面创建一些脚本,但是我想,它应该是这样工作的,没有其他方法了

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


希望这有帮助

如果编辑了
PG\u版本
,服务器将无法启动。不要那样做。一般来说,PostgreSQL数据目录禁止直接编辑

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

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


二进制文件和datadir的位置可以根据服务器的安装方式进行控制。

如果编辑了
PG\u版本
,服务器将无法启动。不要那样做。一般来说,PostgreSQL数据目录禁止直接编辑

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

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


二进制文件和datadir的位置可以根据服务器的安装方式进行控制。

您还可以使用找到服务器的版本。它具有用于获取服务器信息的帮助器方法
getDatabaseProductVersion()
getDatabaseMajorVersion()
getDatabaseMinorVersion()
将为您提供数据库服务器版本

您还可以使用找到服务器的版本。它具有用于获取服务器信息的帮助器方法
getDatabaseProductVersion()
getDatabaseMajorVersion()
getDatabaseMinorVersion()
将为您提供数据库服务器版本

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

将为您提供posgresql的确切版本。您还可以使用
数据库元数据
接口。它更为通用,不仅适用于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());
        }
    }
}

您还可以使用
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());
        }
    }
}

命令postgres--version和pg_ctl--version仅在Unix/Linux中工作。我们有没有在Windows或Mac中执行相同操作的命令?呃。。。这些命令在MacOSX或Windows上都能正常工作。您的困惑可能是由于可执行文件不在
路径上
?使用完整路径调用它们,如
C:\Program Files\PostgreSQL\9.2\bin\postgres.exe-version
,或者将安装目录添加到
路径
,这样您就可以调用它们,而无需在命令行上指定路径。这不是特定于PostgreSQL的,这只是非常基本的计算机/操作系统的东西。命令postgres--version和pg_ctl--version都只在Unix/Linux中工作。我们有没有在Windows或Mac中执行相同操作的命令?呃。。。这些命令在MacOSX或Windows上都能正常工作。您的困惑可能是由于可执行文件不在
路径上
?使用完整路径调用它们,如
C:\Program Files\PostgreSQL\9.2\bin\postgres.exe-version
,或者将安装目录添加到
路径
,这样您就可以调用它们,而无需在命令行上指定路径。这不是特定于PostgreSQL的,这只是非常基本的计算机/操作系统。