JDBCTools 第一个版本
JDBCToolV1:
package com.dgd.test; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties; public class JDBCToolsV1 { public static DataSource ds;
//静态代码块,创建数据库连接池
static {
try {
Properties p=new Properties();
p.load(JDBCToolsV1.class.getClassLoader().getResourceAsStream("druid.properties"));
ds= DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
e.printStackTrace();
}
} public static Connection getConnection(){
//方式1: DriverManger.getConnection();
//方式2: 数据库连接池, ds.getConnection();
try {
return ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
} public static void free( Connection conn){
try {
if(conn!=null)
{
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} //增删改,不能处理事务
public static int update1(String sql, Object...args) throws SQLException {
//获取连接
Connection conn= getConnection();
//创建PreparedStatement对象
PreparedStatement ps= conn.prepareStatement(sql);
//设置 ?
if(args!=null&& args.length>0)
{
for (int i = 0; i <args.length ; i++) {
ps.setObject(i+1,args[i]); }
}
//执行sql
int len=ps.executeUpdate();
//关闭
ps.close();
free(conn); return len;
}
//处理事务的公共部分
public static int update2(Connection conn, String sql, Object... args) throws SQLException {
PreparedStatement ps=conn.prepareStatement(sql);
if(args!=null && args.length>0)
{
for (int i = 0; i <args.length ; i++) {
ps.setObject(i+1,args[i]);
}
}
int len=ps.executeUpdate();
ps.close();
return len;
} }
Test:
package com.dgd.test; import org.junit.Test; import java.sql.Connection;
import java.sql.SQLException; public class TestJDBCToolV1 {
@Test
public void test1(){
try {
String sql="INSERT INTO COURSE VALUES(NULL,?)";
int len=JDBCToolsV1.update1(sql,"天文");
System.out.println(len>0?"成功":"失败");
} catch (SQLException e) {
e.printStackTrace();
}
} @Test //处理事务,不能使用update1,因为update1中每次都是获取一个数据库连接对象,不能保证事务的ACID
public void test() throws SQLException {
String sql1="INSERT INTO COURSE VALUES(NULL,?)";
String sql2="INSERT INTO COURSE VALUES(NULL,?)";
Connection conn= JDBCToolsV1.getConnection();
conn.setAutoCommit(false); try {
int len1=JDBCToolsV1.update2(conn,sql1,"美术");
int len2=JDBCToolsV1.update2(conn,sql2,"体育");
if(len1>0 && len2>0)
{
conn.commit();
}
else
{
conn.rollback();
}
} catch (SQLException e) {
conn.rollback();
}
conn.setAutoCommit(true);
JDBCToolsV1.free(conn); } }


JDBCTools 第一个版本的更多相关文章
- CINATRA发布第一个版本
cinatra是什么? cinatra是C++开源社区–purecpp发起的一个开源项目,现在正式发布第一个版本cinatra0.9.0,cinatra是一个现代C++写的web framework, ...
- 第一个版本库 Repository
Git安装 Windows系统 Git 为 Windows 系统提供了简易的 .exe 安装包, 直接下载并安装就可以了(点这里->):https://git-scm.com/download/ ...
- CDNDrive 第一个版本发布 & 布客新知第二次备份完成
CDNDrive 第一个版本发布,新适配五个图床 https://github.com/apachecn/CDNDrive 另外,布客新知第二次备份完成 TutorialsPoint:http://i ...
- 总结一下我的dmp第一个版本 也是最后一个版本
刚刚接手了一个新项目-DMP,目前已经开发联调完成,等待测试上线,所以现在来总结一下. 本来是一个前辈在负责,四月底离职了,他离职前我花了一周把这个项目交接了过来,大致熟悉了项目的业务流程以及代码 ...
- 吃午饭前,按书上的代码写会儿--Hunt the Wumpus第一个版本
有空就要慢慢练起~~~~脑袋动起来是很快乐的事儿....:) <易学PYTHON>演练一遍. from random import choice cave_numbers = range( ...
- MVAPI第一个版本架构图
MVAPI采用矢量与栅格结合的方式进行移动地图的显示. 进过几个月,目前终于可以完成基本的地图显示及操作功能.还有待实现的是各种性能及效果优化.3D地物等. 发一个1.0的架构图留存一下.(虽然目前还 ...
- 轻量级ORM《sqlcommon》第一个版本发布了!!!
一.sqlcommon的特色 1. 轻量级,整个包只有123kb. 2. 性能好,自测... 3. API和功能简单.代码简短.可维护性好基本都能看懂.这个点我认为很重要,你不用为了实现一个需求而四处 ...
- lms框架即将发布第一个版本了
lms微服务框架介绍 LMS框架旨在帮助开发者在.net平台下,通过简单的配置和代码即可快速的使用微服务进行开发. LMS通过.net框架的主机托管应用,内部通过dotnetty/SpanNetty实 ...
- Nova PhoneGap框架 第一章 前言
Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...
随机推荐
- git-github远程仓库以及git的进阶使用
注意保存自己的笔记吧,看来这个typora还是有点bug,居然还被我碰到了,今天突然死机,重启电脑后,看我自动保存的里面居然没有后来连上网了又有了,这就不说了嘛,但是命名文件有几kb的大小,为什么我一 ...
- IDEA2021.2安装lombok插件(借鉴前辈)
lomhok下载地址: https://plugins.jetbrains.com/plugin/6317-lombok/versions CSDN关注斧头湖懒客 一,下载lombok插件我这里下载的 ...
- leetcode704二分查找
title: 二分查找 题目描述 题目链接:二分查找 解题思路 二分模板默写 int search(vector<int>& nums, int target) { int lef ...
- 技术管理进阶——技术Leader如何拒绝业务方?
原创不易,求分享.求一键三连 前段时间,有个粉丝在群里问了一个问题: 今天对接一个业务团队,要我帮他导数据,这种工作又臭又烦又没成长,而且边界模糊谁做都可以,我很想拒绝他,但又怕引起对方不满,大家有什 ...
- Kubernetes API 基础
APIServer 在kubernetes架构概念层面上,Kubernetes由一些具有不同角色的服务节点组成.而master的控制平面由 Apiserver Controller-manager 和 ...
- Blazor和Vue对比学习(基础1.7):传递UI片断,slot和RenderFragment
组件开发模式,带来了复用.灵活.性能等优势,但也增加了组件之间数据传递的繁杂.不像传统的页面开发模式,一个ViewModel搞定整个页面数据. 组件之间的数据传递,是学习组件开发,必须要攻克的难关.这 ...
- 11┃音视频直播系统之 WebRTC 进行文本聊天并实时传输文件
一.RTCDataChannel WebRTC 不但可以让你进行音视频通话,而且还可以用它传输普通的二进制数据,比如说可以利用它实现文本聊天.文件的传输等 WebRTC 的数据通道(RTCDataCh ...
- 个人冲刺(五)——体温上报app(一阶段)
任务:完成了体温录入.体温记录删除.体温修改以及历史记录查询操作 体温录入 public void insertDB(View view) { MyDBHelper mydbh=new MyDBHel ...
- GoF的23种设计模式的功能
GoF的23种设计模式的功能 前面说明了 GoF 的 23 种设计模式的分类,现在对各个模式的功能进行介绍. 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取 ...
- 001 手把手用Git,Git从入门到上传本地项目到Github,看这篇就够了
安装git 下载Git 下载好后,一路next即可 安装好后,打开Git bash,进行配置 首先配置自己的身份 git config --global user.name "Name&qu ...