2014-01-26 155 views
1

我試圖連接到derby數據庫。在JDBC中使用JDBC連接到derby數據庫

我在控制檯下面的錯誤運行該應用程序後:

01:07:31.698 [main] INFO o.s.j.d.DriverManagerDataSource - Loaded JDBC driver: org.apache.derby.jdbc.EmbeddedDriver 
Creating records 
01:07:31.826 [main] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL update 
01:07:31.828 [main] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL statement [INSERT INTO `students` (name,age) VALUES (?,?)] 
01:07:31.845 [main] DEBUG o.s.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource 
01:07:31.845 [main] DEBUG o.s.j.d.DriverManagerDataSource - Creating new JDBC DriverManager Connection to [jdbc:derby:c:\temp\database\test01;create=true] 
Exception in thread "main" org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Failed to start database 'c:\temp\database\test01' with class loader [email protected], see the next exception for details. 
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:628) 
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:907) 
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:968) 
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:978) 
    at Student.dao.StudentImplementationOfDao.insert(StudentImplementationOfDao.java:22) 
    at main.Application.main(Application.java:31) 
Caused by: java.sql.SQLException: Failed to start database 'c:\temp\database\test01' with class loader [email protected], see the next exception for details. 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source) 
    at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source) 
    at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source) 
    at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(Unknown Source) 
    at org.apache.derby.impl.jdbc.EmbedConnection40.<init>(Unknown Source) 
    at org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Unknown Source) 
    at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source) 
    at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:120) 
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111) 
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77) 
    ... 6 more 
Caused by: java.sql.SQLException: Failed to start database 'c:\temp\database\test01' with class loader [email protected], see the next exception for details. 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) 
    ... 24 more 
Caused by: java.sql.SQLException: Another instance of Derby may have already booted the database C:\temp\database\test01. 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) 
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) 
    ... 21 more 
Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database C:\temp\database\test01. 
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) 
    at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source) 
    at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(Unknown Source) 
    at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source) 
    at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source) 
    at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source) 
    at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source) 
    at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source) 
    at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source) 
    at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source) 
    at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source) 
    at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(Unknown Source) 
    at org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(Unknown Source) 
    at org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Unknown Source) 
    ... 21 more 

我建立連接到數據庫的代碼是:

 DriverManagerDataSource ds = new DriverManagerDataSource(); 
    ds.setDriverClassName("org.apache.derby.jdbc.EmbeddedDriver"); 
    ds.setUrl("jdbc:derby:c:\\temp\\database\\test01;create=true"); 
    ds.setUsername(""); 
    ds.setPassword(""); 
    siod.setDataSource(ds); 

從我能在理解上面顯示的錯誤與試圖插入的PreparedStatement有關。

的SQL語句是:

"INSERT INTO `students` (name,age) VALUES (?,?) 

我解析這個SQL的實例化的JdbcTemplate其中有上面提到的數據源。 這裏是確切的代碼:

public void insert(Student student) 
{ 
//ds is simply the dataSource that gets created in the code example above 
JdbcTemplate create = new JdbcTemplate(ds); 
create.update(sql,new Object[]{student.name,student.age}); 

} 

我敢肯定,這個問題有一個簡單的答案,但我就是不明白,究竟是什麼原因造成這個錯誤。這是聲明嗎?是否導致連接失敗?我該如何解決導致我的代碼失敗的問題?

謝謝

+1

錯誤的相關部分是'java.sql.SQLException:無法啓動數據庫'c:\ temp \ database \ test01''。 –

回答

4

德比的另一個實例可能已經啓動數據庫 C:\ TEMP \數據庫\ TEST01。

對於嵌入式數據庫,只有嵌入式應用程序可以訪問它。檢查以確保您的以前的應用程序已完全停止。最簡單的解決方案就是重啓你的操作系統,但如果你熟悉查殺進程,你可以查找所有的java進程並殺死它們。

我有時看到的另一件事是,有人將文件從Derby數據庫複製到另一個位置,同時正在使用該Derby數據庫。這使數據庫的副本處於鎖定狀態。這可能不是你的問題,但。