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 ...
随机推荐
- luogg_java学习_07_抽象类_接口_多态学习总结
这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 抽象 一种专门用来做父类,被继承的. (模板) 格式: abs ...
- ASP.NET Redis 开发
文件并发(日志处理)--队列--Redis+Log4Net Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高 ...
- 软件公司为何要放弃MongoDB?
本文转至:http://database.51cto.com/art/201503/469510_all.htm(只作转载, 不代表本站和博主同意文中观点或证实文中信息) Olery成立于2010年, ...
- SpringMVC Mybatis Shiro RestTemplate的实现客户端无状态验证及访问控制【转】
A.首先需要搭建SpringMVC+Shiro环境 a1.pom.xml配置 spring: <dependency> <groupId>org.springframework ...
- 基于 Angularjs&Node.js 云编辑器架构设计及开发实践
基于 Angularjs&Node.js 云编辑器架构设计及开发实践 一.产品背景 二.总体架构 1. 前端架构 a.前端层次 b.核心基础模块设计 c.业务模块设计 2. Node.js端设 ...
- 怎么在MVC中使用自定义Membership
首先我们来看看微软自带的membership: 我们打开系统下aspnet_regsql.exe 地址一般位于: C:\WINDOWS\Microsoft.NET\Framework\v2.0.507 ...
- js自建方法库(持续更新)
1.得到一个数,在一个有序数组中应该排在的位置序号: function orderInArr(num,arr) { if(num > arr[0]){ return 1 + arguments. ...
- Objective-C 排序
在Objective-C中,排序分为: 1.Foundation框架中的对象排序 2.自定义对象排序 例子:每个学生都有一个成绩score属性,根据成绩score对学生排序 自定义对象 Student ...
- 渗透测试-奇技淫巧(一)--源IP地址隐藏
切记,切记.本文只作为技术交流,提醒各位注意网络安全,请勿用于其它用途,否则后果自付. 在很多时候,某某不希望不愿意有人溯源他的地址.他们是如何隐藏IP的? 今天来浅析下,如何隐藏源地址. 用到的工具 ...
- SharePoint 2007 User Re-created in AD with new SID issue on MySite
When active directory users get deleted and re-created, even with the same user id, there's a nasty ...