package org.studentmanager.commons;
/**
* java数据库访问通用类;
* @author clplain;
*
*/
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
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.List;
import com.sun.org.apache.commons.beanutils.ConvertUtils;
public class DBHelp {
protected Connection conn = null;
protected PreparedStatement ps = null;
protected ResultSet rs = null;
/**
* 连接数据库方法
* @return
*/
public Connection getConn(){
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载驱动
//获得连接
conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=student","sa","sa");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/**
* 释放资源
*/
public void closeAll(){
try {
if(rs != null){
rs.close();
}
if(ps != null){
ps.close();
}
if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 增、删、改方法
* 参数1: sql语句
* 参数2:Object数组,表示sql语句中问号占位符的值
* 返回值:更新成功还是失败
*/
public int executeUpdate(String sql,Object[] params){
int result = 0;
try {
ps = this.getConn().prepareStatement(sql);//获得预处理对象
//判断SQL语句中是否有问号占位符
if(params != null && params.length != 0){
//如果存在问号占位符,在给问号占位符设置值
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
}
//执行增、删、改SQL语句
result = ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.closeAll();//释放资源
}
return result;
}
/**
* 使用反射技术实现数据库查询的通用方法
* 参数1: sql语句
* 参数2:Object数组,表示sql语句中问号占位符的值
* 参数3: 将要封装的对象的类的反射
* 返回:List 表示存放查询结果对象的集合
*/
public List executeQuery(String sql,Object[] params,Class cla){
List list = new ArrayList();
try {
ps = this.getConn().prepareStatement(sql);
if(params != null && params.length != 0){
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
}
rs = ps.executeQuery();//执行SQL语句,并返回结果集
/**
* 1.从结果集中获得数据
* 2.将数据封装到(未知)对象中、
* 3.将对象封装到List集合中
*/
//利用结果集对象获得ResultSetMetadata对象,ResultSetMetadata是结果集的源数据,在ResultSetMetadata中存放着查询结果的结果集的表结构
ResultSetMetaData rsmt = rs.getMetaData();
while(rs.next()){
Object obj = cla.newInstance();
//获得查询结果的列数
int columnCount = rsmt.getColumnCount();
//根据列数确定循环次数
for(int i=0;i<columnCount;i++){
//获得属性名
String fieldName = rsmt.getColumnName(i+1);
//获得属性
Field field = cla.getDeclaredField(fieldName);
//拼接方法名
String methodName = "set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
// 获得方法
Method method = cla.getDeclaredMethod(methodName, field.getType());
method.invoke(obj,rs.getObject(i+1));//调用对象的set方法赋值
}
list.add(obj);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
/*
public ResultSet executeQuery(String sql) throws SQLException{
ps = this.getConn().prepareStatement(sql);
rs = ps.executeQuery();
return rs;
}
*/
}
分享到:
相关推荐
Java数据库操作通用类是软件开发中一个非常实用的设计模式,它允许开发者编写一次代码,就能在不同的数据库系统上执行SQL操作。这样的设计提高了代码的可重用性和维护性,降低了因更换数据库系统而带来的修改成本。...
本文提出了基于Java Reflection机制和面向接口的编程思想,设计并实现了一款Java数据库访问通用模型,该模型具有适用范围广、轻量级、可扩展性好等特点,可以应用到Java桌面应用程序和Java Web应用程序中,并且与...
以上就是Java操作各种数据库通用类的核心知识点,通过这样的通用类,我们可以轻松地在不同数据库间切换,简化数据库操作的复杂性,提高代码的可复用性和可维护性。当然,实际应用中还需要根据项目需求进行适当的定制...
本资料"Java数据库操作类20170703"聚焦于利用Java进行数据库交互,并且支持多种类型的数据库,包括Excel、Access、MSSQLServer、MySQL、Oracle以及通过JDBC-ODBC桥连接的其他数据库。它特别强调了使用数据库连接池来...
在Java递归树型结构通用数据库中,提供了数据库访问接口,包括部门表、用户表、部门用户表等数据库表的访问接口,使用Java语言实现,具有良好的可扩展性和可维护性。 9. 异常处理机制 在Java递归树型结构通用...
7. **性能优化**:为了提高效率,可能包含缓存策略,比如使用LRU(Least Recently Used)缓存最近使用的查询结果,减少不必要的数据库访问。 8. **并发支持**:在多线程环境中,类需要确保线程安全,防止竞态条件和...
本资源提供的"通用java数据库连接程序"是一个可复用的组件,能够方便地在各种项目中集成,以实现与数据库的无缝交互。下面将详细阐述这个程序的主要组成部分及其工作原理。 1. **RelationalInfoDao.java**: 这个...
根据提供的文档信息,本文将详细解析“Java数据库通用操作类”中的关键知识点,包括但不限于类的设计、数据库连接的建立与管理、SQL语句的执行、结果集的处理等。 ### 一、概述 #### 1.1 类设计目的 `DBManager` ...
Java数据库连接(Java Database Connectivity,简称JDBC)是一套用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成。通过JDBC,开发者可以编写出能够与多种不同类型的数据库进行交互的应用程序,而...
Java通用数据库操作类是Java开发中常用的一种工具,主要用于简化对数据库的访问,它通过封装JDBC(Java Database Connectivity)接口来实现与多种数据库的交互。JDBC是Java语言连接数据库的标准,它提供了多种功能,...
总的来说,通过Java的注解和反射机制,我们可以构建出一个高度抽象且具有通用性的数据库访问接口,它能够适应各种不同的数据模型,极大地提高了代码的灵活性和可维护性。同时,理解Android应用的基本结构,如...
JDBC API既支持数据库访问的高级抽象,也保留了对数据库的具体功能的支持。本文将基于提供的“JDBC数据库操作通用类”代码片段,深入探讨其设计原理及实现细节。 #### 二、代码结构解析 ##### 1. 类定义与成员变量...
这个"jsp连接数据库通用类"旨在为各种JSP应用提供一个标准的方式来访问和操作数据库,无论何时需要进行数据库交互,都可以便捷地调用此类。 通用数据库连接类通常包含以下几个核心组件和功能: 1. **配置信息**:...
在实际应用中,这样的通用数据库访问类可能基于诸如JDBC(Java Database Connectivity)或ADO.NET等数据库访问技术。例如,JDBC提供了一套标准的API,可以连接到各种遵循JDBC规范的数据库。开发者可以创建一个实现了...
在Java数据库编程中,常用到的接口主要分为两大类:JDBC API和ODBC API。JDBC API是专为Java设计的数据库编程接口,而ODBC API是通用的数据库编程接口。与ODBC API相比,JDBC API的抽象性和复杂性较低,更适合技术...
JDBC提供了一套标准接口,使得开发者可以编写不依赖特定数据库的代码,从而实现数据库的通用访问。 在源代码中,我们可能会看到以下关键类: 1. `Connection`:这是JDBC的核心接口,代表了到数据库的物理连接。...
本项目名为“通用多种数据库访问组件”,它旨在提供一个跨平台、多数据库兼容的解决方案,支持MSSQL(Microsoft SQL Server)、PostgreSQL和MySQL,同时具备扩展性,便于开发者添加对其他数据库的支持。 首先,我们...
### JDBC的Java数据库编程:深入理解与应用 #### 引言 JDBC(Java Database Connectivity)是Java平台上的标准数据库连接技术,它提供了一种通用的API,使得开发者能够使用Java语言来访问各种类型的数据库系统。...