#database #jdbc #database-connection #derby
#База данных #jdbc #подключение к базе данных #derby
Вопрос:
Я внедрил базу данных derby в своем приложении для сохранения своих данных, и я получаю это исключение при получении select
запроса формы набора результатов в базе данных Derby. Для установления соединения я использую строку подключения как:
Я устанавливаю соединение, используя этот метод:
Я объявляю этот метод в классе Connection.java:
public synchronized Connection createConnection() throws Exception {
Connection rescon = null;
try {
if (this.dbuser == null) {
rescon = DriverManager.getConnection(this.URI ";create=true");
} else {
rescon = DriverManager.getConnection(this.URI ";create=true",
this.dbuser, this.dbpass);
}
// new connection in connection pool created
} catch (SQLException e) {
final String stackNum = Utility.exceptionHandler(e);
throw new Exception("Exception get during Connection - " e.getMessage());
}
return rescon;
}
Я использовал этот метод как и создать соединение, создать соединение во время выполнения операции с использованием строки:
private Connection objConnection = null;
objConnectionpool = new Connection("jdbc:derby:" Folder.getAbsolutePath() "/myapplication" sFileName, null, null, "org.apache.derby.jdbc.EmbeddedDriver");
objConnection = objConnectionpool.createNewConnection();
Я получаю исключение при выполнении запроса:
sQuery = "select value,reason from " TableNm " where fileName ='" FileName "' AND type='" Type "' AND status ='remaining'";
во время обработки и взаимодействия с базой данных Derby мы могли бы обновлять, а также получать данные из базы данных:
Я выполняю setAutoCommit как false перед вставкой в базу данных
objConnection.setAutoCommit(false);
после вставки:
ps = objConnection.prepareStatement(sQuery);
rs = ps.executeQuery();
objConnection.commit();
objConnection.setAutoCommit(true);
Я получаю исключение как
java.sql.SQLNonTransientConnectionException: No current connection.
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.newEmbedSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.noCurrentConnection(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.checkIfClosed(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.setupContextStack(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
at com.myapplication.c.aw.a(Unknown Source)
at com.myapplication.c.aw.a(Unknown Source)
at com.myapplication.main.avd.run(Unknown Source)
Caused by: java.sql.SQLException: No current connection.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
... 11 more
Комментарии:
1. Что это
Connection.createNewConnection
? Я никогда не слышал о таком методе наjava.sql.Connection
, и я не могу найти его ни в одном из документов. Я всегда используюDriverManager.getConnection
для установления соединений с базой данных Derby.2. Исключение указывает на то, что вы не успешно подключились. Попробуйте ввести некоторые вызовы «System.out.println» в свой код, где вы вызываете DriverManager.getConnection, и распечатать значения, которые вы передаете в getConnection(), и распечатать возвращаемое соединение. И, если вы получаете исключение из вызова getConnection (), распечатайте это исключение тоже.
Ответ №1:
Нашел это через Google.
У меня была та же проблема, и я нашел свой ответ в этом примере приложения:http://db.apache.org/derby/docs/10.4/devguide/rdevcsecure26537.html
// force garbage collection to unload the EmbeddedDriver // so Derby can be restarted System.gc();
Теперь работает отлично.