Netbeans java应用程序 - 在derby数据库上执行查询

时间:2012-11-07 10:20:08

标签: java sql netbeans derby

我正在使用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))");

它有效。该表已创建,如果我再次尝试,它会给出表已存在的预期错误。但是,我看一下服务面板,应用嵌入式德比数据库,这个'测试表'与其他人不在一起。

除此之外,如果我在该表上执行select,它不会给出架构错误,但在我在服务面板上手动创建的其他错误中,它会继续给出错误。

那么,任何人都可以解释一下有什么区别吗?我创建的test_table去了哪里?这种创作模式与在德比中创建表格的区别是什么?为什么我会收到模式错误而不是其他错误?

很抱歉这么多问题,但现在我很困惑。谢谢!

2 个答案:

答案 0 :(得分:1)

netbeans中服务面板中的数据库在不同的JVM中运行,并且是Derby的网络实例。使用您使用的URL jdbc:derby:database;create=true连接到数据库时,最终会在JVM中创建嵌入式数据库,并且此数据库将为空。

要连接到服务面板中的数据库,请使用正确的连接网址,例如jdbc:derby://localhost:1527/DATABASE_NAME(更多信息here

答案 1 :(得分:0)

因为它不会让我发表评论,直到我有50个代表,因为原因,我会在这里发布我的回复,以及一些靠近底部的实际示例代码,这些代码应该有助于指向正确的方向

  1. 这是一个很好的做法,如果您正在尝试测试创建表的能力,则可以事先打开DROP TABLE TABLE_NAME语句,只是在再次尝试创建它之前将其删除。尝试使用已存在的TABLE_NAME创建表时,它不会替换它,您的语句将失败。

  2. 除了指定数据库的名称外,您可能还必须引用您的架构,但这不是确定的。

  3. 我建议使用java方法分隔SELECT,INSERT INTO,UPDATE,CREATE TABLE等语句。不确定你是否已经这样做了,但是嘿,只是想帮忙。

  4. 最后,这是我在去年夏天学习的大学课程中用于类似项目的语法。希望您可以从中获得实现目标所需的适​​当语法。我也使用Derby数据库在Netbeans中完成了这一切。 (见下文)

    //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变量。)

  5. 我希望这一切都可以帮助你,如果你有任何问题,请告诉我。一定要让我知道它是如何工作的,我也想知道,以供我自己将来参考。 (你看,在个人方面工作。祝你好运。