转: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() + "条");
}

最新文章

  1. [.NET] 利用 async &amp; await 进行异步 IO 操作
  2. ZeroMQ接口函数之 :zmq_inproc – &#216;MQ 本地进程内(线程间)传输方式
  3. redis php
  4. 【POJ】The Suspects(裸并查集)
  5. http://www.cnblogs.com/gaojing/archive/2011/08/23/2413616.html
  6. 全面解读JavaScript入门到进阶,100%基础知识掌握!
  7. 《java入门第一季》之tcp协议下的编程实现键盘录入数据不断地往服务器端发送数据案例
  8. FragmentTabHostAutoDemo【FragmentTabHost可滑动的选项卡】
  9. 【转载】ASP.NET中Server.MapPath方法获取网站根目录总结
  10. 自动化测试-3.selenium8种常用元素定位
  11. android 5.0安装应用冲突问题
  12. Lambda学习---StreamApi使用
  13. dubbo源码解析-spi(二)
  14. c# List 所有操作方法例子
  15. 爬虫学习之-git拉取远程错误
  16. zDialog弹出层插件
  17. 前端学习之路之CSS (二)
  18. SDUT OJ 数据结构实验之链表九:双向链表
  19. MAthJax入门教程(五分钟上手)
  20. [Link-Cut-Tree][BZOJ2002]弹飞绵羊

热门文章

  1. linux安装 redis(redis-3.0.2.tar.gz) 和 mongodb(mongodb-linux-x86_64-rhel62-4.0.0)
  2. Android.应用软件.常用程序下载地址_20190913
  3. gdi+ 中发生一般性错误
  4. python基础-2 编码转换 pycharm 配置 运算符 基本数据类型int str list tupple dict for循环 enumerate序列方法 range和xrange
  5. python控制流-循环
  6. Ubuntu解决Nvidia驱动缺失导致的HDMI无法输出问题
  7. mysql修改库、表、字段 字符集,中文排序
  8. JAVA总结--正则表达式
  9. Sql Server 之游标
  10. 正在连接localhost...无法打开到主机的连接。 在port 8080: 连接失败