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实现表数据的增删改 & 封装数据库链接和关闭操作的更多相关文章

  1. Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查

    本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...

  2. 《MySQL必知必会》[03] 表数据的增删改

    1.增:插入数据 INSERT关键字可以插入新的行到数据库表中: 插入完整的行 插入行的一部分 插入多行 插入某些查询的结果 基本的INSERT语句是: INSERT INTO R(A1, A2, . ...

  3. MySQL表数据的增删改查

    1.增 INSERT INTO tb VALUES(v1,v2,v3...); INSERT INTO tb (field1,field2...) VALUES(v1,v2...); INSERT I ...

  4. python 全栈开发,Day62(外键的变种(三种关系),数据的增删改,单表查询,多表查询)

    一.外键的变种(三种关系) 本节重点: 如何找出两张表之间的关系 表的三种关系 一.介绍 因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 二.重点理解如果找出 ...

  5. Oracle.数据的增删改、表操作(创建,修改,删除)、数据类型

    SELECT ename,dname FROM emp,dept WHERE emp.deptno=dept.deptno; SELECT dname,loc FROM dept; SELECT JO ...

  6. mysq表的三种关系,数据的增删改以及单表多表查询

    一丶三种关系 分析步骤: #.先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id) #.再站在右表的角度去找 ...

  7. MVC模式:实现数据库中数据的增删改查功能

    *.数据库连接池c3p0,连接mysql数据库: *.Jquery使用,删除时跳出框,确定是否要删除: *.使用EL和JSTL,简化在jsp页面中插入的java语言 1.连接数据库 (1)导入连接数据 ...

  8. linq的创建 和 数据的增删改查

    1.linq创建之前,一定要在sql做好数据表的主外键关系. 2.linq文件是以.dbml结尾,一般一个数据库的名字就是一个linq的名字 3,以实例来演示增删改查 数据库的名字为linq,里面有两 ...

  9. Mybatis框架基于注解的方式,实对数据现增删改查

    编写Mybatis代码,与spring不一样,不需要导入插件,只需导入架包即可: 在lib下 导入mybatis架包:mybatis-3.1.1.jarmysql驱动架包:mysql-connecto ...

随机推荐

  1. three.js中的矩阵变换(模型视图投影变换)

    目录 1. 概述 2. 基本变换 2.1. 矩阵运算 2.2. 模型变换矩阵 2.2.1. 平移矩阵 2.2.2. 旋转矩阵 2.2.2.1. 绕X轴旋转矩阵 2.2.2.2. 绕Y轴旋转矩阵 2.2 ...

  2. C. Anton and Fairy Tale(数学推式子)

    \(数学题,式子并不难推,但边界是真的烦\) \(\color{Red}{Ⅰ.其实可以发现,当m>=n时,每次都可以粮食补到n,所以一定是在第n天消耗完毕}\) \(\color{Purple} ...

  3. IDOC日志查询报表

    当不知道IDOC同步的具体时间,而WE02数据量过大时: 当某条IDOC记录中数据量过大,找不到具体某条数据时: 可采用自开发程序查找,具体代码如下: REPORT ZIDOC_LOG. *----- ...

  4. jquery注册页面的判断及代码的优化

    今天主要负责完成注册页面的jquery代码的写入与优化,基本代码和登录页面差不多,复制修改一下代码就行了,主要区别在于多了一个重复密码与密码是否一致的判断,刚开始写出来的代码导致每个框的后面都追加重复 ...

  5. QTreeWidget更新后保存节点的展开状态

    class Xx : public QWidget { Q_OBJECT struct ItemState{ ItemState(); int _id; bool _isExpend; }; publ ...

  6. HMM-前向后向算法与实现

    目录 基本要素 HMM三大问题 概率计算问题 前向算法 后向算法 前向-后向算法 基本要素 状态 \(N\)个 状态序列 \(S = s_1,s_2,...\) 观测序列 \(O=O_1,O_2,.. ...

  7. Java 将鼠标改为图片的两种方法

    一 图片跟着鼠标移动,鼠标隐藏 int x,y; addMouseMotionListener(this);//设置鼠标监听 public void paint(Graphics g) {  g.dr ...

  8. webpack3 项目升级 webpack4

    由于 vue-cli 2 构建的项目是基于 webpack3,所以只能自己动手改动,至于升级 webpack4之后提升的编译速度以及各种插件自己去体验. 修改配置 1.替换插件 extract-tex ...

  9. linux-Curl error (37): Couldn't read a file:// file for file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64 [Couldn't open file /e tc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64]

    在安装Python3-pip 的时候遇到 [root@localhost rpm-gpg]# yum install python3-pipFedora 31 - x86_64 - Updates - ...

  10. python--集合和文件基本操作

    集合 # 集合天生就能去重,集合也是无序的  集合也是{ }  但是空集合定义特殊s=set()  #空集合s2 = set('1234445566778')print(s2) s3 = {'1',' ...