SQLNonTransientConnectionException: нет текущего соединения, в моем приложении во время взаимодействия с базой данных Derby - PullRequest
7 голосов
/ 30 мая 2011

Я внедрил базу данных 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 как ложное перед вставкой в ​​базу данных

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

Ответы [ 2 ]

3 голосов
/ 13 июля 2011

Нашел это через 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();

Отлично работает сейчас.

0 голосов
/ 30 мая 2011

Что такое Connection.createNewConnection? Я никогда не слышал о таком методе на java.sql.Connection, и я не могу найти его ни в одном из документов.

Я всегда использую DriverManager.getConnection для установления соединений с базой данных Derby.

...