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\t用户名\t用户密码"); 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+"\t"+userName+"\t"+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))时,执行结果截图:
数据库中的结果截图: