jdbc 可处理数据库事物的通用增删查改函数
首先弄清四种隔离级别的和三种数据并发 之间的关系
通用查询函数
- //使用PreparedStatement实现对不同表的通用的返回一个对象的查询操作
- //使用泛型机制,参数里先传入一个类的类型
- public static <T> T getInstance(Connection con,Class<T> clazz,String sql,Object...args) {
- PreparedStatement ps = null;
- ResultSet res = null;
- try {
- ps=con.prepareStatement(sql);
- for(int i=0;i<args.length;i++) {
- ps.setObject(i+1, args[i]);
- }
- //获得数据集和元数据集
- res = ps.executeQuery();
- ResultSetMetaData rsmd = res.getMetaData();
- int col = rsmd.getColumnCount();
- if(res.next()) {
- T t = clazz.newInstance();
- for(int i=0;i<col;i++) {
- Object value = res.getObject(i+1); //要获得的数据值
- String colLabel = rsmd.getColumnLabel(i+1); //要获得的元数据名称
- //通过反射给t对象指定的colName属性赋值为value
- Field field = clazz.getDeclaredField(colLabel);
- field.setAccessible(true);
- field.set(t,value);
- }
- System.out.println("执行成功");
- return t;
- }
- }
- catch(Exception ex) {
- ex.printStackTrace();
- }
- finally {
- JDBCUtils.closeResource(null, ps, res);
- }
- return null;
- }
- //返回对不同表的通用的返回多个对象的查询操作 --考虑上事物的版本
- public static <T> ArrayList<T> getForList(Connection con,Class<T> clazz,String sql,Object...args){
- PreparedStatement ps = null;
- ResultSet res = null;
- try {
- con=JDBCUtils.getConnection();
- ps=con.prepareStatement(sql);
- for(int i=0;i<args.length;i++) {
- ps.setObject(i+1, args[i]);
- }
- //获得数据集和元数据集
- res = ps.executeQuery();
- ResultSetMetaData rsmd = res.getMetaData();
- int col = rsmd.getColumnCount();
- ArrayList<T> list = new ArrayList<T>();
- while(res.next()) {
- T t = clazz.newInstance();
- for(int i=0;i<col;i++) {
- Object value = res.getObject(i+1); //要获得的数据值
- String colLabel = rsmd.getColumnLabel(i+1); //要获得的元数据名称
- //通过反射给t对象指定的colName属性赋值为value
- Field field = clazz.getDeclaredField(colLabel);
- field.setAccessible(true);
- field.set(t,value);
- }
- list.add(t);
- }
- System.out.println("执行成功");
- return list;
- }
- catch(Exception ex) {
- ex.printStackTrace();
- }
- finally {
- JDBCUtils.closeResource(null, ps, res);
- }
- return null;
- }
通用修改函数
- //通用增删改,参数为预编译的sql,和可变形参args用来充当占位符 --可处理事物版本
- public static int update(Connection con,String sql,Object ...args) {
- PreparedStatement ps=null;
- try {
- //1.获取连接
- con=JDBCUtils.getConnection();
- //2.预编译sql,返回ps实例
- ps=con.prepareStatement(sql);
- //填充占位符,sql中的占位符个数=args数组长度
- for(int i=0;i<args.length;i++) {
- ps.setObject(i+1, args[i]);
- }
- //4.执行, excute()方法如果执行查询操作,则此方法返回true,如果执行增删改,则返回false
- //ps.execute();
- return ps.executeUpdate();
- }
- catch (Exception ex) {
- ex.printStackTrace();
- }
- finally {
- //5.关闭资源
- JDBCUtils.closeResource(null, ps);
- }
- return 0;
- }
关于聚合函数的查询
- //用来处理聚合函数等只返回一个值的sql语句
- public <E>E getValue(Connection con,String sql,Object...args){
- PreparedStatement ps = null;
- ResultSet res = null;
- try {
- ps = con.prepareStatement(sql);
- for(int i=;i<args.length;i++) {
- ps.setObject(i+, args[i]);
- }
- res = ps.executeQuery();
- if(res.next())
- return (E)res.getObject();
- }
- catch(Exception ex) {
- ex.printStackTrace();
- }
- finally {
- JDBCUtils.closeResource(null, ps, res);
- }
- return null;
- }
jdbc 可处理数据库事物的通用增删查改函数的更多相关文章
- Java连接MySQL数据库及简单的增删查改操作
主要摘自 https://www.cnblogs.com/town123/p/8336244.html https://www.runoob.com/java/java-mysql-connect.h ...
- Hibernate 的事物简单的增删查改
Hibernate 是一个优秀的ORM框架体现在: 1. 面向对象设计的软件内部运行过程可以理解成就是在不断创建各种新对象.建立对象之间的关系,调用对象的方法来改变各个对象的状态和对象消亡的过程,不管 ...
- Yii2使用数据库操作汇总(增删查改、事务)
查询 //1.简单查询 $admin=Admin::model()->findAll($condition,$params); $admin=Admin::model()->findAll ...
- Django实现数据库中表格的增删查改
1.urls.py """Django_demo1 URL Configuration The `urlpatterns` list routes URLs to vie ...
- JDBC+Servlet+jsp(增删查改)
先在mysql新增数据库和表先,把下面的几句代码复制去到mysql运行就可以创建成功了! 创建数据库 create database jdbc01 character set utf8 collat ...
- [课本]JDBC课程6--使用JDBC的DAO模块化--完成数据库的增删查改_工具类JDBCTools四个(Preparedstatement)功能模块的敲定版
(课本P273-任务九) /**DAO: Data Access Object * 为什么用: 实现功能的模块化,更有利于代码的维护和升级 * 是什么: 访问数据信息的类,包含对数据的CRUD(cre ...
- jdbc的实例应用:增删查改实现
//在jdbc中进行增删查改 //查看所有 public static void findAll() { String url = "jdbc:mysql://localhost:3306/ ...
- 2015.8.2 jdbc实现商品类的增删查改
在惠普济宁基地进行了两周sql和java的学习,学到很多东西 刚才实现了用jdbc访问数据库对数据库进行操作,是用eclipse写的,过几天移植到NetBeans上,个人还是比较习惯看图形化界面 前几 ...
- java实现简单的数据库的增删查改,并布局交互界面
一.系统简介 1.1.简介 本系统提供了学生信息管理中常见的基本功能,主要包括管理员.管理员的主要功能有对学生信息进行增加.删除.修改.查找等操作,对信息进行管理,对信息进行修改.查找等操作 ...
随机推荐
- paper 152: face pose synthesis
先阅读一下几位大神总结的关于姿态合成方面的博客. Head Pose Estimation Using AAM and POSIT http://blog.csdn.net/lliming2006/a ...
- (转)ping: www.baidu.com: Name or service not known centos7 -bash: ifconfig: command not found
[root@mysqlcentos01 ~]# ping www.baidu.com ping: www.baidu.com: Name or service not known [root@mysq ...
- (转)docker-compose安装
转:https://blog.csdn.net/pushiqiang/article/details/78682323 https://blog.csdn.net/ericnany/article/d ...
- Union比or快 Using UNION is faster when it comes to cases like scan two different column。
problem: 595. Big Countries A country is big if it has an area of bigger than 3 million square km or ...
- 111、TensorFlow 初始化变量
# 显式的初始化时非常有用的 # 因为它可以让你不用重复进行繁重的初始化工作 # 当你重新从checkpoint文件中加载一个模型的时候 # 当随机初始化变量被配置在分布式的配置文件中 # 为了在开始 ...
- MongoDB拥有SSD秒杀高富帅使用过程分享
[IT168现场报道]2013年4月18-20日,第四届中国数据库技术大会(DTCC 2013)在北京福朋喜来登酒店拉开序幕.在为期三天的会议中,大会将围绕大数据应用.数据架构.数据管理(数据治理). ...
- 启动线程,start和run的区别
每个线程都有要执行的任务.线程的任务处理逻辑可以在Tread类的run实例方法中直接实现或通过该方法进行调用,因此 run()相当于线程的任务处理逻辑的入口方法,它由Java虚拟机在运行相应线程时直接 ...
- Appium初始化设置:手写代码连接手机、appium-desktop连接手机
一.包名获取的三种方式 1)找开发要2)mac使用命令:adb logcat | grep START win使用命令:adb logcat | findstr START 或者可以尝试使用第3条命令 ...
- (转)微信调用扫码和支付功能是都报错 the permission value is offline verifying
原文地址:https://blog.csdn.net/qq_34794885/article/details/98504970
- CentOS 7虚拟机下设置固定IP详解
说明 1.笔记本主机IP为设置自动获取,不管什么情况下,不受虚拟机影响,只要连接外网就可以正常上网: 2.只要笔记本主机可以正常访问外网,启动虚拟机中的CentOS 7系统就可以正常访问外网,无需再进 ...