JDBC中execute,executeQuery和executeUpdate的区别

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: JDBC中execute,executeQuery和executeUpdate的区别

JDBC中有3种执行sql的语句分别是execute,executeQuery和executeUpdate


execute执行增删改查操作


execute返回的结果是个boolean型,当返回的是true的时候,表明有ResultSet结果集,通常是执行了select操作,当返回的是false时,通常是执行了insert、update、delete等操作。execute通常用于执行不明确的sql语句。

Class.forName(driver);  
//加载驱动  
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",  
                                  "root","1234");  
//获取数据库连接  
stmt = conn.createStatement();  
//使用Connection来创建一个Statment对象   
boolean hasResultSet = stmt.execute(sql);   
//执行SQL,返回boolean值表示是否包含ResultSet            
if (hasResultSet) { //如果执行后有ResultSet结果集  
      rs = stmt.getResultSet();  
      //获取结果集   
      ResultSetMetaData rsmd = rs.getMetaData();  
      //ResultSetMetaData是用于分析结果集的元数据接口   
      int  columnCount = rsmd.getColumnCount();  
      while (rs.next()){//输出ResultSet对象  
           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() + "条");  
}


executeQuery执行查询操作


executeQuery返回的是ResultSet结果集,通常是执行了select操作。这个方法被用来执行 SELECT 语句,但也只能执行查询语句,执行后返回代表查询结果的ResultSet对象。例如:

Class.forName("com.mysql.jdbc.Driver");  
//加载数据库驱动  
Connection  conn = null;  
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",  
             "root","1234");  
//使用DriverManager获取数据库连接  
Statement  stmt = conn.createStatement();  
//使用Connection来创建一个Statment对象  
ResultSet rs =stmt.executeQuery("select * from teacher");  
//执行查询语句并且保存结果  
while (rs.next()){  
            System.out.println(rs.getInt(1) + "/t" +    rs.getString(2));   
}  
//把查询结果输出来


executeUpdate执行增删改操作


executeUpdate返回的是int型,表明受影响的行数,通常是执行了insert、update、delete等操作。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。例如:

Class.forName("com.mysql.jdbc.Driver");  
//加载数据库驱动  
Connection  conn = null;  
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",  
       "root","1234");  
//使用DriverManager获取数据库连接  
Statement  stmt = conn.createStatement();  
//使用Connection来创建一个Statment对象  
return stmt.executeUpdate(sql);  
//执行DML语句,返回受影响的记录条数


实例:

package javaTest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
public class ConnDataBase {
  public static void main(String[] args) {
  execute();//增删改查
//  executeQuery();//excuteQuery 查
//  executeUpdate();//excuteUpdate 增删改
  }
  /**
  * 获取连接
  * @return 连接对象
  */
  public static Connection getConnection(){
  Connection con = null;
  try {
    Class.forName("oracle.jdbc.OracleDriver");//获取oracle驱动
    con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "ssh1", "ssh1");///填入url,用户名,密码
  }catch(Exception e){
    e.printStackTrace();
  }
  return con;
  }
  /**
  * 用executeUpdate执行增删改操作
  */
  public static void executeUpdate(){
  Connection con=null;
  try {
    con=getConnection();
    String sql="insert into student(s#,sname,sage,ssex) values('7','哈7','27','男')";
//    String sql="delete from student where s#='7'";
//    String sql="update student set sname='呵7' where s#='7'";
    Statement st=con.createStatement();//创建用于执行静态的statement对象
    int count=st.executeUpdate(sql);//执行sql插入(删除、更新)语句,返回插入的行数
    System.out.println("插入(删除、更新)"+count+"条数据");
    con.close();
  } catch (SQLException e) {
    e.printStackTrace();
  }
  }
  /**
  * 用executeUpdate执行查询操作
  */
  public static void executeQuery(){
  Connection con = null;
  try {
    con = getConnection();
    String sql = "select * from Student";
    Statement st = con.createStatement();
    ResultSet rs = st.executeQuery(sql);
    while (rs.next()) {
    ResultSetMetaData rsmd = rs.getMetaData();//用于分析结果集的元数据接口
             int columnCount = rsmd.getColumnCount();//列数
             for(int i=0;i<columnCount;i++){
              System.out.print(rs.getString(i+1)+" ");      
             }
             System.out.println();
    }
    con.close();
  } catch (Exception e) {
    e.printStackTrace();
  }
  }
  /**
  * 用execute执行增删改查操作
  */
  public static void execute(){
  Connection con = null;
  try {
    con = getConnection();
    String sql = "select * from Student";
//    String sql="insert into student(s#,sname,sage,ssex) values('7','哈7','27','男')";
//    String sql="delete from student where s#='7'";
//    String sql="update student set sname='呵7' where s#='7'";
    Statement st = con.createStatement();
    boolean hasResultSet = st.execute(sql);
    if(hasResultSet){
    ResultSet rs=st.getResultSet();
    while (rs.next()) {
      ResultSetMetaData rsmd = rs.getMetaData();//用于分析结果集的元数据接口
              int columnCount = rsmd.getColumnCount();//列数
              for(int i=0;i<columnCount;i++){
                System.out.print(rs.getString(i+1)+" ");      
              }
              System.out.println();
    }
    }else{
    int count=st.getUpdateCount();//受影响行数
    System.out.println("插入(删除、更新)"+count+"条数据");
    }
    con.close();
  } catch (Exception e) {
    e.printStackTrace();
  }
  }
}
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL Java 关系型数据库
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(二)
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字
|
Java 关系型数据库 MySQL
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(一)
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(一)
|
3月前
|
前端开发 关系型数据库 MySQL
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
这篇文章讨论了`com.mysql.jdbc.Driver`和`com.mysql.cj.jdbc.Driver`两个MySQL驱动类的区别,指出`com.mysql.jdbc.Driver`适用于MySQL 5的`mysql-connector-java`版本,而`com.mysql.cj.jdbc.Driver`适用于MySQL 6及以上版本的`mysql-connector-java`。文章还提到了在实际使用中如何根据MySQL版本选择合适的驱动类。
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
|
3月前
|
SQL Java 数据库连接
|
SQL Java 关系型数据库
隔离区别对待?如何捆绑?Java中的jdbc数据库事务及其隔离级别
隔离区别对待?如何捆绑?Java中的jdbc数据库事务及其隔离级别
199 1
隔离区别对待?如何捆绑?Java中的jdbc数据库事务及其隔离级别
|
Java 数据库连接
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update at org.hi
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update at org.hi
153 0
|
Java 数据库连接 数据库
SQLite三种JDBC驱动的区别
在DBeaver中看到SQLite有三种JDBC驱动,查了它们官方网站的相关解释,发现它们还是挺不一样的。   SQLite Wrapper by Christian http://www.ch-werner.de/javasqlite/ 这个驱动其实是在本地C/C++的SQLite上用JDBC实现进行了包装。
1522 0
|
Java 数据库连接 索引
JDBC与Hibernate的占位符区别
JDBC与Hibernate的占位符区别
133 0
|
关系型数据库 数据库 PostgreSQL
DriverManager.registerDriver(new Driver());与Class.forName(“com.mysql.jdbc.Driver”);的区别
DriverManager.registerDriver(new Driver());与Class.forName(“com.mysql.jdbc.Driver”);的区别
267 0
|
SQL Java 数据库连接
Hive JDBC:Permission denied: user=anonymous, access=EXECUTE, inode=”/tmp”
今天使用JDBC来操作Hive时,首先启动了hive远程服务模式:hiveserver2 &(表示后台运行),然后到eclipse中运行程序时出现错误: Permission denied: user=anonymous, access=EXECUTE, inode=”/tmp” 解决办法:报错内容...
2452 0