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 ...
随机推荐
- jmeter4.0,启动jmeter.bat闪退问题
问题描述: 电脑重装win10系统,配置好了java环境后,解压jmeter的zip包,然后按照网上的教程配置环境变量,然后兴冲冲启动jmeter.bat,结果,闪退,甚至连个报错信息都没有... 然 ...
- Flutter 粘合剂CustomScrollView控件
老孟导读:快乐的51假期结束了,切换为努力模式,今天给大家分享CustomScrollView组件,此组件在以后的项目中会经常用到,CustomScrollView就像一个粘合剂,将多个组件粘合在一起 ...
- 学习vue第五节,vue中使用class和style的css样式
vue中使用class样式 数组 <h1 :class="['red', 'thin']">这是一个H1</h1> 数组中使用三元表达式 <h1 :c ...
- SpringCloudGateWay学习 之 从函数式编程到lambda
文章目录 前言: 函数式编程: 什么是函数式编程: 函数式编程的特点 lambda表达式: 核心: 函数接口: 方法引用: 类型推断: 变量引用: 级联表达式跟柯里化: 前言: 这一系列的文章主要是为 ...
- 【Spark】RDD的依赖关系和缓存相关知识点
文章目录 RDD的依赖关系 宽依赖 窄依赖 血统 RDD缓存 概述 缓存方式 RDD的依赖关系 RDD和它依赖的父RDD的关系有两种不同的类型,即窄依赖(narrow dependency) 和宽依赖 ...
- STM32 基于 CubeMX配置GPIO点亮LED灯(超级详细+图文并茂)
我是一个只会点灯的菜鸟: 相关文章 [STM32系列汇总]小白博主的STM32实战快速进阶之路(持续更新) 文章目录 相关文章 1 前言 2 理论分析 2.1 LED 原理 2.2 板载资料 2.3 ...
- 通过10个实例小练习,快速熟练 Vue3.0 核心新特性
Vue3.0 发 beta 版都有一段时间了,正式版也不远了,所以真的要学习一下 Vue3.0 的语法了. GitHub 博客地址: https://github.com/biaochenxuying ...
- 白话马尔科夫链蒙特卡罗方法(MCMC)
前言 你清茶园不是人待的地方! 里面的个个都是人才,说话又好听--就是我太菜了啥也听不懂,这次期中还考的贼**烂,太让人郁闷了. 最近课上讲这个马尔科夫链蒙特卡罗方法,我也学得一塌糊涂.这时我猛然想起 ...
- 基于ELK搭建MySQL日志平台的要点和常见错误
第一部分 概括 ELK是集分布式数据存储.可视化查询和日志解析于一体的日志分析平台.ELK=elasticsearch+Logstash+kibana,三者各司其职,相互配合,共同完成日志的数据处理工 ...
- Spring Boot Admin实现服务健康预警
Over View 上一篇文章主要介绍了Spring Boot Admin的概况以及我们如何在系统中引入和使用Spring Boot Admin,以此来帮助我们更加了解自己的系统,做到能快速发现.排查 ...