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 ...
随机推荐
- JAVA使用JDBC技术操作SqlServer数据库执行存储过程
Java使用JDBC技术操作SqlServer数据库执行存储过程: 1.新建SQLSERVER数据库:java_conn_test 2.新建表:tb_User 3.分别新建三个存储过程: 1>带 ...
- POJ 2115 C Looooops扩展欧几里得
题意不难理解,看了后就能得出下列式子: (A+C*x-B)mod(2^k)=0 即(C*x)mod(2^k)=(B-A)mod(2^k) 利用模线性方程(线性同余方程)即可求解 模板直达车 #incl ...
- JMeter专题系列(六)集合点
JMeter也有像LR中的集合点: JMeter里面的集合点是通过添加定时器来完成. 注意:集合点的位置一定要在Sample之前. 集合点:虽然我们的“性能测试”理解为“多用户并发测试”,但客观上来说 ...
- entityframework学习笔记--003-使用model first
首先,我个人觉得这(model first 即模型优先)是一个鸡肋似的功能.当赞扬着他的强大的功能的同时,你也会觉得这个功能好像是不是不怎么需要,也很少使用. 1.右键你的项目,选择"添加& ...
- Linux(Centos)之安装Java JDK及注意事项
1.准备工作 a.因为Java JDK区分32位和64位系统,所以在安装之前必须先要判断以下我们的Centos系统为多少位系统,命令如下: uname -a 解释:如果有x86_64就是64位的,没有 ...
- JAVAScript柯里化、部分应用参数终极理解
一.柯里化 在定义柯里化.部分应用参数的概念前,首先必须对闭包有深入的了解和定义,闭包一句话说清楚:函数返回值为函数. 柯里化的定义:将多参函数分解为按步骤接受单个参数的函数,如下代码: var mo ...
- PHP预定义变量
* PHP预定义 * 预定义变量 * $_GET - 接收客户端以请求类型为GET方法发送的数据内容 * $_POST - 接收客户端以请求类型为POST方法发送的数据内容 * $_REQUEST - ...
- iOS多线程简介
1.进程 什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开迅雷.Xcode,系统就会分别启动2个进程 2.线程 什么是 ...
- dede:field name='imgurls'不能二次使用的解决办法
{dede:field name='imgurls' alt='图片输出区'}图片链接 [field:linkurl/]图片地址 [field:imgsrc/]{/dede:field} 这个标签不 ...
- android:使用RemoteView自定义Notification
//网上相关内容较少,遂记录下来,备忘. //依然以音乐播放器demo为例. 效果截图 //锤子手机上的效果 step1 准备自定义layout 常规的实现方式,并不会因为是用于notificatio ...