Statement接口

 功能:

  1. 执行sql语句的工具接口

 

说明:

  1. 本文为了代码结构清晰 采用的是try-with-resource结构,请在java7下使用(或者自己改成传统模式)
  2. 具体使用请看例子,更多内容请看例子后的扩展阅读

 

部分API:

返回类型 方法名称 说明
void addBatch(String sql) 添加sql语句到当前的Statement sql列表
(用于批量执行)
void clearBatch() 清空但前Statement的sql列表
void close() 关闭Statement,回收资源
boolean execute(String sql) 执行sql语句
int[] executeBatch() 批量执行sql,返回每个sql影响的记录行数
ResultSet executeQuery(String sql) 执行sql查询
int executeUpdate(String sql) 执行非查询语句,返回影响记录行数
Connection getConnection() 获得数据库连接对象
int getMaxRows() 最大查询行数
int getQueryTimeout() 获得查询超时的秒数
ResultSet getResultSet() 获得查询的结果集
boolean isClosed() 判断是否已经关闭
void setMaxRows(int max) 设置最大查询记录数

 

程序演示: 放大

  1. package com.cxy.jdbc;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DatabaseMetaData;  
  5. import java.sql.DriverManager;  
  6. import java.sql.ResultSet;  
  7. import java.sql.SQLException;  
  8. import java.sql.Statement;  
  9.   
  10. /** 
  11.  * @author cxy @ www.cxyapi.com 
  12.  */  
  13. public class StatementTest  
  14. {  
  15.     public static void main(String[] args)  
  16.     {  
  17.         try(  
  18.                 Connection con=DriverManager.getConnection("jdbc:mysql://localhost/dbtest""root""root");  
  19.                 Statement stmt=con.createStatement();  
  20.                 ResultSet rs=stmt.executeQuery("select * from t_student");  
  21.             )  
  22.             {  
  23.                 //stmt.executeQuery(...),看到了吧直接用ResultSet对象接的  
  24.                 System.out.println("id\t姓名\t 性别");  
  25.                 while(rs.next())  
  26.                 {  
  27.                     System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3));  
  28.                 }  
  29.                 System.out.println("==============================");  
  30.                   
  31.                 //stmt.executeUpdate(DML) 返回执行后影响记录行数  
  32.                 System.out.println(stmt.executeUpdate("insert into t_student values ('1','小明','男')"));  
  33.                 System.out.println(stmt.executeUpdate("delete from t_student"));  
  34.                 System.out.println("==============================");  
  35.                   
  36.                 //stmt.executeUpdate(DDL) 成功返回0,不成功就报异常  
  37.                 System.out.println(stmt.executeUpdate("CREATE TABLE t_student1 (id_ varchar(32) not null)"));  
  38.                 System.out.println(stmt.executeUpdate("DROP TABLE t_student1"));  
  39.                 System.out.println("==============================");  
  40.                   
  41.                 //stmt.execute(sql) 成功返回boolean类型  
  42.                 boolean flag=stmt.execute("insert into t_student values ('1','小明','男')");  
  43.                 System.out.println("execute结果:"+flag);  
  44.                 ResultSet rs1=stmt.getResultSet();  
  45.                 System.out.println(rs1);  
  46.                 System.out.println("影响记录行数:"+stmt.getUpdateCount());  
  47.                 System.out.println("-------------------------------");  
  48.                 flag=stmt.execute("select * from t_student");  
  49.                 System.out.println("execute结果:"+flag);  
  50.                 rs1=stmt.getResultSet();  
  51.                 System.out.println(rs1);  
  52.                 System.out.println("影响记录行数:"+stmt.getUpdateCount());  
  53.                 System.out.println("==============================");  
  54.                   
  55.                 //addBatch:添加sql语句,进行批量执行  
  56.                 DatabaseMetaData dmd= con.getMetaData(); //获得数据库信息 我想看看当前数据库是否支持批量操作  
  57.                 boolean isSupportsBatchUpdates=dmd.supportsBatchUpdates();  
  58.                 System.out.println("是否支持批量操作?"+isSupportsBatchUpdates);  
  59.                 if(isSupportsBatchUpdates)  
  60.                 {  
  61.                     stmt.addBatch("insert into t_student values ('11','小明','男')");  
  62.                     stmt.addBatch("insert into t_student values ('22','小明2','男')");  
  63.                     //stmt.clearBatch(); //清理 批量操作列表 开启这句发现上面两句被清空了  
  64.                     stmt.executeBatch(); //这个返回类型是int[] 每条语句执行后影响的记录行数组成的集合  
  65.                     printResultSet(stmt.executeQuery("select * from t_student"));  
  66.                 }else  
  67.                 {  
  68.                     System.out.println("您的数据库不支持批量更新");  
  69.                 }  
  70.                 System.out.println("==============================");  
  71.                   
  72.                 //setMaxRows  
  73.                 stmt.setMaxRows(2);  
  74.                 System.out.println("最大查询行数设置为:"+stmt.getMaxRows());  
  75.                 printResultSet(stmt.executeQuery("select * from t_student"));  
  76.                 System.out.println("==============================");  
  77.                   
  78.                 //close、isClosed  
  79.                 System.out.println("Statement是否关闭:"+stmt.isClosed());  
  80.                 stmt.close();  
  81.                 System.out.println("Statement是否关闭:"+stmt.isClosed());  
  82.             }catch(SQLException e)  
  83.             {  
  84.                 System.out.println("数据库操作出现异常");  
  85.             }  
  86.     }  
  87.       
  88.     /** 
  89.      * 打印ResultSet 
  90.      */  
  91.     public  static void printResultSet(ResultSet rs2)  
  92.     {  
  93.         try  
  94.         {  
  95.             while(rs2.next())  
  96.             {  
  97.                 System.out.println(rs2.getString(1)+"\t"+rs2.getString(2)+"\t"+rs2.getString(3));  
  98.             }  
  99.         } catch (SQLException e)  
  100.         {  
  101.             e.printStackTrace();  
  102.         }  
  103.     }  
  104. }  

你可能感兴趣的:(Statement接口)