JAVA连接数据库增强DAO.docx

上传人:b****7 文档编号:10598737 上传时间:2023-02-21 格式:DOCX 页数:28 大小:18.61KB
下载 相关 举报
JAVA连接数据库增强DAO.docx_第1页
第1页 / 共28页
JAVA连接数据库增强DAO.docx_第2页
第2页 / 共28页
JAVA连接数据库增强DAO.docx_第3页
第3页 / 共28页
JAVA连接数据库增强DAO.docx_第4页
第4页 / 共28页
JAVA连接数据库增强DAO.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

JAVA连接数据库增强DAO.docx

《JAVA连接数据库增强DAO.docx》由会员分享,可在线阅读,更多相关《JAVA连接数据库增强DAO.docx(28页珍藏版)》请在冰豆网上搜索。

JAVA连接数据库增强DAO.docx

JAVA连接数据库增强DAO

JAVA连接数据库增强DAO

在简单的连接数据库的基础上,通过JAVA反射机制可以将对象与数据库表之间映射,直接保存对象、得到对象集合

packagecom.jgj.dao;

importjava.lang.reflect.Field;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.PreparedStatement;

importjava.sql.ResultSet;

importjava.sql.ResultSetMetaData;

importjava.sql.SQLException;

importjava.sql.Statement;

importjava.util.List;

importjava.util.Vector;

/**

*数据库管理类(增强DAO)V1.0,请注意及时释放资源
作者:

蒋固金

*

*@author蒋固金

*

*/

publicclassDBManager{

//数据库连接

Connectionconn=null;

Statementstm=null;

PreparedStatementpstm=null;

//结果集

ResultSetrs=null;

//驱动字符串

privateStringDRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";

//连接URL,默认master

privateStringfullDB_URL="jdbc:

sqlserver:

//localhost:

1433;databaseName=master";

privateStringDB_URL="jdbc:

sqlserver:

//localhost:

1433;databaseName=";

//用户名

privateStringuserName="sa";

//密码

privateStringpassword="123";

//是否显示SQL语句

privatebooleanshow_sql=false;

/**

*默认构造方法,连接数据库master

*/

publicDBManager(){

}

/**

*连接指定数据库

*

*@paramdatabaseName

*/

publicDBManager(StringdatabaseName){

fullDB_URL=DB_URL+databaseName;

}

/**

*设置驱动字符串

*

*@paramdriver

*/

publicvoidsetDRIVER(Stringdriver){

this.DRIVER=driver;

}

/**

*得到驱动字符串

*

*@return驱动字符串

*/

publicStringgetDRIVER(){

returnDRIVER;

}

/**

*设置数据库名称,以默认方式自动生成连接URL

*

*@paramdatabaseName

*/

publicvoidsetDataBaseName(StringdatabaseName){

fullDB_URL=DB_URL+databaseName;

}

/**

*设置完整连接URL

*

*@paramfullDB_URL

*/

publicvoidsetFullDB_URL(StringfullDB_URL){

this.fullDB_URL=fullDB_URL;

}

/**

*得到完整URL

*

*@return完整URL

*/

publicStringgetFullDB_URL(){

returnfullDB_URL;

}

/**

*设置用户名

*

*@paramuserName

*/

publicvoidsetUserName(StringuserName){

this.userName=userName;

}

/**

*得到用户名

*

*@return用户名

*/

publicStringgetUserName(){

returnuserName;

}

/**

*设置密码

*

*@parampassword

*/

publicvoidsetPassword(Stringpassword){

this.password=password;

}

/**

*得到密码

*

*@return密码

*/

publicStringgetPassword(){

returnpassword;

}

/**

*设置是否显示SQL语句

*

*@paramshow

*/

publicvoidsetShowSql(booleanshow){

this.show_sql=show;

}

/**

*得到是否显示SQL语句

*

*@returntrue显示

*/

publicbooleangetShowSql(){

returnshow_sql;

}

/**

*获得数据库连接

*

*@returnconn

*/

publicConnectiongetConnect()throwsException{

try{

//加载驱动

Class.forName(DRIVER);

//获得连接

conn=DriverManager.getConnection(fullDB_URL,userName,password);

}catch(Exceptione){

throwe;

}

returnconn;

}

/**

*获得结果集

*

*@paramsqlsql语句

*@return结果集

*@throwsException

*/

publicResultSetgetResultSet(Stringsql)throwsException{

checkSQL(sql);

conn=getConnect();

try{

stm=conn.createStatement();

rs=stm.executeQuery(sql);

}catch(Exceptione){

throwe;

}

returnrs;

}

/**

*获得PreparedStatement

*

*@paramsql

*@returnPreparedStatement对象

*@throwsException

*/

publicPreparedStatementgetpreparedStatement(Stringsql)throwsException{

checkSQL(sql);

pstm=getConnect().prepareStatement(sql);

returnpstm;

}

/**

*获得Statement

*

*@returnstm

*@throwsException

*/

publicStatementgetStatement()throwsException{

stm=getConnect().createStatement();

returnstm;

}

/**

*获得查询结果的向量集合

*

*@paramsql

*@returnVector>

*/

publicVector>DBQuery(Stringsql)throwsException{

checkSQL(sql);

conn=getConnect();

Vector>vvo=newVector>();

try{

stm=conn.createStatement();

rs=stm.executeQuery(sql);

ResultSetMetaDatarsmd=rs.getMetaData();

intcolumnCount=rsmd.getColumnCount();

while(rs.next()){

Vectorvo=newVector();

for(intm=1;m<=columnCount;m++){

vo.add(rs.getObject(m));

}

vvo.add(vo);

}

}catch(Exceptione){

throwe;

}finally{

try{

freeConnect();

}catch(Exceptionex){

}

}

returnvvo;

}

/**

*获得影响记录的条数

*

*@paramsql

*@return影响记录的条数

*@throwsException

*/

publicintgetAffectRecordCount(Stringsql)throwsException{

checkSQL(sql);

conn=getConnect();

intcount=0;

try{

stm=conn.createStatement();

count=stm.executeUpdate(sql);

}catch(Exceptione){

throwe;

}finally{

try{

freeConnect();

}catch(Exceptionex){

}

}

returncount;

}

/**

*执行SQL语句,判断是否成功

*

*@paramsql

*@paramresult

*@returntrue影响记录条数为result

*/

publicbooleanexeSQL(Stringsql,intresult)throwsException{

inttemp=0;

try{

temp=this.getAffectRecordCount(sql);

}catch(Exceptione){

throwe;

}

if(temp==result){

returntrue;

}

returnfalse;

}

/**

*执行SQL语句,判断是否成功

*

*@paramsql

*@returntrue影响记录条数为1

*/

publicbooleanexeSQL(Stringsql)throwsException{

returnexeSQL(sql,1);

}

/**

*检查SQL语句

*

*@paramsql

*@throwsException

*/

privatevoidcheckSQL(Stringsql)throwsException{

if(sql==null||sql.trim().equals("")){

thrownewException("thesqlisnullorinvalid");

}

if(show_sql){

System.out.println(sql);

}

}

/**

*释放资源

*

*@throwsSQLException

*/

publicvoidfreeConnect()throwsSQLException{

try{

if(rs!

=null){

rs.close();

rs=null;

}

if(pstm!

=null){

pstm.close();

pstm=null;

}

if(stm!

=null){

stm.close();

stm=null;

}

if(conn!

=null){

conn.close();

conn=null;

}

}catch(SQLExceptione){

throwe;

}

}

/**

*向表中插入数据,未释放资源,不适合主键为自增列

*

*@paramobject

*@paramtableName

*@returntrue插入成功

*@throwsException

*/

privatebooleaninsertObject(Objectobject,StringtableName)throwsException{

booleanflag=false;

Classcls=object.getClass();

//得到所有已定义字段

Field[]fields=cls.getDeclaredFields();

//得到字段值不为空的字段集合

VectornotNull=newVector();

//SQL语句

StringBuffersql=newStringBuffer("insertinto"+tableName+"(");

//动态参数的?

StringBufferque=newStringBuffer();

try{

//获得字段名称,生成SQL语句

for(inti=0;i

Fieldfield=fields[i];

field.setAccessible(true);

if(field.get(object)!

=null){

notNull.addElement(field);

sql.append(getFieldName(field)+",");

que.append("?

");

}

}

//最后一位为,,去除

if(sql.charAt(sql.length()-1)==','){

sql.deleteCharAt(sql.length()-1);

}

if(que.charAt(que.length()-1)==','){

que.deleteCharAt(que.length()-1);

}

sql.append(")values("+que+")");

getpreparedStatement(sql.toString());

for(inti=0;i

pstm.setObject(i+1,notNull.elementAt(i).get(object));

}

if(pstm.executeUpdate()==1){

flag=true;

}

}catch(Exceptionex){

throwex;

}finally{

try{

if(pstm!

=null){

pstm.close();

}

}catch(Exceptione){

}

}

returnflag;

}

/**

*向表中插入数据,未释放资源,适合主键为自增列

*

*@paramobject

*@paramtableName

*@paramprimaryKeyName

*@returntrue插入成功

*@throwsException

*/

privatebooleaninsertObjectA(Objectobject,StringtableName,StringprimaryKeyName)throwsException{

booleanflag=false;

Classcls=object.getClass();

//得到所有已定义字段

Field[]fields=cls.getDeclaredFields();

//得到字段值不为空的字段集合

VectornotNull=newVector();

//SQL语句

StringBuffersql=newStringBuffer("insertinto"+tableName+"(");

//动态参数的?

StringBufferque=newStringBuffer();

try{

//获得字段名称,生成SQL语句

for(inti=0;i

Fieldfield=fields[i];

field.setAccessible(true);

if(field.get(object)!

=null&&!

getFieldName(field).equals(primaryKeyName)){

notNull.addElement(field);

sql.append(getFieldName(field)+",");

que.append("?

");

}

}

//最后一位为,,去除

if(sql.charAt(sql.length()-1)==','){

sql.deleteCharAt(sql.length()-1);

}

if(que.charAt(que.length()-1)==','){

que.deleteCharAt(que.length()-1);

}

sql.append(")values("+que+")");

getpreparedStatement(sql.toString());

for(inti=0;i

pstm.setObject(i+1,notNull.elementAt(i).get(object));

}

if(pstm.executeUpdate()==1){

flag=true;

}

}catch(Exceptionex){

throwex;

}finally{

try{

if(pstm!

=null){

pstm.close();

}

}catch(Exceptione){

}

}

returnflag;

}

/**

*将对象保存在数据库中,表名为类名小写,适合主键不是自增列

*

*@paramobject

*@returntrue成功

*/

publicbooleansaveObject(Objectobject)throwsException{

Classcls=object.getClass();

returnsaveObject(object,getClassNameWithoutPackage(cls).toLowerCase());

}

/**

*将对象保存在数据库的对应表中,仅保存不为空的字段,适合主键不是自增列

*

*@paramobject

*@paramtableName

*@returntrue成功

*@throwsException

*/

publicbooleansaveObject(Objectobject,StringtableName)throwsException{

booleanflag=false;

try{

flag=insertObject(object,tableName);

}catch(Exceptione){

throwe;

}finally{

try{

freeConnect();

}catch(Exceptione){

}

}

returnflag;

}

/**

*将对象保存在数据库中,表名为类名小写,适合主键为自增列

*

*@paramobject

*@paramprimaryKeyName主键

*@returntrue成功

*/

publicbooleansaveObjectA(Objectobject,StringprimaryKeyName)throwsException{

Classcls=object.getClass();

returnsaveObjectA(object,getClassNameWithoutPackage(cls).toLowerCase(),primaryKeyName);

}

/**

*将对象保存在数据库对应表中,适合主键为自增列

*

*@paramobject

*@paramtableName

*@paramprimaryKeyName

*@returntrue保存成功

*@throwsException

*/

publicbooleansaveObjectA(Objectobject,StringtableName,StringprimaryKeyName)throwsException{

booleanflag=false;

try{

flag=insertObjectA(object,tableName,primaryKeyName);

}catch(Excepti

展开阅读全文
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1