2016-01-07 108 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

相關問題