JDBC深度封装的工具类 (具有高度可重用性)
首先介绍一下Dbutils:
Dbutils是操作数据库的组件,对传统操作数据库的类进行二次封装,可以把结果集转化成List。
补充一下,传统操作数据库的类指的是JDBC(java database
connection:java数据库连接,java的数据库操作的基础API。)。
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。有兴趣的话可以到官网下载:http://commons.apache.org/dbutils/
下面的工具包正是符合了Common Dbutils 的思想
package com.util;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class JdbcUtils
{
// 表示定义数据库的用户名
private
final String USERNAME = "root";
//
定义数据库的密码
private
final String PASSWORD = "admin";
//
定义数据库的驱动信息
private
final String DRIVER = "com.mysql.jdbc.Driver";
//
定义访问数据库的地址
private
final String URL = "jdbc:mysql://localhost:3306/mydb";
//
定义数据库的链接
private
Connection connection;
//
定义sql语句的执行对象
private
PreparedStatement pstmt;
//
定义查询返回的结果集合
private
ResultSet resultSet;
public JdbcUtils()
{
try
{
Class.forName(DRIVER);
System.out.println("注册驱动成功!!");
}
catch (Exception e)
{
// TODO: handle exception
}
}
// 定义获得数据库的链接
public
Connection getConnection()
{
try
{
connection = DriverManager.getConnection(URL,
USERNAME, PASSWORD);
System.out.println("数据库连接成功");
}
catch (Exception e)
{
// TODO: handle exception
}
return connection;
}
public
boolean updateByPreparedStatement(String sql,
Listparams)
throws SQLException
{
boolean flag = false;
int result = -1;//
表示当用户执行添加删除和修改的时候所影响数据库的行数
pstmt = connection.prepareStatement(sql);
int index = 1;
// 填充sql语句中的占位符
if (params != null
&& !params.isEmpty())
{
for (int i = 0; i < params.size();
i++)
{
pstmt.setObject(index++, params.get(i));
}
}
result = pstmt.executeUpdate();
flag = result > 0 ? true :
false;
return flag;
}
public Map
findSimpleResult(String sql, Listparams)
throws SQLException
{
Map map = new HashMap();
int index = 1;
pstmt = connection.prepareStatement(sql);
if (params != null
&& !params.isEmpty())
{
for (int i = 0; i < params.size();
i++)
{
pstmt.setObject(index++, params.get(i));
}
}
resultSet = pstmt.executeQuery();// 返回查询结果
// 获取此 ResultSet 对象的列的编号、类型和属性。
ResultSetMetaData metaData =
resultSet.getMetaData();
int col_len = metaData.getColumnCount();//
获取列的长度
while (resultSet.next())// 获得列的名称
{
for (int i = 0; i < col_len;
i++)
{
String cols_name = metaData.getColumnName(i +
1);
Object cols_value =
resultSet.getObject(cols_name);
if (cols_value == null)// 列的值没有时,设置列值为“”
{
cols_value = "";
}
map.put(cols_name, cols_value);
}
}
return map;
}
public
List> findMoreResult(String
sql,
Listparams) throws SQLException
{
List> list = new
ArrayList>();
int index = 1;
pstmt = connection.prepareStatement(sql);
if (params != null
&& !params.isEmpty())
{
for (int i = 0; i < params.size();
i++)
{
pstmt.setObject(index++, params.get(i));
}
}
resultSet = pstmt.executeQuery();
ResultSetMetaData metaData =
resultSet.getMetaData();
int cols_len = metaData.getColumnCount();
while (resultSet.next())
{
Map map = new HashMap();
for (int i = 0; i < cols_len;
i++)
{
String cols_name = metaData.getColumnName(i +
1);
Object cols_value =
resultSet.getObject(cols_name);
if (cols_value == null)
{
cols_value = "";
}
map.put(cols_name, cols_value);
}
list.add(map);
}
return list;
}
public T
findSimpleRefResult(String sql, Listparams,
Class cls) throws Exception
{
T resultObject = null;
int index = 1;
pstmt = connection.prepareStatement(sql);
if (params != null
&& !params.isEmpty())
{
for (int i = 0; i < params.size();
i++)
{
pstmt.setObject(index++, params.get(i));
}
}
resultSet = pstmt.executeQuery();
ResultSetMetaData metaData =
resultSet.getMetaData();
int cols_len = metaData.getColumnCount();
while (resultSet.next())
{
// 通过反射机制创建实例
resultObject = cls.newInstance();
for (int i = 0; i < cols_len;
i++)
{
String cols_name =
metaData.getColumnName(i + 1);
Object cols_value =
resultSet.getObject(cols_name);
if (cols_value == null)
{
cols_value = "";
}
// 返回一个 Field 对象,该对象反映此 Class
对象所表示的类或接口的指定已声明字段。
Field
field = cls.getDeclaredField(cols_name);
field.setAccessible(true);//
打开javabean的访问private权限
field.set(resultObject, cols_value);//
为resultObject对象的field的属性赋值
} //上面的两行红题字就是要求实体类中的属性名一定要和数据库中
的字段名一定要严//格相同(包括大小写),而oracle数据库中一般都是大写的,如何让oracle区分大小写,请看博///文:http:
//blog.sina.com.cn/s/blog_7ffb8dd501013xkq.html
}
return resultObject;
}
public List
findMoreRefResult(String sql, Listparams,
Class cls) throws Exception
{
List list = new ArrayList();
int index = 1;
pstmt = connection.prepareStatement(sql);
if (params != null
&& !params.isEmpty())
{
for (int i = 0; i < params.size();
i++)
{
pstmt.setObject(index++, params.get(i));
}
}
resultSet = pstmt.executeQuery();
ResultSetMetaData metaData =
resultSet.getMetaData();
int cols_len = metaData.getColumnCount();
while (resultSet.next())
{
T resultObject = cls.newInstance();
for (int i = 0; i < cols_len;
i++)
{
String cols_name = metaData.getColumnName(i +
1);
Object cols_value =
resultSet.getObject(cols_name);
if (cols_value == null)
{
cols_value = "";
}
Field field =
cls.getDeclaredField(cols_name);
field.setAccessible(true);
field.set(resultObject, cols_value);
}
list.add(resultObject);
}
return list;
}
public void
releaseConn()
{
if (resultSet != null)
{
try
{
resultSet.close();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (pstmt != null)
{
try
{
pstmt.close();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (connection != null)
{
try
{
connection.close();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public
static void writeProperties(String url, String user, String
password)
{
Properties pro = new Properties();
FileOutputStream fileOut = null;
try
{
fileOut = new
FileOutputStream("Config.ini");
pro.put("url", url);
pro.put("user", user);
pro.put("password", password);
pro.store(fileOut, "My Config");
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
if (fileOut != null)
fileOut.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public
static List readProperties()
{
List list = new ArrayList();
Properties pro = new Properties();
FileInputStream fileIn = null;
try
{
fileIn = new FileInputStream("Config.ini");
pro.load(fileIn);
list.add(pro.getProperty("url"));
list.add(pro.getProperty("user"));
list.add(pro.getProperty("password"));
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
if (fileIn != null)
fileIn.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
return list;
}
public
static void main(String[] args)
{
// TODO Auto-generated method stub
JdbcUtils jdbcUtils = new JdbcUtils();
jdbcUtils.getConnection();
// String sql = "insert into
userinfo(username,pswd) values(?,?)";
// Listparams = new
ArrayList();
// params.add("rose");
// params.add("123");
// try {
// boolean flag =
jdbcUtils.updateByPreparedStatement(sql, params);
// System.out.println(flag);
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
String sql = "select * from userinfo ";
// Listparams = new
ArrayList();
// params.add(1);
}
}
JDBC深度封装的工具类 (具有高度可重用性)的更多相关文章
- 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入
一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...
- JDBC封装的工具类
1. JDBC封装的工具类 public class JDBCUtil { private static Properties p = new Properties(); private static ...
- .NET3.5中JSON用法以及封装JsonUtils工具类
.NET3.5中JSON用法以及封装JsonUtils工具类 我们讲到JSON的简单使用,现在我们来研究如何进行封装微软提供的JSON基类,达到更加方便.简单.强大且重用性高的效果. 首先创建一个类 ...
- JAVA中封装JSONUtils工具类及使用
在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. ...
- Workbook导出excel封装的工具类
在实际中导出excel非常常见,于是自己封装了一个导出数据到excel的工具类,先附上代码,最后会写出实例和解释.支持03和07两个版本的 excel. HSSF导出的是xls的excel,XSSF导 ...
- writeValueAsString封装成工具类
封装成工具类 <span style="font-family:Microsoft YaHei;">public static String toJsonByObjec ...
- 转:轻松把玩HttpClient之封装HttpClient工具类(一)(现有网上分享中的最强大的工具类)
搜了一下网络上别人封装的HttpClient,大部分特别简单,有一些看起来比较高级,但是用起来都不怎么好用.调用关系不清楚,结构有点混乱.所以也就萌生了自己封装HttpClient工具类的想法.要做就 ...
- 打印 Logger 日志时,需不需要再封装一下工具类?
在开发过程中,打印日志是必不可少的,因为日志关乎于应用的问题排查.应用监控等.现在打印日志一般都是使用 slf4j,因为使用日志门面,有助于打印方式统一,即使后面更换日志框架,也非常方便.在 < ...
- 【JDBC】Java 连接 MySQL 基本过程以及封装数据库工具类
一. 常用的JDBC API 1. DriverManager类 : 数据库管理类,用于管理一组JDBC驱动程序的基本服务.应用程序和数据库之间可以通过此类建立连接.常用的静态方法如下 static ...
随机推荐
- arcgis andriod 点击后变色
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...
- Unity3d通用工具类之解压缩文件
今天,我们来写写c#是如何通过代码解压缩文件的. 在游戏的项目中呢,常常我们需要运用到解压缩的技术.比如,当游戏需要更新的时候,我们会从服务器中下载更新的压缩文件包. 这时候我们就需要解压文件,然后覆 ...
- 配置Yum源repo文件及搭建本地Yum服务器
分享一篇配置Yum源repo文件及搭建本地Yum服务器的方法,希望对大家有用. Yum源的话有三大类: Base Extra Epel Base:就是你下载的光盘镜像里面的DVD1Extra:就是你下 ...
- struts2安全漏洞
1 背景 Struts2是apache项目下的一个web 框架,普遍应用于阿里巴巴.京东等互联网.政府.企业门户网站. 2 内容 在2013年6月底发布的Struts 2.3.15版本被曝出存在重要的 ...
- C# SQLite 创建数据库的方法增删查改语法和命令
SQLite介绍 SQLite是一个开源.免费的小型RDBMS(关系型数据库),能独立运行.无服务器.零配置.支持事物,用C实现,内存占用较小,支持绝大数的SQL92标准. SQLite数据库官方主页 ...
- redis学习笔记——初始化
初始化服务器状态结构 redis中一个最重要的数据结构是redis_server,会创建一个这个结构的全局变量server,初始化服务器的第一步就是创建一个struct redisServer类型的实 ...
- 浏览器开发调试工具的秘密 - Secrets of the Browser Developer Tools
来源:GBin1.com 如果你是一个前端开发人员的话,正确的了解和使用浏览器开发工具是一个必须的技能. Secrets of the Browser Developer Tools是一个帮助大家了解 ...
- Oracle一些查询的习题,初学者一定要练习,蛮不错的
1. select * from emp; 2. select empno, ename, job from emp; 3. select empno 编号, ename 姓名, job 工作 fro ...
- Quartz JobStore管理Job
Quartz提供了RAMJobStore和JDBC JobStore两种方式用来Job,RAMJobStore将Job任务存入内存中,速度快:JobStore采用数据库的方式管理中,本文介绍JobSt ...
- HDOJ 3944 DP?
尽量沿着边走距离最短.化减后 C(n+1,k)+ n - k, 预处理阶乘,Lucas定理组合数取模 DP? Time Limit: 10000/3000 MS (Java/Others) Me ...