`

JAVA基础 之 Statement

    博客分类:
  • java
阅读更多

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

1
1
分享到:
评论

相关推荐

    西安交大JAVA 基础讲义

    1.详细讲述了JAVA环境变量的配置和说明 2.透彻的介绍了类,对象的概念 3.对JAVA的多态,继承,封装做了比较详细的介绍 ...9.使用JDBC,ODBC连接数据库,介绍了Connection,Statement ,ResultSet的使用方法和注意事项。

    java基础案例与开发详解案例源码全

    18.2.3 Statement接口466 18.2.3 PreparedStatement接口467 18.2.4 ResultSet接口467 18.3 JDBC操作SQL469 18.4 JDBC基本示例473 18.5 JDBC应用示例479 18.6 本章习题492 第19章 19.1 网络编程的基本概念494 19.1.1 ...

    java面试题大全--java基础,struts,spring,ejb等

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...

    最全面Java面试题,从corejava到javaWeb共180多题(含答案)

    【基础】31、java 中会存在内存泄漏吗,请简单描述。【基础】36、GC 是什么? 为什么要有GC? 【基础】118、Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?120、JDBC,Hibernate 分页怎样实现...

    一个开源的Java基础工具包

    数据库工具类,提供了关闭方法:关闭可以传入多个参数,关闭的顺序是按照参数的顺序来的,用于一次性关闭Connnection、Statement、ResultSet等 newSqlRunner方法用于快速新建一个SqlRunner(此类介绍参考下问) 3、...

    Java建立数据库连接并实现数据库查询.rar

    Java建立数据库连接并实现数据库查询,初学者通过本Java源代码,了解如何加载驱动器,获取连接,定义SQL查询语句,获取Statement对象,执行查询、遍历ResultSet、获取数据、在控制台输出数据,关闭连接等。

    javaMybatis个人整理(印象笔记导入即可)

    Mybatis 是一个优秀的基于 Java 的持久层框架,它内部封装了 Jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。Mybatis 通过 xml 或注解的方式将要...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《Java JDK 7学习笔记》将IDE操作纳为教学内容之一,使读者能与实践结合,提供的视频教学能更清楚地帮助读者掌握操作步骤。 内容简介 书籍 计算机书籍  《java jdk 7学习笔记》是作者多年来教学实践经验的总结...

    java面试题大全(2012版)

    Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    java面试800题

    7.在java中尽量使用preparestatement执行sql,从而共享执行计划" Q0032 Oracle的集合操作函数,如sum(),avg(),max(),min(),与select,where,grouby,having的先后顺序,使用方法 Oracle集合查询基本知识,只有进行...

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用、Spring核心之IoC、...

    Java面试宝典2020修订版V1.0.1.doc

    二、Java基础部分 13 1、java中有哪些基本类型? 13 2、java为什么能够跨平台运行? 13 3、String是基本数据类型吗?我可不可以写个类继承于String? 14 4、谈谈&和&&的区别? 14 5、Switch语句里面的条件可不可以是...

    Java面试宝典-经典

    Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte...

    Java面试宝典2010版

    Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte...

    JAVA银行管理系统设计.docx

     案例难度 案例覆盖技能点 使用JDBC操作数据库、常用数据库操作对象的使用、ArrayList的使用、加深对集合框架的理解、异常的处理、scanner的使用 推荐案例完成时间 1天 适用课程和对象 JAVA面向对象编程基础 第...

Global site tag (gtag.js) - Google Analytics