2

我正在尝试使用 JDBC 连接到我的本地主机上的 Derby 数据库。

我已经使用命令启动了数据库:java -jar lib;derbyrun.jar server start,它在端口 1527 上成功启动。

在另一个命令终端上,我使用命令:java -classpath .;lib;derbyclient.jar testsqldatabase.TestSQLDatabase但我收到以下错误:

java.sql.SQLException: No suitable driver found for jdbc:postgresql:COREJAVA
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at testsqldatabase.TestSQLDatabase.getConnection(TestSQLDatabase.jav
)
        at testsqldatabase.TestSQLDatabase.runTest(TestSQLDatabase.java:39)
        at testsqldatabase.TestSQLDatabase.main(TestSQLDatabase.java:26)

我的datatbase.properties文件包含以下几行:

jdbc.drivers=org.postgresql.Driver
jdbc.url=jdbc:postgresql:COREJAVA
jdbc.username=dbuser
jdbc.password=secret

下面列出了java程序:

public class TestSQLDatabase 
{
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException
    {
        try
        {
            runTest();
        }
        catch(SQLException ex)
        {
            for(Throwable t: ex)
                t.printStackTrace();
        }
    }
    /*Runs a test by creating a table, adding a value, 
    showing the table contents, removing the table*/

    public static void runTest() throws SQLException, IOException
    {
        try(Connection conn = getConnection())
        {
            Statement stat = conn.createStatement();

            stat.executeUpdate("CTEATE TABLE Greetings (Message CHAR(20))");
            stat.executeUpdate("INSERT INTO Greetings VALUES ('Hello, World!')");

            try(ResultSet result = stat.executeQuery("SELECT * FROM Greetings"))
            {
                if(result.next())
                    System.out.println(result.getString(1));
            }
            stat.executeUpdate("DROP TABLE Greetings");
        }
    }

    /*
     * Gets a connection from the properties specified in the 
     * file database.properties. @return the database connection
     */
    public static Connection getConnection() throws SQLException, IOException
    {
        Properties props = new Properties();
        try(InputStream in = Files.newInputStream(Paths.get("database.properties")))
        {
            props.load(in);
        }
        String drivers = props.getProperty("jdbc.drivers");
        if(drivers != null) System.setProperty("jdbc.drivers", drivers);
        String url = props.getProperty("jdbc.url");
        String username = props.getProperty("jdbc.username");
        String password = props.getProperty("jdbc.password");

        return DriverManager.getConnection(url, username, password);
    }
}

谁能弄清楚为什么我从第二个命令终端收到该错误?

谢谢,非常感谢

4

2 回答 2

5

Derby 是一个数据库。PostgreSQL 是一个不同的数据库。您正在运行一个 Derby 数据库,并且需要相应的 Derby JDBC 驱动程序来与它通信——而不是 PostgreSQL 驱动程序。

于 2013-04-19T14:45:32.617 回答
1

您想使用 PostgreSQL 驱动程序(在属性文件中)连接到 Derby;数据库的URL也写得不好;它应该是:jdbc:${dataBaseVendor}:${server}:${port}/${databaseName}在你的情况下,databaseVendor=derby。

还要确保您的类路径中有 Derby JDBC 驱动程序 jar。

于 2013-04-19T14:47:40.157 回答