簡體   English   中英

NetBeans Java應用程序-在derby數據庫上執行查詢

[英]Netbeans java application - executing query on derby database

我正在NetBeans 7.2.1上構建帶有嵌入式數據庫的Java應用程序。 現在,我可以通過以下代碼與derby數據庫建立連接:

Connection con = DriverManager.getConnection(
                     "jdbc:derby:database;create=true",
                     uName,
                     uPass);

但是,我無法在數據庫的表上執行查詢。 經過研究,我嘗試執行以下代碼,但未成功:

Statement stmt = con.createStatement();

ResultSet rs;
rs = stmt.executeQuery("SELECT descricao FROM fichas");

while (rs.next()) {
    String s = rs.getString("descricao"); 
    System.out.println(s);
}

我這里有兩個問題。 首先,基於搜索,我應該如上例中那樣使用Statement stmt,但是netbeans給我一個錯誤。 為了能夠執行跟隨他的方法“ stmt.executeQuery()”,我必須將語句定義為:

java.sql.Statement stmt = con.createStatement();

如果我不這樣使用它,則無法選擇方法“ executeQuery”。 其次,即使使用此查詢也不會執行。 我在控制台上收到一個錯誤:

java.sql.SQLSyntaxErrorException:模式'ADMIN_DATABASE'不存在

有什么提示可以解決這個問題嗎? 謝謝!

最新更新:

我正在運行一些測試,這是一些新結論。 如果不是通過netbeans的服務面板創建表,而是運行代碼:

stmt.execute("create table test_table (name varchar(128))");

有用。 該表已創建,如果我再試一次,它將給出該表已存在的預期錯誤。 但是,我看了一下服務面板,找到了應用程序內嵌的derby數據庫,而其他的“測試表”卻不存在。

除此之外,如果我在該表上執行選擇操作,它不會給出任何模式錯誤,但是在其他我在服務面板上手動創建的錯誤中,它將繼續顯示該錯誤。

那么,誰能解釋一下有什么區別? 我創建的test_table去哪里了? 這種創建方式與在derby上創建表的方式有什么區別? 為什么我會收到一個而不是其他的架構錯誤?

很抱歉有這么多問題,但現在我很困惑。 謝謝!

netbeans服務面板中的數據庫在不同的JVM中運行,並且是Derby的網絡實例。 當使用您使用的URL jdbc:derby:database;create=true連接到數據庫時,最終將在JVM中創建一個嵌入式數據庫,並且該數據庫將為空。

要在“服務”面板中連接到數據庫,請使用正確的連接網址,例如jdbc:derby://localhost:1527/DATABASE_NAME此處提供更多信息)。

由於要等到我有50個代表后,我才能發表評論,因此,我將在這里發布我的回復以及靠近底部的一些實際示例代碼,這些示例代碼應有助於您指明正確的方向。

  1. 優良作法是,如果您要測試創建表的能力,請事先對DROP TABLE TABLE_NAME語句打一巴掌,只是先刪除它,然后再嘗試再次創建它。 當嘗試使用已經存在的TABLE_NAME創建表時,它不會替代它,您的語句只會失敗。

  2. 除了指定數據庫名稱之外,您還可能必須引用架構,盡管這不是確定的。

  3. 我建議使用Java方法來分隔SELECT,INSERT INTO,UPDATE,CREATE TABLE等語句。 不知道您是否已經這樣做了,但是,嘿,只是想提供幫助。

  4. 最后,這是我去年夏天在大學課程中用於類似項目的語法。 希望您可以從中閃現完成目標所需的適​​當語法。 我也在Netbeans中使用Derby數據庫完成了所有這些工作。 (見下文)

     //Variables for database connection below final String rolodexDriver = "org.apache.derby.jdbc.ClientDriver"; final String rolodexURL = "jdbc:derby://localhost:1527/rolodexDatabase"; final String dbName = "rolodexDatabase"; //db is short for database final String tableName = "Rolodex_Table"; final String user = "Joey"; final String password = "dbpassword"; //db is again short for database 

    下面是我用於通過一種方法建立與數據庫的連接的代碼。

     // Below is the method invoked to establish a connection to the database public void accessDatabase() throws ClassNotFoundException{ try { Class.forName(rolodexDriver).newInstance(); connection = DriverManager.getConnection(rolodexURL, user, password); statement = connection.createStatement(); } catch (InstantiationException | IllegalAccessException | SQLException ex) { Logger.getLogger(rolodexBean.class.getName()).log(Level.SEVERE, null, ex); } } // end of accessDatabase method 

    以下是我用於SELECT語句的代碼,請務必在此處注意語法。

      String sql = "SELECT \\"Person_name\\", \\"Person_phone_number\\" FROM \\"Rolodex_Table\\""; 

    下面是我用來更新記錄的代碼。 同樣,請務必注意語法。 您最好將表名,列名等放在\\內,因為它將它們與運算符(例如SELECT,UPDATE等)和修飾符(即WHERE,LIKE等)分開。 。

     String editSQL = ("UPDATE \\"Rolodex_Table\\" SET \\"Person_name\\"='" + nameEntry + "', \\"Person_phone_number\\"='" + phoneNumberEntry + "' WHERE \\"Person_name\\"='" + editNameEntry + "'" ); 

    (順便說一句,以防萬一,您可以像這樣多行字符串以便於閱讀,只需確保只使用一個分號,等等。如果您還可以在字符串中使用java變量,遵循我上面使用的語法。請注意phoneNumberEntry和editNameEntry都是java變量。)

希望這對您有所幫助,如果您有任何疑問,請告訴我。 我也想知道,請讓我知道它是如何工作的,以供將來參考。 (您正在從事個人項目)。祝您好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM