我正在尝试使用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);
}
}
任何人都可以找出我从第二个命令终端收到错误的原因吗?
谢谢,非常感谢
答案 0 :(得分:5)
Derby是一个数据库。 PostgreSQL是一个不同的数据库。您正在运行Derby数据库,并且需要相应的Derby JDBC驱动程序与它通信 - 而不是PostgreSQL数据库。
答案 1 :(得分:1)
您希望使用PostgreSQL驱动程序(在属性文件中)连接到Derby;还有数据库的URL写得不好;它应该是:jdbc:${dataBaseVendor}:${server}:${port}/${databaseName}
在你的情况下,databaseVendor = derby。
还要确保在类路径上有Derby JDBC驱动程序jar。