手写JDBC - 数据库、驱动信息存储在配置文件
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 - 数据库、驱动信息存储在配置文件的更多相关文章
- MNIST手写数字数据库
手写数字库很容易建立,但是总会很浪费时间.Google实验室的Corinna Cortes和纽约大学柯朗研究所的Yann LeCun建有一个手写数字数据库,训练库有60,000张手写数字图像,测试库有 ...
- SQL纯手写创建数据库到表内内容
建表啥的只点点鼠标,太外行了,不如来看看我的纯手写,让表从无到有一系列:还有存储过程临时表,不间断的重排序: 一:建数据库 create Database Show on primary ( name ...
- 常用JDBC数据库驱动包和类名
MySQL数据库: 1)驱动包:https://mvnrepository.com/artifact/mysql/mysql-connector-java(下载路径) 2)驱动类名:com.mysql ...
- 【机器学习】BP神经网络实现手写数字识别
最近用python写了一个实现手写数字识别的BP神经网络,BP的推导到处都是,但是一动手才知道,会理论推导跟实现它是两回事.关于BP神经网络的实现网上有一些代码,可惜或多或少都有各种问题,在下手写了一 ...
- 利用神经网络算法的C#手写数字识别
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwritten_character_recognition.zip 下载源码 - 70. ...
- 深度学习之PyTorch实战(3)——实战手写数字识别
上一节,我们已经学会了基于PyTorch深度学习框架高效,快捷的搭建一个神经网络,并对模型进行训练和对参数进行优化的方法,接下来让我们牛刀小试,基于PyTorch框架使用神经网络来解决一个关于手写数字 ...
- 用python实现的的手写数字识别器
概述 带GUI界面的,基于python sklearn knn算法的手写数字识别器,可用于识别手写数字,训练数据集为mnist. 详细 代码下载:http://www.demodashi.com/de ...
- BP神经网络(手写数字识别)
1实验环境 实验环境:CPU i7-3770@3.40GHz,内存8G,windows10 64位操作系统 实现语言:python 实验数据:Mnist数据集 程序使用的数据库是mnist手写数字数据 ...
- Caffe系列4——基于Caffe的MNIST数据集训练与测试(手把手教你使用Lenet识别手写字体)
基于Caffe的MNIST数据集训练与测试 原创:转载请注明https://www.cnblogs.com/xiaoboge/p/10688926.html 摘要 在前面的博文中,我详细介绍了Caf ...
随机推荐
- myeclipse如何将项目打包成war包
打包步骤如下: 详细介绍请查看全文:https://cnblogs.com/qianzf/ 原文博客的链接地址:https://cnblogs.com/qzf/
- Inno Setup创建快捷方式跟快速运行栏快捷方式
[Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescrip ...
- #2002 无法登录 MySQL 服务器
phpMyAdmin无法登录,输入用户名和密码后点击“执行”后一直报 “#2002 无法登录 MySQL 服务器”. 解决办法,将 “phpMyAdmin/libraries”文件夹下的config. ...
- Hadoop压缩之MapReduce中使用压缩
1.压缩和输入分片 Hadoop中文件是以块的形式存储在各个DataNode节点中,假如有一个文件A要做为输入数据,给MapReduce处理,系统要做的,首先从NameNode中找到文件A存储在哪些D ...
- 老司机带你玩Spring.Net -入门篇
网上有 Spring.Net 的相关的很多介绍的文章还有实践例子,推荐个还不错的博客 Spring.Net 学习笔记 .以前对 Spring.Net 算是有过一面之缘,但却迟迟未真正相识.在网上有太多 ...
- 单例模式、双检测锁定DCL、volatile(转)
单例模式最要关心的则是对象创建的次数以及何时被创建. Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图).但是如果在“对象创建的次数以及何时被创 建”这两点 ...
- Android Logging
Here is HauteLook’s logger class from our Android Code Library. It displays class name, method name ...
- ASP.NET MVC 控制器通过继承控制器来达到 过滤 并且多了一个IAuthenticationFilter
暂时没有用到过这个IAuthenticationFilter接口,毕竟已经有三个具体实现类了,所以这个还不知道用在哪,以后看看 20190324 需要注意!!!控制器重写方法都是被protected修 ...
- C#应用程序所有已经打开的窗体的集合
获取所有打开的窗体的集合 Application.OpenForms 获取其中的某个窗体 Application.OpenForms["窗体名"]
- 如何轻松学习C语言编程!
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...