Встроенная ошибка дерби Netbeans

Я создал GUI alp с базой данных. У меня проблема с подключением Embedded. Я сделал это встроенное соединение на вкладке «Службы»> «Драйверы»> «Java DB (встроенное)» и подключился с помощью. Я ввожу данные следующим образом: введите здесь описание изображения

;create=true - это то, что я пишу, потому что обычно это не создает папку базы данных в папке приложения. Я создаю таблицу и помещаю этот URL-адрес в jer код con = DriverManager.getConnection

Когда я запускаю приложение и когда я ввожу данные в соответствующие поля, которые должны заполнить эту базу данных, появляется следующая ошибка: java.-sql.SQLSyntaxErrorException: Table/View 'nameTable' не существует!

Сначала я добавил драйвер derby.jar в библиотеку, а затем добавил драйвер Java DB, который поставляется с Netbeans, но ошибка остается. Одна и та же ошибка появляется независимо от того, что я делаю.

Вот код:

private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                               
   try {     Connection con;

            Connection db = null;

        con = DriverManager.getConnection("jdbc:derby:testBase;create=true ", "app", "admin77");

        Statement stmt = con.createStatement();
        String Query ="INSERT  INTO LINGU (NAME , CONCTRACTNO , EMAIL , PHONE , VIBER ) VALUES ('"+fNameLname.getText()+"' , '"+contTxt.getText()+"' , '")
        stmt.execute(Query);

       JOptionPane.showMessageDialog(null,"You have successfully added this vendor to the list of Lingu vendors.");

        fNameLname.setText(null);
        contTxt.setText(null);
        emailTxT.setText(null);
        phoneTxT.setText(null);
        viberBox.setSelectedIndex(0);
    }     
    catch(SQLException ex){
        JOptionPane.showMessageDialog(null, ex.toString());
    }
}                                       

Стол:

http://i.imgur.com/nJKa9zV.png


person Unofficialpage    schedule 17.03.2016    source источник


Ответы (1)


С URL-адресом соединения JDBC, таким как jdbc:derby:testBase;create=true, вы указываете Derby получить доступ к базе данных с именем testBase, которая находится в папке с именем testBase относительно того, что является текущим рабочим каталогом при запуске вашей программы.

И вы также говорите Derby, что, если в папке с именем testBase нет базы данных относительно того, что является текущим рабочим каталогом, когда вы запускаете свою программу, Derby должен продолжить и создать новую новую пустую базу данных в этом месте.

Такой подход позволяет легко запутаться, потому что, если вы запустите программу один раз в одном каталоге, создадите несколько таблиц и загрузите некоторые данные, а затем снова запустите программу в другом каталоге, будет казаться, что все ваши таблицы исчезли и исчезли. все ваши данные исчезли.

(Это не так, просто вы создали две разные базы данных и не понимаете, какую базу данных вы используете для какого запуска вашей программы.)

Обратите внимание, что с точки зрения Derby среда IDE NetBeans — это просто еще одна программа, использующая Derby, а сама среда IDE NetBeans имеет свой собственный «текущий рабочий каталог», и он почти наверняка отличается от текущего каталога. рабочий каталог, который вы используете, когда запускаете свою программу вручную.

Способность Derby использовать относительные пути файловой системы для местоположений баз данных и его способность незаметно создавать новую пустую базу данных по запросу (create=true) — очень приятные функции, но они также могут сбивать с толку, когда вы только начинаете изучать Derby.

Достаточно простой альтернативой является отказ от использования относительных путей к базе данных в URL-адресе подключения JDBC, а вместо этого всегда используйте абсолютный путь к базе данных, например:

jdbc:derby:/path/to/my/db/folder/testBase

Затем вы обнаружите, что всегда используете одну и ту же базу данных, и ваши данные будут там, когда вы в следующий раз откроете эту базу данных.

person Bryan Pendleton    schedule 18.03.2016