JDBC中execute,executeQuery和executeUpdate的区别

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 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();
  }
  }
}
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
SQL Java 关系型数据库
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(二)
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字
|
Java 关系型数据库 MySQL
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(一)
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(一)
|
前端开发 关系型数据库 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 的区别
|
SQL Java 数据库连接
|
Java 数据库连接 数据库
SQLite三种JDBC驱动的区别
在DBeaver中看到SQLite有三种JDBC驱动,查了它们官方网站的相关解释,发现它们还是挺不一样的。   SQLite Wrapper by Christian http://www.ch-werner.de/javasqlite/ 这个驱动其实是在本地C/C++的SQLite上用JDBC实现进行了包装。
1683 0
|
SQL Java 关系型数据库
隔离区别对待?如何捆绑?Java中的jdbc数据库事务及其隔离级别
隔离区别对待?如何捆绑?Java中的jdbc数据库事务及其隔离级别
隔离区别对待?如何捆绑?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
249 0
|
Java 数据库连接 索引
JDBC与Hibernate的占位符区别
JDBC与Hibernate的占位符区别
198 0
|
关系型数据库 数据库 PostgreSQL
DriverManager.registerDriver(new Driver());与Class.forName(“com.mysql.jdbc.Driver”);的区别
DriverManager.registerDriver(new Driver());与Class.forName(“com.mysql.jdbc.Driver”);的区别
334 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” 解决办法:报错内容...
2559 0
下一篇
oss云网关配置