Исключение SQLNonTransientConnectionException: нет текущего соединения в моем приложении при взаимодействии с базой данных Derby

#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();
  

Теперь работает отлично.