`

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数据库连接Statement

    通过深入探讨`Statement`的创建、使用方法以及与之相关的其他类(如`PreparedStatement`和`CallableStatement`)的区别,帮助读者更好地理解如何在Java程序中执行SQL命令。 ### Java数据库连接中的Statement #### ...

    java基础知识应用

    在“java基础知识应用”这个主题中,我们主要探讨的是Java语言的基础概念及其在实际开发中的应用,特别是与数据库交互的部分。 一、Java语言基础 1. 类与对象:Java基于面向对象的编程理念,所有程序都是由类和对象...

    java基础笔记

    本篇将详细探讨Java基础,涵盖面向对象编程、Java Standard Edition (Java SE)、MySQL数据库、Java Database Connectivity (JDBC)以及Web开发相关知识。 首先,让我们深入理解面向对象编程。面向对象编程(Object-...

    Java基础类

    Java基础类是学习Java编程语言的关键部分,涵盖了各种核心概念和技术。这些概念和技术构成了Java程序设计的基础,并在实际开发中广泛应用。以下是对标题和描述中提及的Java基础类知识点的详细解释: 1. **字符串...

    最经典的Java基础实验与案例开发指导教程精选

    本教程"最经典的Java基础实验与案例开发指导教程精选"旨在提供一个全面的学习平台,帮助新手快速掌握Java编程的核心概念。以下是对该教程内容的详细解读: 1. **Java基础概念**:Java的基础包括变量、数据类型、...

    java基础巩固

    "Java基础巩固"的主题涵盖了Java语言的核心概念和技术,是准备Java面试或深化编程技能的重要资源。下面将对Java的基础知识、数据库交互、框架以及常见的面试题进行详细阐述。 一、Java基础知识 1. **语法与数据...

    javajava基础基础

    一、Java 流和文件操作 Java 中的流主要分为两类:字节流和字符流,它们分别继承自 ...这些知识点涵盖了 Java 的基础知识,包括文件操作、数据库交互、网络编程以及 GUI 开发,对于理解和掌握 Java 编程至关重要。

    java入门基础汇,总如何学习java

    1. **Java面向对象**:面向对象是Java的核心特性之一,它基于类和对象的概念。类是具有属性(数据成员)和行为(方法)的模板,而对象则是类的实例。面向对象编程(OOP)包含三个主要原则:封装,继承和多态。封装...

    Java基础之JDBC相关代码

    Java基础之JDBC相关代码是Java编程中一个重要的部分,主要涉及如何与关系型数据库进行交互。在Java中,JDBC(Java Database Connectivity)是一套规范,它为开发者提供了标准的API,使得Java应用程序能够连接到各种...

    Java基础课件

    本Java基础课件将带你深入理解和掌握这门强大的语言。 一、Java语言基础 Java的基础包括语法、数据类型、变量、运算符、流程控制语句等。数据类型分为基本类型(如int、float、char)和引用类型(如类、接口、数组...

    java基础知识总结

    1. 平台无关性是Java的核心特性之一,这意味着Java程序可以在任何支持Java虚拟机(JVM)的平台上运行,无需针对特定操作系统进行修改。源代码级的平台无关性意味着用Java编写的程序在不同系统中只需重新编译即可,而...

    java基础视频-试看.rar

    这个"java基础视频-试看.rar"似乎是一份专为初学者设计的教程资源,帮助学习者掌握Java编程的基本概念和语法。让我们深入探讨一下Java的基础知识。 1. **Java简介**:Java是由Sun Microsystems(后被Oracle收购)...

    复习java基础.pdf

    以上知识点涵盖了Java基础中的核心部分,包括数据类型处理、数据库交互、安全编程和并发编程。理解并熟练运用这些概念对于任何Java开发者来说都是至关重要的。对于准备面试或者巩固基础的同学,深入理解和实践这些...

    Java基础教程(Java

    Java是一种广泛使用的...Java基础教程通常会涵盖以上这些内容,学习者可以通过阅读`Java基础教程.pdf`进一步深入理解和掌握Java编程的基础概念和技能。这个PDF文档将是一个全面的指南,帮助初学者逐步进入Java的世界。

    JAVA基础swf视频教程下载(108课).txt

    根据提供的文件信息,我们可以推断出这是一份关于JAVA基础的教学资源,具体为SWF格式的视频教程。接下来,我们将围绕这份资源展开详细介绍,并从中提炼出相关的JAVA基础知识点。 ### JAVA基础swf视频教程下载(108...

    JAVA基础.doc

    ### JAVA基础知识点详解 #### 第一章:开发简单JAVA应用程序 **1.1 简介** 本章节主要介绍如何开发简单的Java应用程序,包括Java语言的基础概念、发展历程以及开发环境的搭建。 **1.2 JAVA简介** Java是一种...

    Java编程基础.pdf

    1. Java基础语法:Java是一种面向对象的编程语言,它严格区分大小写,要求程序员遵守特定的语法规则来编写代码。 2. 数据类型: - 基本数据类型:包括byte(8位)、short(16位)、int(32位)、long(64位)、...

    新手入学Java编程基础

    【Java编程基础】是计算机科学领域的一门重要课程,尤其对于初学者而言,它是进入软件开发世界的敲门砖。Java以其“一次编写,到处运行”的跨平台特性,以及丰富的类库和强大的社区支持,成为了全球范围内广泛使用的...

    JAVA 基础教学课件

    Java Database Connectivity (JDBC) API是Java连接数据库的标准接口,通过DriverManager、Connection、Statement和ResultSet等类实现数据库的连接、查询、增删改操作。 这套【JAVA 基础教学课件】将详细讲解以上...

    【IT十八掌徐培成】Java基础第22天-04.JDBC基础.zip

    本课程"【IT十八掌徐培成】Java基础第22天-04.JDBC基础"可能是由知名IT教育专家徐培成教授的,主要讲解了Java基础的第22天课程,专注于JDBC的基础知识。课程内容可能涵盖了以下几个核心知识点: 1. **JDBC API概述*...

Global site tag (gtag.js) - Google Analytics