`
robinsoncrusoe
  • 浏览: 737941 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

Java数据库连结技术JDBC

    博客分类:
  • JAVA
阅读更多
  2.2.2 执行查询语句
    在JDBC中,查询可以使用不同的类来完成:Statement,PreparedStatement,或CallableStatement对象。当然,它们之间存在着一些不同之处。我们给出的例子中使用的是Statement类,其他两种我们将在后面做介绍。
    1. Statement类
    Statement 对象用于把 SQL 语句发送到 DBMS 。你只须简单地创建一个 Statement 对象并且执行它,使用适当的方法执行你发送的 SQL 语句。对 SELECT 语句来说,可以使用 executeQuery。要创建或修改表的语句,使用的方法是 executeUpdate。
    Statement类主要用于一般SQL查询语句。其编程步骤如下:
   (1)创建Statement 对象
    Connection类的createStatement 方法用于建立一个Statement 对象。
         Statement stmt = con.createStatement();
   (2)执行查询语句
    Statement类使用executeQuery方法来执行一查询语句。executeQuery的参数是用字符串类型表达的SELECT语句。它的返回值是一个ResultSet类的对象。例如:
         String query = "SELECT * FROM books";
         ResultSet r = stmt.executeQuery (query);
    该语句将返回表books中的所有的记录。
    又如:
         ResultSet rs=stmt.executeQuery(“SELECT name, author FROM books  WHERE price<20”);
    返回表book中定价小于20元的书的name和author。
    (3)获取和设置选项
    对于Statement对象也可以设置许多选项,下面给出其中的两个。
      1)SetMaxRows:设置容纳的最多记录数的选项,超过记录数的结果将被丢弃且不通知用户。它的参数是一个整型值。getMaxRows方法返回目前结果集能容纳的最多记录数。
      2)GetQueryTimeOut:设置一个语句的执行等待时间,它的参数是以秒为单位的整型值。若驱动程序等待一个语句执行的时间超过了此值,则产生一个SQLExeption。getQueryTimeOut返回目前这个选项的值。
    (4)关闭Statement
    一个无用的Statement对象在垃圾回收时将会被自动关闭,但最好在使用完Statement对象后立即关闭。在关闭Statement对象时,如果其上还有结果集,该结果集也将被关闭。
        stmt.close()。
    2. PreparedStatement
    Statement对象在每次执行SQL语句时,都要将该语句转给数据库,在多次执行同一语句时,这样做的效率较低。使用PreparedStatement类可以提高效率。
    如果数据库支持预编译,它可以将SQL语句传给数据库做预编译,以后每次执行这个SQL语句时,速度就可以提高很多;如果数据库不支持预编译,则在语句执行时,才将其传给数据库。不过,数据库支不支持预编译对用户来说是透明的。
PreparedStatement对象的SQL语句还可以接受参数。在语句中指出需要接受哪些参数,然后进行预编译。在每一次执行时,可以给SQL语句传输不同的参数,这样就大大提高了程序的灵活性。
    PreparedStatement类是Statement类派生出来的子类,因此,Statement类中的方法,它都可以使用。
   (1)创建PreparedStatement对象
    从一个Connection对象可以创建一个PreparedStatement对象。在创建时,应该给出要预编译的SQL语句。例如:
       PreparedStatement stmt=con. prepareStatement(“SELECT * FROM books”);
    对于接受参数的SQL语句,将在以后章节中讲述。
   (2)执行查询语句
    PreparedStatement对象也使用executeQuery方法来执行语句。需要注意,与Statement类不同的是该方法没有参数。这是由于创建PreparedStatement对象时,已经给出了要执行的SQL语句,并进行了预编译。执行时,只需要执行已编译好的语句就可以了。
       ResultSet rs=pstmt.executeQuery();
    上述语句可以被执行多次,无须重新给出SQL语句。同Statement类一样它返回一个ResultSet对象。对ResultSet的处理将在下一节中讲述。
    PreparedStatement类也有一个不带参数的execute方法,用于可能返回多个ResultSet语句的执行。
   (3)获取和设置选项
    PreparedStatement类是使用它的父类Statement类的相应方法来获取和设置选项的,详见Statement类中关于“获取和设置选项”的叙述。
   (4)关闭对象
    PreparedStatement对象也是使用close()方法来关闭,实际上,它是使用父类Statement的close()方法。
    3.CallableStatement
    CallableStatement对象用于执行数据库中的存储过程。存储过程是数据库中已经存在的SQL查询语句。执行该存储过程的结果同执行相应的SQL语句是一样的。存储过程可以有输入参数,也可以有输出参数。
   (1)创建CallableStatement对象
    Connection类的PreparedCall方法可以创建一个CallableStatement对象。它的参数是一个String对象,一般格式为“{Call ProcedureName ()}”,其中ProcedureName是存储过程的名称。
   (2)执行存储过程
    CallableStatement类使用父类PreparedStatement类的executeQuery方法或execute 方法来执行存储过程的。例如:
         ResultSet rs=cstmt.executeQuery();
    对结果的处理方法也同PreparedStatement一样,将在下一节中讲述。
   (3)获取和设置选项
    CallableStatement 类是使用Statement类的相应方法来获取和设置选项的,详见Statement类中关于“获取和设置选项”的叙述。
   (4)关闭CallableStatement
    CallableStatement对象也是使用close()方法来关闭的,实际上,它使用的是父类Statement 的close()方法。 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics