jdbc java数据库连接 3)Statement接口之执行DDL和DML语句的简化
上一章的代码中,可以发现,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语句的简化的更多相关文章
- jdbc java数据库连接 3)Statement接口之执行DDL、DML、DQL
|- Statement接口: 用于执行静态的sql语句 |- int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML) |- ResultSet ...
- jdbc java数据库连接 2)jdbc接口核心的API
JDBC接口核心的API java.sql.* 和 javax.sql.*(java2.0以后更新的扩展) |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接 ...
- jdbc java数据库连接 4)PreParedStatement接口 之 区别和例子
Statement 和 PreparedStatement 的区别: 1)语句不同 PreparedStatement需要预编译以及需要参数 2)由于PreparedStatement有缓存区,所以效 ...
- jdbc java数据库连接 8)防止sql注入
回顾下之前jdbc的开发步骤: 1:建项目,引入数据库驱动包 2:加载驱动 Class.forName(..); 3:获取连接对象 4:创建执行sql语句的stmt对象; 写sql 5:执行sql ...
- jdbc java数据库连接 7)获取插入数据的自增长值
我们创建一个sql表,里面的数据往往都会有自增长值. 那么,我们用jdbc插入数据的时候,要想同时获得这个增长值. 代码: /** * * 这是插入一条数据的同时,获取该数据的则增长列的值(该例子的自 ...
- Statement 接口的应用(存在sql语句的注入风险)
实现简单的登录功能 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impo ...
- jdbc java数据库连接 5)CallableStatement 接口
CallableStatement执行存储过程(也是预编译语言) 首先在sql中执行以下带有输入参数的代码: DELIMITER $ CREATE PROCEDURE pro_findById(IN ...
- jdbc:java数据库连接
1.导jar包 四大参数: 1.加载驱动类:Class.forName("com.mysql.jdbc.Driver"); 2.url:jdbc:mysql://localhost ...
- jdbc java数据库连接 11)中大文本类型的处理
1. Jdbc中大文本类型的处理 Oracle中大文本数据类型, Clob 长文本类型 (MySQL中不支持,使用的是text) Blob 二进制类型 MySQL数据库, Text ...
随机推荐
- PHP json字符串,格式化缩进显示
PHP json字符串,格式化显示 /** * 格式化 */ class JsonFormatHelper { /** * json字符串缩进显示 * @param unknown $json * @ ...
- 零基础如何学习java更有效呢?
零基础学java,不知道该如何入手?也不知道学习的方向,很多人会问零基础怎么样学习,有没有什么入门的书籍推荐:只要方法正确,零基础学好java也是有机会的哦. 一.理解Java思想 Java是一门面向 ...
- java中的String
String作为java最常用的类,被广大程序员们蹂躏已久,让我们又爱又恨,应该如何正确的使用它呢,老姜带你一起来揭开它神秘的面纱. 一.String类定义时被冠上了final的标识符,决定了它终生不 ...
- C++11之std::function和std::bind
std::function是可调用对象的包装器,它最重要的功能是实现延时调用: #include "stdafx.h" #include<iostream>// std ...
- ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行
ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行 核心框架 ASP.NET Core APP 创建与运行 总结 之前两篇文章简析.NET Core 以及与 .NET Framew ...
- 安全生产应急救援指挥系统之GIS一张图-flex/java
开发语言是flex.java,开发平台是myeclise.eclise,后台数据库是oracel或sqlserver,开发接口是arcgis api for flex,提供以下的功能: 1.地图框选搜 ...
- iOS开发需要哪些图片?
1.产品设计图 可以以6的长宽比 750*1134来设计.这些图片用于描述app是什么样子的,这是app开发人员的开发参考. 2.产品切图 将设计师将设计稿切成可以用来开发的图 颜色值 iOS颜色值取 ...
- HTML5快速入门(三)—— 标签综合运用
前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...
- Android自定义控件7--自定义开关--绘制界面内容
本文实现全自定义控件--自定义开关 本文地址:http://www.cnblogs.com/wuyudong/p/5922316.html,转载请注明源地址. 自定义开关 (View),本文完成下面内 ...
- 数据结构->冒泡排序
数据结构->冒泡排序 实现效果 从小到大排序 算法原理 重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到不再需要交换,也就是说该数列 ...