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()方法。
分享到:
相关推荐
使用数据连结池jdbc连结private static final ThreadLocal<Connection> tl=new ThreadLocal();//泛型为值的类型
Tomcat 4.0如何配置数据库连结缓冲池
jsp j2ee 数据库连接宝典 word文档介绍
Jsp连结数据库大全 Jsp连结数据库大全 Jsp连结数据库大全 Jsp连结数据库大全 Jsp连结数据库大全
jsp连结数据库大全
ADO.net访问数据库的技术,包括数据连结,数据库查询、修改、更新和删除常规操作,是微软的系列课程。
jsp连结数据库大全,包含所有各种类型数据库的链接
jdbc连接各种数据库方式列表
JSP连结数据库大全,包括的大部分数据库连接
基于JAVA的mysql数据库管理软件,可以做毕业设计,有专门论文,如果需要另行联系,实现可视化的mysql数据库操作,以及对数据库服务器的监控,界面友好
Jsp连结数据库大全(各数据库都有)
手把手教你如何在JSP里连接数据库,有代码
C#编写的OleDb数据库连接通用类库.关于数据库连结的
本系统在数据库连结时可与Access、SQL等数据库连结. 本系统由Java纯代码开发.
演示了使用FMDB通过多线程来读和...现在ios里使用的数据库一般都是Sqlite,但是使用Sqlite有个不太好的地方就是在多线程的时候,会出现问题,sqlite只能打开一个读或者写连结。这样的话多线程就会碰到资源占用的问题。
数据库安装FireBird及FBControl、FlameRobin等工具....一个firebird数据库服务器能够管理多个独立的数据库,每一个数据库同时可支持多个客户端连结。总之:它是一个开源的,强大的,可以自由使用的数据库(即使是商业上
基于GitHub2023-03-28最新代码编译,适用于苹果arm架构芯片M1、M2以及Macos,版本1.12.3,本资源支持MySQL和数据库连结池。 Poco C++库是: 一系列C++类库,类似Java类库,.Net框架,Apple的Cocoa; 侧重于互联网...
易飞ERP系统三大报错: 一、系统控制员连接失败 二、报表数据库连接失败 三、LeaderWorkCenter ADO连接失败 检查步骤与排查详解。
一个firebird数据库服务器能够管理多个独立的数据库,每一个数据库同时可支持多个客户端连结。 关键特性:支持原子性,并发性,隔离性等概念。 MGA:支持事务的多个版本功能, 存储过程: 使用PSQL(Procedure SQL),...