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

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

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

  

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

 1             if (stsm != null) {
 2                 try {
 3                     stsm.close();
 4                 } catch (SQLException e) {
 5                     // TODO Auto-generated catch block
 6                     e.printStackTrace();
 7                     throw new RuntimeException(e);
 8                 }
 9             }
10             if (conn != null) {
11                 try {
12                     conn.close();
13                 } catch (SQLException e) {
14                     // TODO Auto-generated catch block
15                     e.printStackTrace();
16                     throw new RuntimeException(e);
17                 }

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

  jdbcutil

    

 1 /**
 2  * 这是jdbc执行DDL和DML的工具类
 3  *
 4  * @author LZl
 5  *
 6  */
 7 public class Jdbcutil {
 8
 9     // 创建数据库的基本信息
10     // 创建url
11     private static String url = "jdbc:mysql://localhost:3306/day1029?useUnicode=true&characterEncoding = GB2312 ";
12     // 数据库的用户名和密码
13     private static String user = "root";
14     private static String password = "root";
15     public static Connection conn = null;
16     static Statement stsm = null;
17
18     /**
19      * 一:注册的驱动程序 获取连接对象的方法 静态代码块(好处是只需要加载一次,且随着类的加载而加载)
20      */
21
22     static {
23         try {
24             Class.forName("com.mysql.jdbc.Driver");
25         } catch (Exception e) {
26             e.printStackTrace();
27             System.out.println("获取数据库连接对象出错");
28         }
29     }
30
31     /**
32      * 二:获取连接对象 该方法返回一个连接
33      */
34
35     public static Connection getConnection() {
36
37         // 创建连接对象
38         try {
39             conn = DriverManager.getConnection(url, user, password);
40         } catch (SQLException e) {
41             // TODO Auto-generated catch block
42             e.printStackTrace();
43             throw new RuntimeException(e);
44         }
45         return conn;
46
47     }
48
49     /**
50      * 三:释放资源,断开连接 参数列表:conn。stsm
51      */
52
53     public static void close(Connection conn, Statement stsm) {
54
55         if (stsm != null) {
56             try {
57                 stsm.close();
58             } catch (SQLException e) {
59                 // TODO Auto-generated catch block
60                 e.printStackTrace();
61                 throw new RuntimeException(e);
62             }
63         }
64
65         if (conn != null) {
66             try {
67                 conn.close();
68             } catch (SQLException e) {
69                 // TODO Auto-generated catch block
70                 e.printStackTrace();
71                 throw new RuntimeException(e);
72             }
73         }
74     }
75   
76 }

   工具类再重载一个带有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的方法要这样:

 1 public class UtilTest {
 2
 3     private static Connection conn = null;
 4     // 创建Statement对象
 5     private static Statement stsm;
 6
 7     // 执行DDL语句(创建)
 8     private static void DDL() {
 9
10         try {
11             // 使用jdbc工具类来获取连接对象
12             conn = Jdbcutil.getConnection();
13
14             // 准备sql语句
15             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)";
16
17             stsm = conn.createStatement();
18
19             // 发送sql语句
20             int result = stsm.executeUpdate(sql);
21         } catch (Exception e) {
22             e.printStackTrace();
23             throw new RuntimeException(e);
24         } finally {
25             // 调用工具类的方法,关闭连接
26             Jdbcutil.close(conn, stsm);
27         }
28     }
29     public static void main(String[] args) {
30         DDL();
31     }
32 }

 

  

  2)执行DML语句:

 1     //创建驱动注册对象
 2     private static Connection conn = null;
 3     // 创建Statement对象
 4     private static Statement stsm = null;
 5
 6 // 执行DML语句(插入)
 7     private static void DML() {
 8
 9         try {
10             // 使用工具类获取连接对象
11             conn = Jdbcutil.getConnection();
12
13             // 准备sql语句
14             String sql = "INSERT INTO person (NAME,sex,age) VALUES ('张三','男',20);";
15
16             // 创建statement对象
17             stsm = conn.createStatement();
18
19             // 执行sql语句
20             int result = stsm.executeUpdate(sql);
21             System.out.println("影响了" + result + "行");
22
23         } catch (Exception e) {
24             e.printStackTrace();
25             throw new RuntimeException(e);
26         } finally {
27             // 调用工具类关闭连接
28             Jdbcutil.close(conn, stsm);
29         }
30     }

  3)执行DQL语句:

 1     // 创建驱动注册对象
 2     private static Connection conn = null;
 3     // 创建Statement对象
 4     private static Statement stsm = null;
 5
 6         // 执行DQL语句
 7     private static void DQL() {
 8
 9         try {
10
11             // 调用工具类连接对象
12             conn = Jdbcutil.getConnection();
13
14             // 创建statement对象
15             stsm = conn.createStatement();
16
17             // 准备sql语句
18             String sql = "SELECT * FROM person;";
19
20             // 执行sql语句,返回的是RrsultSet对象
21             ResultSet rs = stsm.executeQuery(sql);
22
23             // 查看第二行数据
24
25             // 移动光标
26             rs.next();
27             rs.next();
28             // 使用列名来查看
29             int id = rs.getInt("id");
30             String name = rs.getString("name");
31             String sex = rs.getString("sex");
32             System.out.println(id + "," + name + "," + sex);
33
34         } catch (Exception e) {
35             e.printStackTrace();
36             throw new RuntimeException(e);
37         } finally {
38             // 调用工具类关闭连接,这里要多关闭一个连接:ResultSet,工具类的关闭方法要添加它
39             Jdbcutil.close(conn, stsm,rs);
40         }
41
42     }

  

转载于:https://www.cnblogs.com/LZL-student/p/6012715.html

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

  1. day04 JDBC java数据库连接

    day04 JDBC java数据库连接 yuxiaohu已关注 2017.12.03 16:12:19字数 139阅读 85 1 导包 mysql 提供的实现java接口的包路径 C:\Progra ...

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

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

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

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

  4. Java Statement一次执行多条sql语句

    网上的代码基本上没有问题,不过会存在一点瑕疵没有说清楚,导致试验了很久才成功,现在总结需要如下: 1.我们看了statement的execute文档,是可以进行多个语句执行的,文档内容如下: 2.除了 ...

  5. JDBC——Java数据库连接

    JDBC 一.概念 二.连接 1.得到 Connection 对象 ①.DataSource 的方式 ②. DriverManager 的方式 2.得到语句对象 3.带结果的 SQL 语句:selec ...

  6. JAVA try...catch...finally中的执行顺序和return语句

    public static int get() { try { System.out.println("try"); return 1; //throw new Exception ...

  7. javaweb——java数据库连接

    文章目录 一.什么是JDBC 1.1JDBC常用的API 二.实现第一个JDBC程序 1..搭建数据库环境 2.编写JDBC程序 4.PreparedStatement 对象 5.ResultSet对 ...

  8. JDBC(Java Data Base Connectivity)基本用法

    一.什么是JDBC JDBC(Java Database Connection)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成.是java程序与数据库系统通信的标准APl ...

  9. 执行DDL语句(创建表)

    操作 JDBC 的步骤 : 加载注册驱动 获取连接对象 创建语句对象 执行SQL语句 释放资源 创建表和异常处理 案例 : 创建学生信息表(t_student) .包含 id/name/age 三个列 ...

最新文章

  1. 如何优雅的转换 Bean 对象!
  2. wp trackback.php,WordPress工作原理
  3. Oracle数据库对象----视图
  4. 矩形脉冲信号的频域分析_矩形周期脉冲信号MATLAB实现
  5. (原創) 如何在Ubuntu設定P7010的1280 x 768解析度? (OS) (Linux) (Ubuntu) (NB) (P7010)
  6. 51CTO各位博友大家好!
  7. jax-rs jax-ws_信守承诺:针对JAX-RS API的基于合同的测试
  8. 日志log4cxx 封装、实例讲解、配置文件log4cxx.properties
  9. 实现Fragment在ViewPager中滑动
  10. .net Remoting与Web Service的比较
  11. DEDECMS首页调用单页文档内容并带过滤HTML的方法
  12. NYOJ - 整数划分(四)
  13. php强制浏览器不缓存,php强制浏览器不缓存和设置浏览器缓存
  14. 分享一下免费的ppt网站(好看,免费)
  15. 高效记忆/形象记忆(14)110数字编码表 81-90
  16. VHDL半整数与奇数分频器设计实验
  17. 基于openflow的SDN技术
  18. uq mysql_MySQL workbench中的PK,NN,UQ,BIN,UN,ZF,AI说明
  19. 计算机在教育中的应用的基本现状,现代教育技术应用的现状与发展
  20. Android Mms短信的发送流程,短信发送源码解析

热门文章

  1. C4.5中对于离散和连续特征的判定
  2. linux下面拷贝pdf却没法在windows下面打开
  3. 使用python根据端口号关闭进程
  4. 数学狂想曲(八)——核弹当量问题, Lanchester战争模型, 随机过程
  5. 【机器学习】集成学习知识点总结一
  6. 存储过程 SQL server(01)
  7. MySQL中的UNIX_TIMESTAMP函数使用总结
  8. SQL优化之列裁剪和投影消除
  9. Windows中添加自己的程序到开机启动中(添加服务,添加注册表)
  10. Python的交互式界面 编写 .