execute、executeQuery和executeUpdate之间的区别 转
转:http://blog.csdn.net/colin_fantasy/article/details/3898070
execute、executeQuery和executeUpdate之间的区别
JDBC中Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。使用哪一个方法由 SQL 语句所产生的内容决定。
1>方法executeQuery
用于产生单个结果集(ResultSet)的语句,例如 SELECT 语句。
被使用最多的执行 SQL 语句的方法。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL
语句。但也只能执行查询语句,执行后返回代表查询结果的ResultSet对象。
如:
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//使用DriverManager获取数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",
"root","1234"); //使用Connection来创建一个Statment对象
Statement stmt = conn.createStatement(); //执行查询语句
ResultSet rs =stmt.executeQuery("select * from teacher"); //把查询结果输出来
while (rs.next()) { System.out.println(rs.getInt(1) + "/t" + rs.getString(2));
}
2>方法executeUpdate
用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数(int),指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
如:
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver"); //使用DriverManager获取数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",
"root","1234"); //使用Connection来创建一个Statment对象
Statement stmt = conn.createStatement();
//执行DML语句,返回受影响的记录条数
return stmt.executeUpdate(sql);
3>方法execute:
可用于执行任何SQL语句,返回一个boolean值,表明执行该SQL语句是否返回了ResultSet。如果执行后第一个结果是ResultSet,
则返回true,否则返回false。但它执行SQL语句时比较麻烦,通常我们没有必要使用execute方法来执行SQL语句,而是使用
executeQuery或executeUpdate更适合,但如果在不清楚SQL语句的类型时则只能使用execute方法来执行该SQL语句了。
如:
//加载驱动
Class.forName(driver);
//获取数据库连接
conn = DriverManager.getConnection(url , user , pass);
//使用Connection来创建一个Statment对象
stmt = conn.createStatement();
//执行SQL,返回boolean值表示是否包含ResultSet
boolean hasResultSet = stmt.execute(sql);
//如果执行后有ResultSet结果集
if (hasResultSet) { //获取结果集
rs = stmt.getResultSet(); //ResultSetMetaData是用于分析结果集的元数据接口
ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount();
//迭代输出ResultSet对象
while (rs.next()) {//依次输出每列的值
for (int i = 0 ; i < columnCount ; i++ )
{
System.out.print(rs.getString(i + 1) + "/t");
}
System.out.print("/n");
}
} else
{ System.out.println("该SQL语句影响的记录有" + stmt.getUpdateCount() + "条");
}
最新文章
- [.NET] 利用 async &; await 进行异步 IO 操作
- ZeroMQ接口函数之 :zmq_inproc – &#216;MQ 本地进程内(线程间)传输方式
- redis php
- 【POJ】The Suspects(裸并查集)
- http://www.cnblogs.com/gaojing/archive/2011/08/23/2413616.html
- 全面解读JavaScript入门到进阶,100%基础知识掌握!
- 《java入门第一季》之tcp协议下的编程实现键盘录入数据不断地往服务器端发送数据案例
- FragmentTabHostAutoDemo【FragmentTabHost可滑动的选项卡】
- 【转载】ASP.NET中Server.MapPath方法获取网站根目录总结
- 自动化测试-3.selenium8种常用元素定位
- android 5.0安装应用冲突问题
- Lambda学习---StreamApi使用
- dubbo源码解析-spi(二)
- c# List 所有操作方法例子
- 爬虫学习之-git拉取远程错误
- zDialog弹出层插件
- 前端学习之路之CSS (二)
- SDUT OJ 数据结构实验之链表九:双向链表
- MAthJax入门教程(五分钟上手)
- [Link-Cut-Tree][BZOJ2002]弹飞绵羊
热门文章
- linux安装 redis(redis-3.0.2.tar.gz) 和 mongodb(mongodb-linux-x86_64-rhel62-4.0.0)
- Android.应用软件.常用程序下载地址_20190913
- gdi+ 中发生一般性错误
- python基础-2 编码转换 pycharm 配置 运算符 基本数据类型int str list tupple dict for循环 enumerate序列方法 range和xrange
- python控制流-循环
- Ubuntu解决Nvidia驱动缺失导致的HDMI无法输出问题
- mysql修改库、表、字段 字符集,中文排序
- JAVA总结--正则表达式
- Sql Server 之游标
- 正在连接localhost...无法打开到主机的连接。 在port 8080: 连接失败