使用JDBC连接到Derby

时间:2013-04-19 14:42:51

标签: java jdbc derby

我正在尝试使用JDBC连接到我的locahost上的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);
    }
}

任何人都可以找出我从第二个命令终端收到错误的原因吗?

谢谢,非常感谢

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

还要确保在类路径上有Derby JDBC驱动程序jar。