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.文章反映个人愚见,如有异议欢迎讨论指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值