execute、executeQuery、executeUpdate三者之间有什么区别

executeQuery

用于产生单个结果集语句(ResultSet),这个方法只能用于SELECT语句。

ResultSet executeQuery(String sql) throws SQLException; 这个是他的接口,发现返回值是ResultSet

    String driver = "com.mysql.jdbc.Driver";
	String username = "root";
	String password = "a1b2c3";
	String connrctionUrl = "jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF-8&useSSL=false";

    // Stop1: 注册数据库驱动
	Class.forName(driver);
	
	// Stop2: 获取数据库的连接
	conn = DriverManager.getConnection(connrctionUrl, username, password);
	
	// Stop3: 执行sql 语句
	String sql = "UPDATE `book` set `number` = 3 WHERE `id` = 8";
	Statement stmt = conn.createStatement();
    stmt.executeQuery(sql);

会抛出java.sql.SQLException: Can not issue data manipulation statements with executeQuery().异常

结论 :executeQuery只能进行SELECT,从而得到结果集对象,测试DELETE,UPDATE,INSERT操作都会抛出异常。

executeUpdate

int executeUpdate(String sql) throws SQLException;这个是他的接口,发现返回值是int


    // Stop1: 注册数据库驱动
	Class.forName(driver);
	
	// Stop2: 获取数据库的连接
	conn = DriverManager.getConnection(connrctionUrl, username, password);
	
	// Stop3: 执行sql 语句
	String sql = "UPDATE `book` set `number` = 3 WHERE `id` = 8";
	String sql1 = "SELECT * FROM book";
	String sql2 = "INSERT INTO `book` VALUES (DEFAULT,'JSP程序设计',12,85.3,'计算机','1.jpg')";
	String sql3 = "DELETE FROM  `book` WHERE `id` = 1;";
	Statement stmt = conn.createStatement();
	//查询
	//stmt.executeUpdate(sql1); 抛出异常  java.sql.SQLException: Can not issue SELECT via executeUpdate() or executeLargeUpdate().
	
	//修改
	//int count = stmt.executeUpdate(sql); 
	//得到收到影响的行数,无异常抛出。
	
    //插入
    //int count = stmt.executeUpdate(sql2);
    //得到受影响行数,无异常抛出。
    
    //删除
    //int count = stmt.executeUpdate(sql3); 
    //得到受影响行数,无异常抛出
	
	

结论:executeUpdate 用来执行修改,插入,删除操作,执行SELECT会抛出异常

execute

boolean execute(String sql) throws SQLException;这是他的接口,发现返回值是boolean


	// Stop1: 注册数据库驱动
	Class.forName(driver);
	
	// Stop2: 获取数据库的连接
	conn = DriverManager.getConnection(connrctionUrl, username, password);
	
	// Stop3: 执行sql 语句
	String sql = "UPDATE `book` set `number` = 2 WHERE `id` = 9";
	String sql1 = "SELECT * FROM book";
	String sql2 = "INSERT INTO `book` VALUES (DEFAULT,'JSP程序设计',12,85.3,'计算机','1.jpg')";
	String sql3 = "DELETE FROM  `book` WHERE `id` = 1;";
	Statement stmt = conn.createStatement();
	
	boolean isOk = stmt.execute(sql);
	if(isOk)
	{
		System.out.println("isOK");
	}
	else
	{
		System.out.println("error");
	}
    //执行sql语句(改操作) 发现返回 false 输出 error 但是数据库中的内容发生了变化
    //执行sql1(查操作)语句 发现返回true 输出 isOK 
    //执行sql2(插入操作)语句 发现返回false, 输出 error,但是数据库中的内容发生了变化。
    //执行sql3(删除操作)发现返回false 输出error,但是数据库中的内容发生了变化
    
    //到此百思不得解呀,所以查询了相关资料,发现execute的返回值原来是用于判断是   否返回了ResultSet结果集对象所以有了续集。
    

既然是用于判断有没有结果集,那么我就稍微做一个小小的测试吧!

    //查询是肯定有结果集对象的,因为我数据库中存在数据。
   
    // Stop1: 注册数据库驱动
	Class.forName(driver);
	
	// Stop2: 获取数据库的连接
	conn = DriverManager.getConnection(connrctionUrl, username, password);
			
	conn = DriverManager.getConnection(connrctionUrl, username, password);
    Statement stmt = conn.createStatement();
	ResultSet rs = null; //结果集对象
	ResultSetMetaData rsmd = null ;  //ResultSetMetaData是用于分析结果集的元数据接口 
	int colNumConut = 0;  
	boolean isOk = stmt.execute(sql1);
	if(isOk)
	{
		rs = stmt.getResultSet();
		rsmd = rs.getMetaData();
		colNumConut = rsmd.getColumnCount();
	}
	else
	{
		System.out.println("error");
	}
	
	//遍历打印数据
	while( rs.next() )
	{
		for(int i=0; i<colNumConut; i++ )
		{
			System.out.print(rs.getString(i+1) + "\t" );
		}
		System.out.println();
	}

输出结果:
8	红楼梦	2	31.88	经典文学	7.jpg	
9	测试	2	34.00	测试	2.jpg	
10	测试	10	56.80	计算机编程	a.jpg	
11	测试	1	1.00	测试	2.jpg	
12	JAVA高级编程	20	33.30	计算机	3.jpg
13	t	3	3.00	3	3	
34	test1	1	1.00	test1	1.jpg	
36	JSP程序设计	12	85.30	计算机	1.jpg	
37	JSP程序设计	12	85.30	计算机	1.jpg	

    

结论:execute可以用来执行任意SQL语句,返回一个boolean的值,表明该语句是否返回了一个结果集对象ResultSet。通常一般没有必要去使用execute。 excuteQuery,executeUpdate适合于很多场景的使用。那么我们什么时候该使用execute呢?那就是你也不知道sql语句是什么类型的时候,就用execute吧

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值