JDBC语句

一。查询语句

1)使用executeQuery单个查询数据

    该方法用于执行产生单个结果集的SQL语句,不能执行insert、update、delete等单一DDL语句(create、drop等)。如果执行这些语句将会抛出SQLException异常。但当执行多条语句时,可以执行DDL语句,但第一条语句必须是返回结果集的SQL语句,后面跟着的是其他的任何SQL语句。

    方法定义为:ResultSet executeQuery(String sql) 。通过对返回的对象来访问查询结果集,最常用的操作是扫描结果集,可以使用ResultSet的next方法,返回的“游标”处于结果集的第一个对象的上面,没有指向第一个对象。主要完成两个任务:

    1.判断是否还有下一条记录。如果有返回true。

    2.如果有下一条记录,将当前记录指针后移一个位置。(

    在读数据时可以根据列索引和列名来读取字段。getXxx(String xx)。

    在某些情况下并不需要得到全部的查询结果,可以使用Statement接口的setMaxRows方法限制返回的记录数。此外还可以使用getMaxRows方法获得最大返回记录数。

   ResultSet其他功能:

   wasNull方法:判断最后一次使用getXxx方法读取的字段值是否为NULL。

   findColumn方法:获取某个列名在列集合中的位置。

2)使用execute执行单个查询语句

 execute可以执行任何SQL语句,并不直接返回ResultSet对象,方法如下:

     boolean execute(String sql)

    通过boolean的值确定执行的是返回结果集的SQL语句(select),还是不返回结果集的语句。如果返回true,可以通过Statement接口的getResultSet方法返回ResultSet对象。如果返回false,可以通过getUpdateCount方法返回被影响的记录数。此外,也可以直接通过getResultSet方法的返回值判断执行的是何种语句。

if(stmt.execute(...)){
    ResultSet rs = stmt.getResultSet();
    while(rs.next()){
        ...
    }
}

3)处理多个结果集ResultSet

    execute方法不仅可以执行单条查询语句,而且还可以执行多条查询语句,不同查询语句之间用分号(;)隔开。

    1.当JDBC执行多条查询语句时(全部都是select语句)

    处理所有的结果集需使用ResultSet接口的getMoreResults方法来判断是否存在下一个结果集。

    execute方法只根据多条sql语句中的第一条的类型来返回ture或false。如果第一条是查询语句,责getResultSet返回一个ResultSet对象,execute方法返回true。否则返回false.因此,在已知语句全部都是select语句时,可以不用判断。但如果是混合形式的,则需要采取2方法。

    2.当执行混合形式的语句

    方法见 “ 二。对数据库进行更新”

    boolean getMoreResults()

    该方法与next()方法不同,该方法返回的“游标”位置就处于第一个结果集上。需使用do...while()语句。

if(stmt.execute()){
    ResultSet rs = null;
    do{
    //依次获得执行多条sql语句返回的ResultSet对象
        rs = stmt.getResultSet();
        while(rs.next()){
        ..
        }
    }while(stmt.getMoreResults());
}

   需要注意的是:MySQL JDBC驱动不支持多结果集,因此要想使用execute方法执行多条查询SQL语句,必须在连接字符串中加上allowMultiQueries=true。

二。对数据库进行更新

    对数据库的另一重要操作就是更新数据库,主要包括插入数据(insert语句)、更新数据(update语句)和删除数据(delete语句)。执行方法有execute()方法、executeUpdate()方法

1)使用execute方法执行混合形式的SQL语句

    execute方法不仅可以执行查询语句,也可以执行不返回结果集的查询语句(DML),并可以同时执行上述语句的混合形式。各语句之间用分号隔开。如stmt.execute(insertDate + ";" + "insertData" + ";" + "selectData");

    结果处理方法:

    不能使用execute方法的返回值或getMoreResults方法来处理每条SQL语句的执行结果。需使用getUpdateCount方法,该方法根据执行的语句不同而返回不同的值:

    1.如果当前执行的是返回结果集的SQL语句,返回-1.

    2.否则返回实际的更新记录数。

    只有当getMoreResults方法返回false,并且getUpdateCount方法返回-1时,才表明所有的结果都被处理了。

do{

}while(!(stmt.getMoreResults()==false)&&stmt.getUpdateCount()==-1));

2)使用executeUpdate方法更新数据

    除了可以使用execute方法执行不返回结果集的SQL语句外,还可以使用executeUpdate方法来完成同样的工作。

    int executeUpdate(String sql)

    executeUpdate方法和executeQuery方法类似,当执行多条语句时,第一条语句必须是不返回结果集的SQL语句。

3)获得自增字段的值

    Statement接口的getGeneratedKeys方法,可以获得最近一次插入数据后自增字段的值。

    ResulteSet getGeneratedKeys()

   当插入多条记录时,可以通过对ResultSet扫描获得。

    也可以通过execute方法和executeUpdate方法获得自增字段的值,但如果执行多条插入语句,只返回第一条插入语句生成的自增字段的值。

你可能感兴趣的:(JDBC语句)