zoukankan      html  css  js  c++  java
  • 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 || 点返回首页

  • 相关阅读:
    Codeforces 67A【模拟】
    Codeforces325 D【并查集维护连通性】
    CodeForces 363D 【二分+贪心】
    Lightoj1084【DP啊DP】
    lightoj1062【几何(二分)】
    lightoj1066【BFS】
    lightoj1064 【DP求方案】
    lightoj1063【求割点】
    lightoj 1074【spfa判负环】
    CodeForces 382C【模拟】
  • 原文地址:https://www.cnblogs.com/aeon/p/10068876.html
Copyright © 2011-2022 走看看