我正在尝试连接derby数据库并向表中插入一些值。因为我使用了以下代码。
Class.forName("org.apache.derby.jdbc.ClientDriver");
Connection con=DriverManager.getConnection(
"jdbc:derby://localhost:1527/raptor;create=true","root","root");
if (con != null) {
System.out.println("Connected to database - mydb");
}
Statement st=con.createStatement();
String q="insert into VINOTH values(7)";
st.executeUpdate(q);
在上面的代码中,当调用getConnection
方法时,我给数据库用户" root"和密码为" root",但它给了我错误
Schema' ROOT'不存在
实际上root是一个数据库用户,但它需要一个模式。为什么会这样?
如果我给" APP"而不是数据库用户" root"它工作正常。但我需要知道它为什么不占用我的用户名和密码。
答案 0 :(得分:0)
在derby中启用身份验证并设置用户和密码。它将设置数据库级别身份验证。
Statement s = conn.createStatement();
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(\n"
+ " 'derby.connection.requireAuthentication', 'true')");
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(\n"
+ " 'derby.authentication.provider', 'BUILTIN')");
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(\n"
+ " 'derby.user.root', 'root')");
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(\n"
+ " 'derby.database.propertiesOnly', 'true')");
只需要设置一次。然后可以使用此URL访问您的数据库
"jdbc:derby://localhost:1527/raptor;create=true","root","root"
了解详情,
http://db.apache.org/derby/docs/10.11/security/cseccsecure42374.html