上一章的代码中,可以发现,jdbc执行DDL和DML有几个步骤都是一样的:

   1)执行语句开始时,创建驱动注册对象、获取连接的数据库对象、创建Statement对象

             // 创建驱动注册对象
Class.forName("com.mysql.jdbc.Driver"); // 获取连接的数据库对象
Connection conn = DriverManager.getConnection(url, user,
password); // 创建Statement对象
Statement stsm = conn.createStatement();

  

    2)所有操作执行完后,关闭连接(后来的先关)

             if (stsm != null) {
try {
stsm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}

所以,我们可以把这三大部分凑起来,建立一个jdbc的工具类:

  jdbcutil

    

 /**
* 这是jdbc执行DDL和DML的工具类
*
* @author LZl
*
*/
public class Jdbcutil { // 创建数据库的基本信息
// 创建url
private static String url = "jdbc:mysql://localhost:3306/day1029?useUnicode=true&characterEncoding = GB2312 ";
// 数据库的用户名和密码
private static String user = "root";
private static String password = "root";
public static Connection conn = null;
static Statement stsm = null; /**
* 一:注册的驱动程序 获取连接对象的方法 静态代码块(好处是只需要加载一次,且随着类的加载而加载)
*/ static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
e.printStackTrace();
System.out.println("获取数据库连接对象出错");
}
} /**
* 二:获取连接对象 该方法返回一个连接
*/ public static Connection getConnection() { // 创建连接对象
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}
return conn; } /**
* 三:释放资源,断开连接 参数列表:conn。stsm
*/ public static void close(Connection conn, Statement stsm) { if (stsm != null) {
try {
stsm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}
} if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
  
}

   工具类再重载一个带有3个参数的关闭连接的方法:

 1     public static void close(Connection conn,Statement stmt,ResultSet rs){
2 if(rs!=null)
3 try {
4 rs.close();
5 } catch (SQLException e1) {
6 e1.printStackTrace();
7 throw new RuntimeException(e1);
8 }
9 if(stmt!=null){
10 try {
11 stmt.close();
12 } catch (SQLException e) {
13 e.printStackTrace();
14 throw new RuntimeException(e);
15 }
16 }
17 if(conn!=null){
18 try {
19 conn.close();
20 } catch (SQLException e) {
21 e.printStackTrace();
22 throw new RuntimeException(e);
23 }
24 }
25 }

然后,1)jdbc使用DDL的方法要这样:

 public class UtilTest {

     private static Connection conn = null;
// 创建Statement对象
private static Statement stsm; // 执行DDL语句(创建)
private static void DDL() { try {
// 使用jdbc工具类来获取连接对象
conn = Jdbcutil.getConnection(); // 准备sql语句
String sql = "CREATE TABLE person(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(10),sex VARCHAR(5),age INT,psot VARCHAR(10),email VARCHAR(20),phone INT)"; stsm = conn.createStatement(); // 发送sql语句
int result = stsm.executeUpdate(sql);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
// 调用工具类的方法,关闭连接
Jdbcutil.close(conn, stsm);
}
}
public static void main(String[] args) {
DDL();
}
}

 

  

  2)执行DML语句:

     //创建驱动注册对象
private static Connection conn = null;
// 创建Statement对象
private static Statement stsm = null; // 执行DML语句(插入)
private static void DML() { try {
// 使用工具类获取连接对象
conn = Jdbcutil.getConnection(); // 准备sql语句
String sql = "INSERT INTO person (NAME,sex,age) VALUES ('张三','男',20);"; // 创建statement对象
stsm = conn.createStatement(); // 执行sql语句
int result = stsm.executeUpdate(sql);
System.out.println("影响了" + result + "行"); } catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
// 调用工具类关闭连接
Jdbcutil.close(conn, stsm);
}
}

  3)执行DQL语句:

     // 创建驱动注册对象
private static Connection conn = null;
// 创建Statement对象
private static Statement stsm = null; // 执行DQL语句
private static void DQL() { try { // 调用工具类连接对象
conn = Jdbcutil.getConnection(); // 创建statement对象
stsm = conn.createStatement(); // 准备sql语句
String sql = "SELECT * FROM person;"; // 执行sql语句,返回的是RrsultSet对象
ResultSet rs = stsm.executeQuery(sql); // 查看第二行数据 // 移动光标
rs.next();
rs.next();
// 使用列名来查看
int id = rs.getInt("id");
String name = rs.getString("name");
String sex = rs.getString("sex");
System.out.println(id + "," + name + "," + sex); } catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
// 调用工具类关闭连接,这里要多关闭一个连接:ResultSet,工具类的关闭方法要添加它
Jdbcutil.close(conn, stsm,rs);
} }

  

jdbc java数据库连接 3)Statement接口之执行DDL和DML语句的简化的更多相关文章

  1. jdbc java数据库连接 3)Statement接口之执行DDL、DML、DQL

    |- Statement接口: 用于执行静态的sql语句 |- int executeUpdate(String sql)  : 执行静态的更新sql语句(DDL,DML) |- ResultSet ...

  2. jdbc java数据库连接 2)jdbc接口核心的API

    JDBC接口核心的API java.sql.*   和  javax.sql.*(java2.0以后更新的扩展) |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接 ...

  3. jdbc java数据库连接 4)PreParedStatement接口 之 区别和例子

    Statement 和 PreparedStatement 的区别: 1)语句不同 PreparedStatement需要预编译以及需要参数 2)由于PreparedStatement有缓存区,所以效 ...

  4. jdbc java数据库连接 8)防止sql注入

    回顾下之前jdbc的开发步骤: 1:建项目,引入数据库驱动包 2:加载驱动 Class.forName(..); 3:获取连接对象 4:创建执行sql语句的stmt对象;  写sql 5:执行sql ...

  5. jdbc java数据库连接 7)获取插入数据的自增长值

    我们创建一个sql表,里面的数据往往都会有自增长值. 那么,我们用jdbc插入数据的时候,要想同时获得这个增长值. 代码: /** * * 这是插入一条数据的同时,获取该数据的则增长列的值(该例子的自 ...

  6. Statement 接口的应用(存在sql语句的注入风险)

    实现简单的登录功能 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impo ...

  7. jdbc java数据库连接 5)CallableStatement 接口

    CallableStatement执行存储过程(也是预编译语言) 首先在sql中执行以下带有输入参数的代码: DELIMITER $ CREATE PROCEDURE pro_findById(IN ...

  8. jdbc:java数据库连接

    1.导jar包 四大参数: 1.加载驱动类:Class.forName("com.mysql.jdbc.Driver"); 2.url:jdbc:mysql://localhost ...

  9. jdbc java数据库连接 11)中大文本类型的处理

    1. Jdbc中大文本类型的处理 Oracle中大文本数据类型, Clob    长文本类型   (MySQL中不支持,使用的是text) Blob    二进制类型 MySQL数据库, Text   ...

随机推荐

  1. Setting my home here

    New here (For no chinese input on this machine, I have to use English.) Why do I choose here ? Whene ...

  2. Java中从键盘中任意输入字符串,将其转换成数字后,并求和

  3. 数据见50条常用sql

    问题及描述: --1.学生表 Student(Sid,Sname,Sage,Ssex) --Sid 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course ...

  4. B/S结构的流程简单概述

    在介绍appl ication 对象之前,先简单介绍一些Web 服务器的实现原理.         对于大部分浏览器而言,它通常负责完成三件事情: (1)向远程服务器发送请求. (2)读取远程服务器返 ...

  5. 使用PHPMailer发送邮件

    如果要使用php发送邮件,则可以使用PHP 内置的mail() 函数,但是mail()函数需要有服务器支持 必须有自己的邮件服务器,如果使用stmp服务来发送邮件的话相当于代替别人发送,而不是从自己服 ...

  6. .NET 数据类型转换 方法

    using Newtonsoft.Json;using Newtonsoft.Json.Converters;using System.Web.Script.Serialization; /// &l ...

  7. 开发环境(Atom + NotePad++)

    1.NodeJS Gulp:前端构建工具Grunt:前端构建工具Bower:客户端依赖管理工具Karma: 单元测试Protractor: 集成测试Git:版本控制ngScenario:情景测试(sc ...

  8. Eclipse开发环境设置(Maven+Spring MVC+Flex)

    1. 环境设置 1.1. Java环境设置 1)JAVA_HOME D:\GreenSoftware\Java\Java8X64\jdk1.8.0_91 2)PATH ;%JAVA_HOME%/bin ...

  9. 【代码笔记】iOS-可以向左(右)滑动

    一,效果图. 二,代码. RootViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional se ...

  10. 基于Ruby的watir-webdriver自动化测试方案与实施(一)

    基于Ruby的watir-webdriver自动化测试方案与实施(五)   基于Ruby的watir-webdriver自动化测试方案与实施(四)   基于Ruby的watir-webdriver自动 ...