1. 将数据库、驱动信息存储在配置文件

configure.properties

 url=jdbc:mysql://localhost:3306/数据库名?serverTimezone=GMT&useSSL=false
user=用户名,一般是root
password=数据库密码
driver=com.mysql.cj.jdbc.Driver

2. JDBC工具类

MyDBUtil.java

 import java.io.InputStream;
import java.sql.*;
import java.util.Properties; /**
* 手写实现JDBC工具类
* @author Nemo
* @version 1.0
* @date 2019/4/10
*/
public class MyDBUtil {
private static String url;
private static Properties proterties; // 注册驱动
static {
proterties = new Properties; InputStream configureStream = MyDBUtil.class.getClassLoader.getResourceAsStream("configure.proterties");
try {
properties.load(configureStream);
String driver = properties.getProperty("driver");
class.forName(driver); url = properties.getProperty("url");
} catch (Exception e) {
e.printStackTrace();
}
} // 获取连接
public static Connection getConnection() throw SQLException{
return DriverManager.getConnection(url, properties);
} // 释放资源
public static void release(Statement statement, Connection connection, ResultSet resultSet) {
closeQuietly(statement);
closeQuietly(connection);
closeQuietly(resultSet);
}
// 重载释放资源
public static void release(Statement statement, Connection connection) {
closeQuietly(statement);
closeQuietly(connection);
} private static void closeQuietly(AutoCloseable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

3. 以实现数据库事务为例,演示工具类的使用

TranctionTest.java

 import org.junit.Test;

 import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Savepoint;
import java.sql.Statement; /**
* 以数据库事务为例进行演示
* @author Nemo
* @version 1.0
* @date 2019/4/13
*/
public class TranctionTest {
@Test
public void traction() throws SQLException {
Connection conn = null;
Statement stm = null;
Savepoint savepoint = null;
try {
// 获取数据库连接
conn = MyDBUtil.getConnection(); // 关闭数据库自动commit功能
conn.setAutoCommit(false); // 建立sql语句
stm = conn.cteateStatement(); // zs给lisi转账100
String sql1 = "update user set money=money-100 where name='zs';";
String sql2 = "update user set money=money+100 where name='lisi';"; // wangwu给lisi转账100
String sql3 = "update user set money=money-100 where name='wangwu';";
String sql4 = "update user set money=money+100 where name='lisi';"; // 提交sql语句
stm.executeUpdate(sql1);
stm.executeUpdate(sql2); // 设置savepoint
savepoint = conn.setSavepoint(); int i = 1/0; stm.executeUpdate(sql3);
stm.executeUpdate(sql4); conn.commit();
} catch (Exception e) {
conn.rollback(savepoint);
conn.commit();
} finally {
MyDBUtil.release(statement, connection);
}
}
}

手写JDBC - 数据库、驱动信息存储在配置文件的更多相关文章

  1. MNIST手写数字数据库

    手写数字库很容易建立,但是总会很浪费时间.Google实验室的Corinna Cortes和纽约大学柯朗研究所的Yann LeCun建有一个手写数字数据库,训练库有60,000张手写数字图像,测试库有 ...

  2. SQL纯手写创建数据库到表内内容

    建表啥的只点点鼠标,太外行了,不如来看看我的纯手写,让表从无到有一系列:还有存储过程临时表,不间断的重排序: 一:建数据库 create Database Show on primary ( name ...

  3. 常用JDBC数据库驱动包和类名

    MySQL数据库: 1)驱动包:https://mvnrepository.com/artifact/mysql/mysql-connector-java(下载路径) 2)驱动类名:com.mysql ...

  4. 【机器学习】BP神经网络实现手写数字识别

    最近用python写了一个实现手写数字识别的BP神经网络,BP的推导到处都是,但是一动手才知道,会理论推导跟实现它是两回事.关于BP神经网络的实现网上有一些代码,可惜或多或少都有各种问题,在下手写了一 ...

  5. 利用神经网络算法的C#手写数字识别

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwritten_character_recognition.zip 下载源码 - 70. ...

  6. 深度学习之PyTorch实战(3)——实战手写数字识别

    上一节,我们已经学会了基于PyTorch深度学习框架高效,快捷的搭建一个神经网络,并对模型进行训练和对参数进行优化的方法,接下来让我们牛刀小试,基于PyTorch框架使用神经网络来解决一个关于手写数字 ...

  7. 用python实现的的手写数字识别器

    概述 带GUI界面的,基于python sklearn knn算法的手写数字识别器,可用于识别手写数字,训练数据集为mnist. 详细 代码下载:http://www.demodashi.com/de ...

  8. BP神经网络(手写数字识别)

    1实验环境 实验环境:CPU i7-3770@3.40GHz,内存8G,windows10 64位操作系统 实现语言:python 实验数据:Mnist数据集 程序使用的数据库是mnist手写数字数据 ...

  9. Caffe系列4——基于Caffe的MNIST数据集训练与测试(手把手教你使用Lenet识别手写字体)

    基于Caffe的MNIST数据集训练与测试 原创:转载请注明https://www.cnblogs.com/xiaoboge/p/10688926.html  摘要 在前面的博文中,我详细介绍了Caf ...

随机推荐

  1. es学习-java操作 2.4.0版本

    package esjava; import org.elasticsearch.action.bulk.*;import org.elasticsearch.action.delete.Delete ...

  2. 37 有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位.

    题目:有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位. public class _037NumberOff { public st ...

  3. 编写高质量代码改善C#程序的157个建议——建议79:使用ThreadPool或BackgroundWorker代替Thread

    建议79:使用ThreadPool或BackgroundWorker代替Thread 使用线程能极大地提升用户体验度,但是作为开发者应该注意到,线程的开销是很大的. 线程的空间开销来自: 1)线程内核 ...

  4. 编写高质量代码改善C#程序的157个建议——建议67:慎用自定义异常

    建议67:慎用自定义异常 除非有充分的理由,否则不要创建自定义异常.如果要对某类程序出错做特殊处理,那就自定义异常.需要自定义异常的理由如下: 1)方便测试.通过抛出一个自定义的异常类型实例,我们可以 ...

  5. 引用数据类型(类)和ArrayList

    引用数据类型(类) 类的类型为两种: 第一种,Java为我们提供好的类,如Scanner类,Scanner类等,这些已存在的类中包含了很多的方法与属性,可供我们使用. 第二种,我们自己创建的类,按照类 ...

  6. Alpha冲刺(九)

    Information: 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Details: 组员1(组长)柯奇豪 过去两天完成了哪些任务 进一步优化代码,结合自己负责的部分修 ...

  7. c# MSMQ 消息队列

    转  消息队列 http://www.cnblogs.com/anbylau2130/p/3469512.html

  8. ssm集合的配置

    web.xml <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quo ...

  9. robotframework+jenkins分布式执行自动化测试用例

    http://blog.sina.com.cn/s/blog_53f023270101sc3w.html http://www.cnblogs.com/2test/p/5336842.html

  10. c# webbrowser在xp下自动闪退的一个坑

    接前面的做了个扫码登录的,但是使用中发现在win7下没有题,但是在xp中使用时在加载那个二维码时会导致直接闪退,还无法捕捉到错误,折腾了一下午无果. 今天早上来看贴子有人说可能是webbrowser中 ...