PreparedStatement实现表数据的增删改 & 封装数据库链接和关闭操作
PreparedStatement实现表数据的增删改
PreparedStatementUpdateTest
package com.aff.PreparedStatement; import java.io.InputStream;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.text.SimpleDateFormat;
import java.util.Properties; import org.junit.Test; import com.aff.utils.JDBCUtils; //使用PreparedStatementUpdateTest,实现数据表的增删改查操作 //增 删 改 不需要返回的 void
//查询 需要返回的
public class PreparedStatementUpdateTest {
//测试通用的增删改方法
@Test
public void testCommonUpdate() throws Exception{
// String sql= "delete from customers where id = ?";
// update(sql, 4); String sql ="update `order` set order_name=? where order_id =?";
update(sql, "文静",2);
} // 通用的增删改操作
public void update(String sql, Object... args) {//sql中占位符的个数与可变形参的长度一致
// 1.获取数据库连接
Connection conn = null;
// 2.预编译sql语句,返回PreparedStatement实例
PreparedStatement ps = null;
try {
conn = JDBCUtils.getConnection();
ps = conn.prepareStatement(sql);
// 3.填充占位符
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1, args[i]);//小心参数声明错误
}
// 4.执行
ps.execute();
System.out.println("执行成功");
} catch (Exception e) {
e.printStackTrace();
}finally {
// 5.资源的关闭
JDBCUtils.closeResource(conn, ps);
}
} // 修改customer表的一条记录
@Test
public void testUpdate() {
// 1.获取数据库连接
Connection conn = null;
PreparedStatement ps = null;
try {
conn = JDBCUtils.getConnection();
// 2.预编译sql语句,返回PreparedStatement实例
String sql = "update customers set name = ?where id =?";
ps = conn.prepareStatement(sql);
// 3.填充占位符
ps.setString(1, "何苗");// 可以使用setObject 如:ps.setObject(1, "何苗");
ps.setInt(2, 18);
// 4.执行
ps.execute();
System.out.println("修改成功");
} catch (Exception e) {
e.printStackTrace();
}finally {
// 5.资源的关闭
JDBCUtils.closeResource(conn, ps);
}
} // 向customer表添加一条记录
@Test
public void testInsert() {
// 3.获取连接
Connection conn = null;
// 为占位符
PreparedStatement ps = null;
try { // 1.读取配置文件中的4个基本信息,通过类加载器
// InputStream is =
// TestConnection.class.getClassLoader().getResourceAsStream("jdbc.properties");
InputStream is =ClassLoader.getSystemClassLoader()
.getResourceAsStream("jdbc.properties");
Properties pro = new Properties();
// 加载is这个文件
pro.load(is);
// 读取其中的配置信息
String user = pro.getProperty("user");
String url = pro.getProperty("url");
String password = pro.getProperty("password");
String driverClass = pro.getProperty("driverClass");
// 2.加载驱动
Class.forName(driverClass);
conn = DriverManager.getConnection(url, user, password);
System.out.println(conn); // 4.预编译sql语句,返回preparedStatement的实例
String sql = "insert into customers(name,email,birth)values(?,?,?)";// ?
ps = conn.prepareStatement(sql); // 5.填充占位符
ps.setString(1, "芳芳");
ps.setString(2, "2662123933@qq.com");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date = sdf.parse("1996-3-4");
ps.setDate(3, new Date(date.getTime())); // 6.执行操作
ps.execute();
System.out.println("插入成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
// 7.资源的关闭
try {
if (conn != null)
ps.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (conn != null)
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
封装数据库链接和关闭操作
JDBCUtils
package com.aff.util; import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties; //操作数据库的工具类,一般都是静态方法 //获取数据库连接
public class JDBCUtils {
// 返回Connection
public static Connection getConnection() throws Exception {
// 1.读取配置文件中的4个基本信息,通过类加载器
InputStream is = ClassLoader.getSystemClassLoader()
.getResourceAsStream("jdbc.properties");
Properties pro = new Properties();
// 加载is这个文件
pro.load(is);
// 读取其中的配置信息
String user = pro.getProperty("user");
String url = pro.getProperty("url");
String password = pro.getProperty("password");
String driverClass = pro.getProperty("driverClass"); // 2.加载驱动
Class.forName(driverClass); // 3.获取连接
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} // 关闭数据库的连接和PreparedStatement的操作
// PreparedStatement是statement的子接口,所以下面的参数也可以写Statement
public static void closeResource(Connection conn, PreparedStatement ps) {
// 7.资源的关闭
try {
if (ps != null)
ps.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (conn != null)
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
} public static void closeResource(Connection conn, PreparedStatement ps, ResultSet rs) {
// 7.资源的关闭
try {
if (ps != null)
ps.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (conn != null)
conn.close();
} catch (Exception e) {
e.printStackTrace();
} try {
if (rs != null)
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
PreparedStatement实现表数据的增删改 & 封装数据库链接和关闭操作的更多相关文章
- Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查
本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...
- 《MySQL必知必会》[03] 表数据的增删改
1.增:插入数据 INSERT关键字可以插入新的行到数据库表中: 插入完整的行 插入行的一部分 插入多行 插入某些查询的结果 基本的INSERT语句是: INSERT INTO R(A1, A2, . ...
- MySQL表数据的增删改查
1.增 INSERT INTO tb VALUES(v1,v2,v3...); INSERT INTO tb (field1,field2...) VALUES(v1,v2...); INSERT I ...
- python 全栈开发,Day62(外键的变种(三种关系),数据的增删改,单表查询,多表查询)
一.外键的变种(三种关系) 本节重点: 如何找出两张表之间的关系 表的三种关系 一.介绍 因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 二.重点理解如果找出 ...
- Oracle.数据的增删改、表操作(创建,修改,删除)、数据类型
SELECT ename,dname FROM emp,dept WHERE emp.deptno=dept.deptno; SELECT dname,loc FROM dept; SELECT JO ...
- mysq表的三种关系,数据的增删改以及单表多表查询
一丶三种关系 分析步骤: #.先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id) #.再站在右表的角度去找 ...
- MVC模式:实现数据库中数据的增删改查功能
*.数据库连接池c3p0,连接mysql数据库: *.Jquery使用,删除时跳出框,确定是否要删除: *.使用EL和JSTL,简化在jsp页面中插入的java语言 1.连接数据库 (1)导入连接数据 ...
- linq的创建 和 数据的增删改查
1.linq创建之前,一定要在sql做好数据表的主外键关系. 2.linq文件是以.dbml结尾,一般一个数据库的名字就是一个linq的名字 3,以实例来演示增删改查 数据库的名字为linq,里面有两 ...
- Mybatis框架基于注解的方式,实对数据现增删改查
编写Mybatis代码,与spring不一样,不需要导入插件,只需导入架包即可: 在lib下 导入mybatis架包:mybatis-3.1.1.jarmysql驱动架包:mysql-connecto ...
随机推荐
- matlab数值数据和变量名
1.2MATLAB数值数据 l 数值数据类型的分类 l 数值数据的输出格式 l 常用数学函数内部函数 1.数值数据类型的分类 l 整型 l 浮点型 l 复数型 (1)整型 1.数值数据类型 ...
- OpenWrt R2020.3.19 反追踪 抗污染 加速 PSW 无缝集成 UnPnP NAS
固件说明 基于Lede OpenWrt R2020.3.19版本Lienol Feed及若干自行维护的软件包 结合家庭x86软路由场景需要定制 按照家庭应用场景对固件及软件进行测试,通过后发布 设计目 ...
- hdu5381 The sum of gcd]莫队算法
题意:http://acm.hdu.edu.cn/showproblem.php?pid=5381 思路:这个题属于没有修改的区间查询问题,可以用莫队算法来做.首先预处理出每个点以它为起点向左和向右连 ...
- 配置类为什么要添加@Configuration注解呢?
配置类为什么要添加@Configuration注解呢? 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 推荐阅读: Spring官网阅读 | 总结篇 Spring ...
- python解析excel中图片+提取图片
解析表格是常用的技术.但是有些表各里面有图片怎么办?我想获得表格里面的图片,值得注意的是,图片没有位置信息,所以最好给图片进行编号,编号代表位置. 下面附上提取表格里面图片的代码.只要输出表格地址,和 ...
- Flash 被禁止运行的方法
下面以谷歌浏览器 和 火狐浏览器 来说明. █ 自2020 年以来, 谷歌浏览器(Chome)已全面禁止Flash的运行,我们可以通过如下方法开启: █ 火狐(FireFox) 也禁止,但需要点“运行 ...
- python--遇到SyntaxError: Non-UTF-8 code starting with '\xb8' in file
在运行python中因为添加了中文注释,遇到SyntaxError: Non-UTF-8 code starting with '\xb8' in file 经过百度,说是Python的默认编码格式是 ...
- python --集合set的学习
集合是一个无序的不重复的元素序列,一般我们使用set(value)函数来创建集合. 如下: 定义以及添加元素,以及注意点如下: 再如下:
- chmod的用法
指令名称 : chmod 使用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 说明 : Linux/Unix 的档案 ...
- net core中Vue.component单独一个文件不运行,不报错的处理
Vue.component代码段原先是放到view下的cshtml中的,可以正常运行,后来为了方便代码管理,将这块代码块单独放到一个js文件中,结果点击按钮等等都没有任何反应了,同时js控制台也不报错 ...