dljd_008_jdbc中调用Statement的execute()执行DQL,DDL,DML

一、statement.execute()方法既能执行DQL也能执行DDL和DML、如何判断执行的是那种类型的语句、然后做相应的处理呢?

  判断的伪代码如下:

if(statement.execute(sql)){//如果为true、则执行的是DQL语句
        //循环遍历结果  
}else{ //否则执行的是DML和DDL
       //some code
}

  具体示例:

  

package edu.aeon.jdbc;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
 * [说明]:使用statement的execute执行DQL(查询)、DML(增删改)及DDL(创建)
 * @author aeon
 */
public class TestStatment {

    public static void main(String[] args) {
        Connection connection=null;
        Statement statement=null;
        ResultSet resultSet=null;
        try {
            //2.1加载/注册驱动
            //driver是jdbc声明的标准接口、com.mysql.jdbc.Driver是mysql数据库厂商根据这个标准做的实现、注意这两个Driver是有区别的。
            Driver driver=new com.mysql.jdbc.Driver(); //接口声明引用指向实现类的对象
            DriverManager.registerDriver(driver);
            //2.2获取和数据库服务器的连接(java程序是客户端    mysql是个服务器)
            String username="root"; //用户名
            String password="root";    //密码
            //url中的jdbc:mysql说明:jdbc是由sun公司制定的一套网络协议  jdbc:mysql是指jdbc协议下的mysql子协议。
            String url="jdbc:mysql://localhost:3306/db_test";
            //2.3连接服务器     Connection是jdbc规范中声明的接口
            connection=DriverManager.getConnection(url, username, password);
            //2.4通过连接对象获取执行sql语句的对象
            statement=connection.createStatement();
            String sql="select * from user";
            //String sql="insert into user(userid,username,userpw)values(10007,'张三','张三')";
            //String sql="create table test1(id int primary key,name varchar(10))";//简单的DDL测试语句
            //statement.execute(sql)结果为true时、表示这个sql语句为DQL语句、否则为DML/DDL
            if(statement.execute(sql)){ //如果是DQL、则接受结果集并循环输出结果
                resultSet=statement.getResultSet();
                System.out.println("用户id	用户名	用户密码");
                while(resultSet.next()){//初始时指向表前面、和游标相似 .next()方法表示移动到下一条记录并判断有没有数据。如果有则结果为true。否则false
                    //resultSet.getString(1);//根据记录下标来获取该下标所对应的字段值、不推荐
                    int userId=resultSet.getInt("userId");//根据表字段名获取该行记录上的字段名所对应的字段值
                    String userName=resultSet.getString("userName");
                    String userPw=resultSet.getString("userpw");//数据库中的字段不区分大小写
                    System.out.println(userId+"	"+userName+"	"+userPw);
                }
            }else{//DML和DDL
                int count=statement.getUpdateCount();//返回更新计数器或者0
                System.out.println(count+"行已更新!");
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            if(null!=statement){
                try {
                    statement.close();
                } catch (SQLException e) {
                    System.out.println("关闭流失败!--->statement");
                    e.printStackTrace();
                }
            }
            if(null!=connection){
                try {
                    connection.close();
                } catch (SQLException e) {
                    System.out.println("关闭流失败!--->connection");
                    e.printStackTrace();
                }
            }
        }
    }

}

当执行sql语句为:select * from user时、执行结果截图:

 

当执行的sql语句为:insert into user(userid,username,userpw)values(10007,'张三','张三')时、执行结果截图:

  

当执行的sql语句为:create table test1(id int primary key,name varchar(10))时,执行结果截图:

  

数据库中的结果截图:

  

  

如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

原文地址:https://www.cnblogs.com/aeon/p/10068876.html