自定义一个JdbcTemplate(增删改数据库中表记录)
2024-10-21 06:34:49
需求:
- 自定义一个JdbcTemplate模板,实现增删改数据库中表记录的功能
1 package demo03;
2
3 import utils.JDBC_DBCP_Utils;
4
5 import javax.sql.DataSource;
6 import java.sql.Connection;
7 import java.sql.ParameterMetaData;
8 import java.sql.PreparedStatement;
9 import java.sql.SQLException;
10
11 public class MyJDBCTemplate {
12 //1. 需要传入数据源
13 private DataSource dataSource;
14
15 //构造方法
16 public MyJDBCTemplate(DataSource dataSource) {
17 this.dataSource = dataSource;
18 }
19
20 /**
21 * 封装了JDBC操作数据库的步骤+元数据, 释放资源(使用者不需要关注释放资源了)
22 * 进行增,删,修改
23 *
24 * @param sql sql语句
25 * @param params 参数
26 * @return Ctrl+Alt+T
27 */
28 public int update(String sql, Object... params) {
29 Connection connection = null;
30 PreparedStatement preparedStatement = null;
31 try {
32 //0. 非空判断
33 if (dataSource == null) throw new RuntimeException("dataSource must not null...");
34
35 if (sql == null) throw new RuntimeException("sql must not null...");
36
37 //1. 从dataSource 获得连接对象
38 connection = dataSource.getConnection();
39 //2. 创建预编译的sql语句对象 insert into user values (?,?,?,?)
40 preparedStatement = connection.prepareStatement(sql);
41
42 //3. 获得参数的元数据对象
43 ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
44 //4. 获得参数的个数
45 int parameterCount = parameterMetaData.getParameterCount();
46
47 //5. 给每一个?赋值
48 for (int i = 0; i < parameterCount; i++) {
49 preparedStatement.setObject(i + 1, params[i]);
50 }
51
52 //6. 执行
53 int i = preparedStatement.executeUpdate();
54 return i;
55 } catch (SQLException e) {
56 e.printStackTrace();
57 } finally {
58 //释放资源
59 JDBC_DBCP_Utils.release(null, preparedStatement, connection);
60 }
61 return -1;
62 }
63 }
最新文章
- ORACLE表空间管理维护
- SQL Server 2012 The report server cannot open a connection to the report server database
- VECTOR COMPUTATION
- Atitit Server Side Include &#160;ssi服务端包含规范&#160;csi &#160;esi
- 针对CMS中的tag标签理解
- js为元素添加onclick事件
- C语言第四节数据类型、常量、变量
- ActivePython2.7 +Firefly1.2.2+WIN7服务器搭建过程(已通过)
- shell用if
- 谷歌地图实现车辆轨迹移动播放(google map api)
- 笔记:java并发编程实践1
- Kinect研究
- 关于Canvas Rect Transform 设置问题?
- 小K的H5之旅-实战篇(一)
- 使用 VSCode 编写 .NET Core 项目之初体验
- c/c++ 图的创建(二维数组法)
- 从浏览器中输入URL到页面加载的发生了什么-转载
- Spark+Hadoop+IDE环境搭建
- linux下字典生成工具-crunch与rtgen
- rabbitmq High Availability