2016-01-07 80 views
0

我想连接derby数据库并向table.for中插入一些值,我使用下面的代码。什么是给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是一个数据库用户,但它作为一个模式。这是为什么发生?

如果我给“APP”而不是数据库用户“root”,它工作正常。但我需要知道为什么它不接受我的用户和密码。

+0

也许root用户只有权限的根架构? –

+0

重复此操作。 http://stackoverflow.com/questions/20854122/error-is-java-sql-sqlsyntaxerrorexception-schema-root-does-not-exist – horatius

+0

关于用户名和默认模式之间关系的另一个很好的问题/答案在这里: http://stackoverflow.com/q/15735068/193453 –

回答

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

+0

我试过但没有用 – KVK

+0

看这篇文章http://stackoverflow.com/questions/8224840/why-am-i-getting-these-errors-from -apache德比 – Zia

相关问题