- 浏览: 86772 次
- 性别:
- 来自: 苏州
最新评论
-
javazeke:
自己支持一下,,,希望下周有help
求oracle11g和10g 双机热备文档 -
javazeke:
kimmking 写道mr_kairy 写道看你的结构 就是 ...
江湖求方案,类似SSO系统的需求 -
javazeke:
yangdefeng95802 写道LZ的图是什么软件画的?真 ...
江湖求方案,类似SSO系统的需求 -
javazeke:
mr_kairy 写道看你的结构 就是 SOA 解决方案。。 ...
江湖求方案,类似SSO系统的需求 -
javazeke:
threestone1026 写道使用cas了
感谢thre ...
江湖求方案,类似SSO系统的需求
Java数据库通用查询及封装
时常在网上看到,有关Java数据通用查询及封装的技术文章,前些日我在看书时突然想起以前怎么写jdbc查询的,好像当时没理顺,昨天晚上花了点时间,复习了一下写了两种通用数据封装。
文章只是为了复习而写,新手可以看看吧,大牛飘过。。。。
先把一些辅助类贴上来:
DBHelp.java获得连接及关闭资源
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBHelp {
static {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private String connStr = "jdbc:sqlserver://localhost:1433;DatabaseName=student";
private String userName = "sa";
private String userPass = "root";
private Connection connection = null;
public Connection getConnection() {
try {
connection = DriverManager.getConnection(connStr, userName,
userPass);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public void closeResource(Object obj) {
try {
if (Connection.class.isInstance(obj)) {
((Connection) obj).close();
}
if (PreparedStatement.class.isInstance(obj)) {
((PreparedStatement) obj).close();
}
if (ResultSet.class.isInstance(obj)) {
((ResultSet) obj).close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void closeResource(Connection connection,
PreparedStatement pStatement) {
try {
if (connection != null) {
connection.close();
}
if (pStatement != null) {
pStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void closeResource(Connection connection,
PreparedStatement pStatement,ResultSet resultSet) {
try {
if (connection != null) {
connection.close();
}
if (pStatement != null) {
pStatement.close();
}
if(resultSet != null){
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
1. 不借助实体类作为载体,封装数据。
Connections_DataProcesser.java处理sql语句
import java.sql.Connection;
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;
public class Connections_DataProcesser {
private Connection connection = null;
private PreparedStatement pStatement = null;
private ResultSet resultSet = null;
private static DBHelp db=new DBHelp();
public List<List<Map<String, String>>> getObjectList(String sql,Object...obj){
List<List<Map<String, String>>> list=new ArrayList<List<Map<String, String>>>();
List<Map<String, String>> mList=null;
Map<String, String> map=null;
try {
connection=db.getConnection();
pStatement=connection.prepareStatement(sql);
pStatement = formatSql(pStatement, obj);
resultSet=pStatement.executeQuery();
ResultSetMetaData rsmd=resultSet.getMetaData();
String[] columnName=getColumnName(rsmd);
while(resultSet.next()){
mList=new ArrayList<Map<String,String>>();
for(int i=0;i<rsmd.getColumnCount();i++){
map=new HashMap<String, String>();
map.put(columnName[i], resultSet.getString(i+1));
mList.add(map);
}
list.add(mList);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
db.closeResource(connection, pStatement, resultSet);
}
return list;
}
private String[] getColumnName(ResultSetMetaData rsmd){
String[] columnName =null;
try {
columnName = new String[rsmd.getColumnCount()];
for(int i=0;i<rsmd.getColumnCount();i++){
columnName[i]=rsmd.getColumnName(i+1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return columnName;
}
private PreparedStatement formatSql(PreparedStatement pStatement ,Object...obj){
try {
if(obj.length !=0){
for(int i=1;i<=obj.length;i++){
pStatement.setObject(1, obj[i]);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return pStatement;
}
}
一个示范查询,这种封装查询要求对java的集合类比较熟悉
Test.java
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
public class Test {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sql="select * from students";
Date d1=new Date();
Connections_DataProcesser dp=new Connections_DataProcesser();
List<List<Map<String, String>>> list=dp.getObjectList(sql);
for(int i=0;i<list.size();i++){
List<Map<String, String>> l=list.get(i);
for(int k=0;k<l.size();k++){
Set<Map.Entry<String, String>> mapset=l.get(k).entrySet()
Map.Entry<String, String> m= (Entry<String, String>) mapset.toArray()[0];
//System.out.print(m.getKey()+"="+m.getValue()+" ");
System.out.print(m.getValue()+" ");
}
System.out.println();
}
Date d2=new Date();
System.out.println(d2.getTime()-d1.getTime());
}
}
2. 通用查询
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class CommonEntity_DataProcesser {
private Connection connection = null;
private PreparedStatement pStatement = null;
private ResultSet resultSet = null;
private static DBHelp db = new DBHelp();
@SuppressWarnings("unchecked")
public <T extends Object> List<T> getEntityList(T entity, String sql,
Object... obj) {
List<T> list = new ArrayList<T>();
try {
connection = db.getConnection();
pStatement = connection.prepareStatement(sql);
pStatement = formatSql(pStatement, obj);
resultSet = pStatement.executeQuery();
ResultSetMetaData rsmd = resultSet.getMetaData();
String[] columnsName = getColumnName(rsmd);
Class clazz = entity.getClass();
Object entityObject = null;
Field[] fields = clazz.getDeclaredFields();
while (resultSet.next()) {
entityObject = clazz.newInstance();
for (int i = 0; i < columnsName.length; i++) {
for (int k = 0; k < fields.length; k++) {
if (fields[k].getName().equals(columnsName[i])) {
fields[k].setAccessible(true);
fields[k].set(entityObject, resultSet.getString(columnsName[i]));
}
}
}
list.add((T)entityObject);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}finally{
db.closeResource(connection, pStatement, resultSet);
}
return list;
}
private String[] getColumnName(ResultSetMetaData rsmd) {
String[] columnName = null;
try {
columnName = new String[rsmd.getColumnCount()];
for (int i = 0; i < rsmd.getColumnCount(); i++) {
columnName[i] = rsmd.getColumnName(i + 1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return columnName;
}
private PreparedStatement formatSql(PreparedStatement pStatement,
Object... obj) {
try {
if (obj.length != 0) {
for (int i = 1; i <= obj.length; i++) {
pStatement.setObject(1, obj[i]);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return pStatement;
}
}
Test1.java
import java.util.Date;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
String sql="select * from students";
Date d3 = new Date();
CommonEntity_DataProcesser cedp = new CommonEntity_DataProcesser();
List<Students> list1 = cedp.getEntityList(new Students(), sql);
for (Students s : list1) {
System.out.println(s.getId() + " " + s.getUserName() + " "
+ s.getUserPass() + " " + s.getUserSex());
}
Date d4 = new Date();
System.out.println(d4.getTime() - d3.getTime());
}
}
实体类students.Java
public class Students {
private String id;
private String userName;
private String userPass;
private String userSex;
getter….setter…();…
}
两种查询的性能差不多,能做到通用只不过是利用的泛型和集合的一些特性。。。文章只是为了复习来用,新手也可以看看吧,大牛飘过。。。。
时常在网上看到,有关Java数据通用查询及封装的技术文章,前些日我在看书时突然想起以前怎么写jdbc查询的,好像当时没理顺,昨天晚上花了点时间,复习了一下写了两种通用数据封装。
文章只是为了复习而写,新手可以看看吧,大牛飘过。。。。
先把一些辅助类贴上来:
DBHelp.java获得连接及关闭资源
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBHelp {
static {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private String connStr = "jdbc:sqlserver://localhost:1433;DatabaseName=student";
private String userName = "sa";
private String userPass = "root";
private Connection connection = null;
public Connection getConnection() {
try {
connection = DriverManager.getConnection(connStr, userName,
userPass);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public void closeResource(Object obj) {
try {
if (Connection.class.isInstance(obj)) {
((Connection) obj).close();
}
if (PreparedStatement.class.isInstance(obj)) {
((PreparedStatement) obj).close();
}
if (ResultSet.class.isInstance(obj)) {
((ResultSet) obj).close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void closeResource(Connection connection,
PreparedStatement pStatement) {
try {
if (connection != null) {
connection.close();
}
if (pStatement != null) {
pStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void closeResource(Connection connection,
PreparedStatement pStatement,ResultSet resultSet) {
try {
if (connection != null) {
connection.close();
}
if (pStatement != null) {
pStatement.close();
}
if(resultSet != null){
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
1. 不借助实体类作为载体,封装数据。
Connections_DataProcesser.java处理sql语句
import java.sql.Connection;
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;
public class Connections_DataProcesser {
private Connection connection = null;
private PreparedStatement pStatement = null;
private ResultSet resultSet = null;
private static DBHelp db=new DBHelp();
public List<List<Map<String, String>>> getObjectList(String sql,Object...obj){
List<List<Map<String, String>>> list=new ArrayList<List<Map<String, String>>>();
List<Map<String, String>> mList=null;
Map<String, String> map=null;
try {
connection=db.getConnection();
pStatement=connection.prepareStatement(sql);
pStatement = formatSql(pStatement, obj);
resultSet=pStatement.executeQuery();
ResultSetMetaData rsmd=resultSet.getMetaData();
String[] columnName=getColumnName(rsmd);
while(resultSet.next()){
mList=new ArrayList<Map<String,String>>();
for(int i=0;i<rsmd.getColumnCount();i++){
map=new HashMap<String, String>();
map.put(columnName[i], resultSet.getString(i+1));
mList.add(map);
}
list.add(mList);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
db.closeResource(connection, pStatement, resultSet);
}
return list;
}
private String[] getColumnName(ResultSetMetaData rsmd){
String[] columnName =null;
try {
columnName = new String[rsmd.getColumnCount()];
for(int i=0;i<rsmd.getColumnCount();i++){
columnName[i]=rsmd.getColumnName(i+1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return columnName;
}
private PreparedStatement formatSql(PreparedStatement pStatement ,Object...obj){
try {
if(obj.length !=0){
for(int i=1;i<=obj.length;i++){
pStatement.setObject(1, obj[i]);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return pStatement;
}
}
一个示范查询,这种封装查询要求对java的集合类比较熟悉
Test.java
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
public class Test {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sql="select * from students";
Date d1=new Date();
Connections_DataProcesser dp=new Connections_DataProcesser();
List<List<Map<String, String>>> list=dp.getObjectList(sql);
for(int i=0;i<list.size();i++){
List<Map<String, String>> l=list.get(i);
for(int k=0;k<l.size();k++){
Set<Map.Entry<String, String>> mapset=l.get(k).entrySet()
Map.Entry<String, String> m= (Entry<String, String>) mapset.toArray()[0];
//System.out.print(m.getKey()+"="+m.getValue()+" ");
System.out.print(m.getValue()+" ");
}
System.out.println();
}
Date d2=new Date();
System.out.println(d2.getTime()-d1.getTime());
}
}
2. 通用查询
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class CommonEntity_DataProcesser {
private Connection connection = null;
private PreparedStatement pStatement = null;
private ResultSet resultSet = null;
private static DBHelp db = new DBHelp();
@SuppressWarnings("unchecked")
public <T extends Object> List<T> getEntityList(T entity, String sql,
Object... obj) {
List<T> list = new ArrayList<T>();
try {
connection = db.getConnection();
pStatement = connection.prepareStatement(sql);
pStatement = formatSql(pStatement, obj);
resultSet = pStatement.executeQuery();
ResultSetMetaData rsmd = resultSet.getMetaData();
String[] columnsName = getColumnName(rsmd);
Class clazz = entity.getClass();
Object entityObject = null;
Field[] fields = clazz.getDeclaredFields();
while (resultSet.next()) {
entityObject = clazz.newInstance();
for (int i = 0; i < columnsName.length; i++) {
for (int k = 0; k < fields.length; k++) {
if (fields[k].getName().equals(columnsName[i])) {
fields[k].setAccessible(true);
fields[k].set(entityObject, resultSet.getString(columnsName[i]));
}
}
}
list.add((T)entityObject);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}finally{
db.closeResource(connection, pStatement, resultSet);
}
return list;
}
private String[] getColumnName(ResultSetMetaData rsmd) {
String[] columnName = null;
try {
columnName = new String[rsmd.getColumnCount()];
for (int i = 0; i < rsmd.getColumnCount(); i++) {
columnName[i] = rsmd.getColumnName(i + 1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return columnName;
}
private PreparedStatement formatSql(PreparedStatement pStatement,
Object... obj) {
try {
if (obj.length != 0) {
for (int i = 1; i <= obj.length; i++) {
pStatement.setObject(1, obj[i]);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return pStatement;
}
}
Test1.java
import java.util.Date;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
String sql="select * from students";
Date d3 = new Date();
CommonEntity_DataProcesser cedp = new CommonEntity_DataProcesser();
List<Students> list1 = cedp.getEntityList(new Students(), sql);
for (Students s : list1) {
System.out.println(s.getId() + " " + s.getUserName() + " "
+ s.getUserPass() + " " + s.getUserSex());
}
Date d4 = new Date();
System.out.println(d4.getTime() - d3.getTime());
}
}
实体类students.Java
public class Students {
private String id;
private String userName;
private String userPass;
private String userSex;
getter….setter…();…
}
两种查询的性能差不多,能做到通用只不过是利用的泛型和集合的一些特性。。。文章只是为了复习来用,新手也可以看看吧,大牛飘过。。。。
发表评论
文章已被作者锁定,不允许评论。
-
求oracle11g和10g 双机热备文档
2010-12-17 22:13 1558项目来了,,需求下来,,怕赔不起,,决定用热备 可怜的我,, ... -
江湖求方案,类似SSO系统的需求
2010-10-16 10:59 1481现有资料,大Boss交代我来弄,说实话,这东东我也不知道怎么 ... -
js array
2010-07-04 11:18 1016zhuan zi http://renxiangzyq.i ... -
Ldap之活动目录之userAccountControl
2010-04-22 10:27 3887When you open the properties fo ... -
Ldap之活动目录之属性
2010-04-22 10:19 1947“常规”标签 姓 Sn 名 Givename ... -
Ldap之活动目录介绍三
2010-04-22 10:12 1244安装第二台域控制器 在安装完第一台域控制器后其域名为 n ... -
Ldap之活动目录介绍二
2010-04-22 10:10 1313运行 Active Directory 安 ... -
Ldap之活动目录介绍一
2010-04-22 09:43 2667最近一直在做java通过Ldap去操作活动目录数据的东东,过程 ... -
我迷茫,我应该怎么走。望各位JE大哥指点!
2010-03-26 09:56 1695小弟六月毕业,在学校还算好学生,从大二起接触编程,,那时的编程 ... -
xp桌面回收站恢复
2010-02-21 19:14 863开始-运行gpedit.msc-本地计算机策略-用户配 ... -
MyEclipse7.5注册机
2010-01-25 17:29 957首先感谢提供源码的那位大牛,我只是做成了exe执行文件而已 -
DSA和RSA算法的差异
2009-11-20 19:13 15921978年就出现了这种算法 ... -
仿Google自动补全 jquery
2009-11-20 16:40 2869应大家要求,发一个包,方便大家使用,有问题欢迎e-mail : ... -
对称加密的两种方式
2009-11-18 22:33 1878对称加密,这东东现在 ... -
java简单对象池
2009-11-10 20:53 3973在项目中用到,自己写了个对象池的管理(创建、保留、获取),那种 ... -
仿Google自动补全 jQuery 不含索引处理 2
2009-11-08 14:39 1078Servlet。。。。。。。。。。。。。。。。。 pu ... -
仿Google自动补全 jQuery 不含索引处理
2009-11-08 14:29 1346自动补全 1. 页面有一个文本框,一个自动提示层,一个按 ... -
Java实现快排的算法
2009-10-14 22:28 2951Java实现快排的算法 public class Quick ... -
Collection List Set Map 区别记忆
2009-10-13 20:15 930一篇对Java集合讲解不错的文档,不是我写的,转过来和大家分享 ... -
List Set Map实现机制
2009-10-13 20:07 1899List接口对Collection进行 ...
相关推荐
Java数据库操作通用类是软件开发中一个非常实用的设计模式,它允许开发者编写一次代码,就能在不同的数据库系统上执行SQL操作。这样的设计提高了代码的可重用性和维护性,降低了因更换数据库系统而带来的修改成本。...
Java JDBC封装类,带增删改查例子,支持oracle,MySql,hsqldb 等,支持事务,返回数据格式 支持二维数组,MAP格式,以及javabean对象。有利于初学者DbDemo.java为demo,Connect为jdbc封装类,可以作为项目共通类使用。
本资源提供的"通用java数据库连接程序"是一个可复用的组件,能够方便地在各种项目中集成,以实现与数据库的无缝交互。下面将详细阐述这个程序的主要组成部分及其工作原理。 1. **RelationalInfoDao.java**: 这个...
这个名为"JAVA链接数据库的通用方法类"的资源提供了一个通用的Java类,可以帮助开发者便捷地与各种数据库系统(如MySQL、Oracle等)建立连接。下面我们将深入探讨这个主题,了解如何在Java中实现数据库连接以及通用...
《Java数据库通用操作类》 在Java编程中,与数据库的交互是不可或缺的一部分。文档"Java数据库通用操作类.doc"中描述的是一个名为`DBManager`的类,它用于管理和执行数据库操作。这个类通常被设计为一个工具类,...
标题中的“一个连接多种数据库的连接池封装包”指的是一个能够支持MySQL、SQL Server和Oracle等主流关系型数据库的通用连接池实现。这种封装使得开发者可以方便地在不同数据库之间切换,而无需大幅度修改代码,提高...
在Java代码实现上,可以创建一个DatabaseUtil类,用于封装数据库连接、预编译SQL语句、执行SQL以及处理结果集等通用操作。这样可以提高代码的复用性和可维护性。对于查询、插入、更新和删除等操作,可以创建对应的...
Java数据库操作组件1.1的出现,正是为了解决这个问题,它在JDBC的基础上进行了封装,提供了一套更高级、更易用的API。这个版本的组件可能增加了对复杂数据类型的处理能力,比如Blob(二进制大对象)、Clob(字符大...
DBUtil.java文件通常包含数据库操作的通用工具类,它封装了常见的数据库操作,如打开、关闭连接,执行SQL语句,处理结果集等。这样的设计使得代码更加简洁,可读性更强,同时也降低了出错的可能性。开发者可以借助...
Java通用数据库操作类是Java开发中常用的一种工具,主要用于简化对数据库的访问,它通过封装JDBC(Java Database Connectivity)接口来实现与多种数据库的交互。JDBC是Java语言连接数据库的标准,它提供了多种功能,...
本文将详细介绍如何在Android中进行数据库ORM的封装,并通过一个名为`DataBaseDemo`的示例项目来展示具体实现。 ### 1. Android的SQLite数据库 SQLite是Android系统内置的关系型数据库,支持标准SQL语法,适用于轻...
### JAVA数据库基本操作:增删改查 在Java开发中,与数据库进行交互是一项非常重要的技能。无论是构建简单的Web应用还是复杂的企业级系统,开发者都需要掌握如何通过Java代码执行SQL命令来实现数据的增删改查操作。...
【基于Java的数据库通用转储工具的研究】 在现代企业信息化进程中,数据库是不可或缺的重要组成部分,企业根据业务需求可能会采用多种不同类型的数据库。为了确保数据库的安全性、提高效率、简化数据迁移过程并增强...
在Java数据库浏览器中,用户界面通常会封装这些JDBC操作,将它们包装成易于理解和使用的图形化元素。例如,一个按钮点击事件可能触发一个PreparedStatement的executeQuery()方法,显示查询结果在一个表格视图中。...
Java数据库连接(JDBC,Java Database Connectivity)是Java编程语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。在本篇博客笔记中,我们将探讨如何利用Java进行...
数据库查询通用类是一种在软件开发中常见的设计模式,它封装了对数据库的增删改查操作,使得在项目中调用这些操作时更加简洁、高效。这个类通常包含静态方法或者实例方法,允许开发者通过传入不同的参数来执行不同的...