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. myeclipse如何将项目打包成war包

    打包步骤如下: 详细介绍请查看全文:https://cnblogs.com/qianzf/ 原文博客的链接地址:https://cnblogs.com/qzf/

  2. Inno Setup创建快捷方式跟快速运行栏快捷方式

    [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescrip ...

  3. #2002 无法登录 MySQL 服务器

    phpMyAdmin无法登录,输入用户名和密码后点击“执行”后一直报 “#2002 无法登录 MySQL 服务器”. 解决办法,将 “phpMyAdmin/libraries”文件夹下的config. ...

  4. Hadoop压缩之MapReduce中使用压缩

    1.压缩和输入分片 Hadoop中文件是以块的形式存储在各个DataNode节点中,假如有一个文件A要做为输入数据,给MapReduce处理,系统要做的,首先从NameNode中找到文件A存储在哪些D ...

  5. 老司机带你玩Spring.Net -入门篇

    网上有 Spring.Net 的相关的很多介绍的文章还有实践例子,推荐个还不错的博客 Spring.Net 学习笔记 .以前对 Spring.Net 算是有过一面之缘,但却迟迟未真正相识.在网上有太多 ...

  6. 单例模式、双检测锁定DCL、volatile(转)

    单例模式最要关心的则是对象创建的次数以及何时被创建. Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图).但是如果在“对象创建的次数以及何时被创 建”这两点 ...

  7. Android Logging

    Here is HauteLook’s logger class from our Android Code Library. It displays class name, method name ...

  8. ASP.NET MVC 控制器通过继承控制器来达到 过滤 并且多了一个IAuthenticationFilter

    暂时没有用到过这个IAuthenticationFilter接口,毕竟已经有三个具体实现类了,所以这个还不知道用在哪,以后看看 20190324 需要注意!!!控制器重写方法都是被protected修 ...

  9. C#应用程序所有已经打开的窗体的集合

    获取所有打开的窗体的集合 Application.OpenForms 获取其中的某个窗体 Application.OpenForms["窗体名"]

  10. 如何轻松学习C语言编程!

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...