JAVA基础 之 Statement
Statement:执行sql语句的工具接口
概述:
1.本文为了代码结构清晰 采用的是try-with-resource结构,请在java7下使用(或者自己改成传统模式)
2.sql大体的分类
a.查询(select)
b.DDL—数据定义语言(create,alter,drop)
c.DML—数据操纵语言(delete,update,insert)
d.DCL—数据控制语言(grant,revoke)
e.事务控制(commit,rollback)
这是详细的分类,很多分类是把a并入b,e并入d
3.executeQuery、execute、executeUpdate区别
executeQuery:顾名思义,执行查询语句,返回类型是ResultSet
executeUpdate:执行DDL和DML语句,返回类型 int,DDL执行后返回0,DML执行后返回受影响的记录行数
execute:什么都能执行,需要注意的是他的返回类型,返回的是boolean类型
true:代表有结果集,用stmt.getResultSet();来获得结果集
false:代表没有结果集,用stmt.getUpdateCount();来获得影响的记录数
4.本文介绍的方法列表
executeQuery、execute、executeUpdate、getResultSet、getUpdateCount
addBatch、executeBatch、clearBatch、close、isClosed、setMaxRows、getMaxRows
package com.cxy.jdbc; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * @author cxy */ public class StatementTest { public static void main(String[] args) { try( Connection con=DriverManager.getConnection("jdbc:mysql://localhost/dbtest", "root", "root"); Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery("select * from t_student"); ) { //stmt.executeQuery(...),看到了吧直接用ResultSet对象接的 System.out.println("id\t姓名\t 性别"); while(rs.next()) { System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)); } System.out.println("=============================="); //stmt.executeUpdate(DML) 返回执行后影响记录行数 System.out.println(stmt.executeUpdate("insert into t_student values ('1','小明','男')")); System.out.println(stmt.executeUpdate("delete from t_student")); System.out.println("=============================="); //stmt.executeUpdate(DDL) 成功返回0,不成功就报异常 System.out.println(stmt.executeUpdate("CREATE TABLE t_student1 (id_ varchar(32) not null)")); System.out.println(stmt.executeUpdate("DROP TABLE t_student1")); System.out.println("=============================="); //stmt.execute(sql) 成功返回boolean类型 boolean flag=stmt.execute("insert into t_student values ('1','小明','男')"); System.out.println("execute结果:"+flag); ResultSet rs1=stmt.getResultSet(); System.out.println(rs1); System.out.println("影响记录行数:"+stmt.getUpdateCount()); System.out.println("-------------------------------"); flag=stmt.execute("select * from t_student"); System.out.println("execute结果:"+flag); rs1=stmt.getResultSet(); System.out.println(rs1); System.out.println("影响记录行数:"+stmt.getUpdateCount()); System.out.println("=============================="); //addBatch:添加sql语句,进行批量执行 DatabaseMetaData dmd= con.getMetaData(); //获得数据库信息 我想看看当前数据库是否支持批量操作 boolean isSupportsBatchUpdates=dmd.supportsBatchUpdates(); System.out.println("是否支持批量操作?"+isSupportsBatchUpdates); if(isSupportsBatchUpdates) { stmt.addBatch("insert into t_student values ('11','小明','男')"); stmt.addBatch("insert into t_student values ('22','小明2','男')"); //stmt.clearBatch(); //清理 批量操作列表 开启这句发现上面两句被清空了 stmt.executeBatch(); //这个返回类型是int[] 每条语句执行后影响的记录行数组成的集合 printResultSet(stmt.executeQuery("select * from t_student")); }else { System.out.println("您的数据库不支持批量更新"); } System.out.println("=============================="); //setMaxRows stmt.setMaxRows(2); System.out.println("最大查询行数设置为:"+stmt.getMaxRows()); printResultSet(stmt.executeQuery("select * from t_student")); System.out.println("=============================="); //close、isClosed System.out.println("Statement是否关闭:"+stmt.isClosed()); stmt.close(); System.out.println("Statement是否关闭:"+stmt.isClosed()); }catch(SQLException e) { System.out.println("数据库操作出现异常"); } } /** * 打印ResultSet */ public static void printResultSet(ResultSet rs2) { try { while(rs2.next()) { System.out.println(rs2.getString(1)+"\t"+rs2.getString(2)+"\t"+rs2.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } } }
声明:
1.原创文章,转载请标明并加本文连接。
2.更详尽的API请参见 http://docs.oracle.com/javase/7/docs/api/
3.文章反映个人愚见,如有异议欢迎讨论指正
上一篇: 逆光小清新的实战技法与后期技巧详情介绍
下一篇: JAVA基础 之 异常