java mysql 工具类_Java SE 之 数据库操作工具类(DBUtil)设计
JDBC创建数据库基本连接
//1.加载驱动程序
Class.forName(driveName);
//2.获得数据库连接
Connection connection = DriverManager.getConnection(dbResource,username,password);
//
String sql = "";
//3.获得SQL处理语句
Statement statement = connection.createStatement();
PreparedStatement preparedStatement = connection.prepareStatement(sql); //更为安全
//4.获得SQL执行结果intint
boolean result1 = statement.execute(sql); //执行
int result2 = statement.executeUpdate(sql); //执行更新
ResultSet resultSet = statement.executeQuery(sql);//查询
DBUtil设计
关键问题
+ 通过JDBC实现对数据库记录的增、删、查、改。
+ 如何高效利用好数据库与服务器之间实现通信的有限的数据库连接资源?
答案:JDBC+数据库连接池。
备注:
1.每创建一Connection类对象,就是占用一条连接资源。
2.更佳的设计,可参考开源工具C3P0数据库连接池解决方案。
ComboPooledDataSource pool = new ComboPooledDataSource(“demo”);
//pool.setUser("johnny");// (重新)设置用户姓名
//pool.setPassword("123456");// 用户密码
//pool.setJdbcUrl("databaseUrl");// MySQL数据库连接url
//pool.setDriverClass("com.mysql.jdbc.Driver");
//若是空参,自动到classpath目录下面加载“c3p0-config.xml”配置文件,若是maven项目,则放置于/resources目录下---配置文件的存储位置和名称必须是这样,且使用“默认配置”
Connection con = pool.getConnection();
//连接关闭之后,内存会被释放,下次取时会重新开(内存地址不共用)
另,推荐Apache开源工具Commons DBUtils:对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
+ 如何设计架构良好(可扩展性好、高内聚低耦合、代码重用度高等)DAO(Database Access Object)层?
答案:【IBaseDao + BaseDaoImpl】 + IBusinessDao + BusinessDaoImpl
设计方案
通过此工具,操纵JDBC基础层的连接和配置。
依赖工具:Eclipse + mysql-connector-java-5.1.7-bin.jar + junit-4.12.jar[可选项]
//dbutil.properties
user:root
password:123456
driver:com.mysql.jdbc.Driver
url:jdbc:mysql://127.0.0.1:3306/CorporationPropertyMS
//BDUtil.java
package com.cpms.test.junit;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* 数据库操作工具类【通过配置文件dbutil.properties配置】
*
* @author johnny zen
* @since 2017-11-3 19:43
*
* @param user
* @param password
* @param driver
* @param url
*/
public class DBUtil{
private static String packagePath = "src.com.cpms.test.junit";//default current package's path
private static Connection connection = null;
private static Statement statement = null;
private static Properties properties = null;
private static String _propertiesFilePath = "dbutil.properties";//default properties file's path
static{
// get current file's work path(notice:absolute path)
String url = System.getProperty("user.dir") + "\\" + packagePath.replace(".", "\\") + "\\" + _propertiesFilePath;
//open property file
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(url);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("[ DBUtil:ERROR ] "+ packagePath +" > open file failed!");
e.printStackTrace();
}
properties = new Properties();
try {
properties.load(fileInputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("[ DBUtil:ERROR ] " + packagePath + " > load properties failed!");
e.printStackTrace();
}
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("[DBUtil:ERROR ] " + packagePath + " > close file failed!");
e.printStackTrace();
}
System.out.println("[DBUtil:SUCCESS ] " + packagePath + " > load properties success!");
}
//init properties
private static void initProperties(){
String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("passsword");
if((driver == null)||(url == null)||(user == null)||(password == null)){
System.out.println("[DBUtil:ERROR ] " + packagePath + " > arguments[url/user/password/driver]'s value is not complete.");
}
}
//(lazy) load connection
private static void loadConnection(){
//load Connection
try{
Class.forName(properties.getProperty("driver"));
}catch(ClassNotFoundException e){
System.out.println("[DBUtil:ERROR ] " + packagePath + " > load jdbc driver faild.");
e.printStackTrace();
}
//connection database
try {
connection = DriverManager.getConnection(properties.getProperty("url"), properties);
} catch (SQLException e) {
System.out.println("[DBUtil:ERROR ] " + packagePath + " > [loadConnection] connection database faild.");
e.printStackTrace();
}
System.out.println("[DBUtil:SUCCESS ] " + packagePath + " > [loadConnection] connection database success!");
}
//get connection
public static Connection getConnection(){
if(connection == null){
loadConnection();
}
return connection;
}
//reset properties file path
public static void setPropertiesFilePath(String propertiesFilePath){
_propertiesFilePath = propertiesFilePath;
}
//get dbutil's proprties
public static Properties getProperties(){
return properties;
}
}
测试:
@Test
public void DBUtilTest() {
Connection connection = DBUtil.getConnection();
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
int index = 0;//resultSet's index
String sql = "select * from employee";
//init prepareStatement
try {
preparedStatement = connection.prepareStatement(sql);
} catch (SQLException e) {
System.out.println("[Test:execute error]: load prepareStatement failed!");
e.printStackTrace();
}
//execute SQL:get resultSet
try {
resultSet = preparedStatement.executeQuery();
} catch (SQLException e) {
System.out.println("[Test:execute error]: execute sql failed!");
e.printStackTrace();
}
try {
while(resultSet.next()){
//notice: resultSet.getObject(var):default: from 1 to n
System.out.println("[Test] " + index + ":" + resultSet.getObject(index + 1).toString());
index++;
}
System.out.println("[Test] row total is " + resultSet.getRow() + ".");
} catch (SQLException e) {
System.out.println("[Test:execute error]: iterate resultset failed!");
e.printStackTrace();
}
}
输出:
[DBUtil:SUCCESS ] src.com.cpms.test.junit > load properties success!
[DBUtil:SUCCESS ] src.com.cpms.test.junit > [loadConnection] connection database success!
[Test] 0:employeeabcdefghijklmnopqrstvuwa
[Test] 1:department005abcdefghijklmnopqrs
[Test] 2:201611389
[Test] 3:毕雨兰
[Test] 4:123456
[Test] 5:M
[Test] 6:19
[Test] 7:501928199205291867
[Test] 8:2012-08-10 08:23:59.0
[Test] 9:1
[Test] row total is 0.
推荐文献
java mysql 工具类_Java SE 之 数据库操作工具类(DBUtil)设计相关推荐
- java mysql 回滚_Java 中对数据库操作时的 回滚
Connection conn=null; conn.rollback()就可以回滚 //用jdbc连接数据库 //举例子,比如你在写一个级联删除的方法的时候,为了保证数据完整性,删除的时候一定要确定 ...
- Java写一个excel工具类_Java中Excel写操作工具类--Java免费学习网
核心提示:package com.common.excel;import com.common.excel.exception.WriteExcelException;import jxl.Workb ...
- Mysql和Oracle 数据库操作工具类
适配Mysql和Oracle数据源 文章目录 1. 适配Mysql和Oracle数据源 2. 适配于Mysql数据源 3. 适配Oeacle数据源 1. 适配Mysql和Oracle数据源 packa ...
- java mysql教程基于_java基于jdbc连接mysql数据库功能实例详解
本文实例讲述了java基于jdbc连接mysql数据库的方法.分享给大家供大家参考,具体如下: 一.JDBC简介 Java 数据库连接,(Java Database Connectivity,简称JD ...
- java mysql工具_Java开源数据库管理工具
SQuirreL SQL Client SQuirreL SQL Client 是一个用 Java 编写的程序,它允许您查看数据库的内容.发出 SQL 命令,以及如您将看到的,执行许多其他功能.构建该 ...
- java mysql自动备份_java定时备份数据之二_MySQL
以mysql为例: BackupDb.java数据库备份类: public class BackupDb { public static boolean sqlDump(String cmd,Stri ...
- java mysql 插入 乱码_java向mysql插入数据乱码问题的解决方法
遇到java向mysql插入数据乱码问题,如何解决? MySQL默认编码是latin1 mysql> show variables like 'character%'; +----------- ...
- java虚拟机预先加载哪些类_Java虚拟机JVM学习02 类的加载概述
Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...
- java封装对象实体类_Java 接口自动化系列--实体类之entity封装
实体包entity下面有4个类,主要存放java对象,每个类必须有私有属性,空参构造,get set方法 具体excel中数据信息见---工具类excel文章 1.API类 解析excel中接口信息的 ...
最新文章
- 展望数据中心市场未来十年发展趋势
- Dubbo 注解驱动(Annotation-Driven)
- C# WebProxy POST 或者 GET
- 2019-02-28-算法-进化(盛最多水的容器)
- c语言主函数名用户指定,C语言允许main函数带形参,且形参个数和形参名均可由用户指定。()...
- 软工网络15团队作业8——Beta阶段项目总结
- 2021-09-02最大矩形
- moviepy音视频开发:音频拼接函数concatenate_audioclips介绍
- UBUNTU完美运行TM,RTX,MSOffice,迅雷
- 【LwM2M】LwM2M协议官方文档
- webgl天空盒边界缝隙_基于webGL技术的3D库ThingJS支持天空盒技术实现
- 2022-03-11 工作记录--PHP-eq(表示等于)、 neq(表示不等于)
- python基本写法_Python的表达式写法
- 关于打麻将的高大上语言艺术
- 2D降噪3D降噪(NR:Noise Reduce)
- 所有科技人员是懂计算机的,指出违反什么规律.PDF
- 基于java springboot android安卓点餐外卖系统源码(毕设)
- 测试工程师常见面试题
- PowerBi - TopN+帕累托
- 小米手机NFC复制门禁卡读取芯片信息失败,报错103解决办法。