JAVA连接数据库增强DAO.docx
- 文档编号:4214984
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:28
- 大小:18.61KB
JAVA连接数据库增强DAO.docx
《JAVA连接数据库增强DAO.docx》由会员分享,可在线阅读,更多相关《JAVA连接数据库增强DAO.docx(28页珍藏版)》请在冰点文库上搜索。
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
checkSQL(sql);
conn=getConnect();
Vector
try{
stm=conn.createStatement();
rs=stm.executeQuery(sql);
ResultSetMetaDatarsmd=rs.getMetaData();
intcolumnCount=rsmd.getColumnCount();
while(rs.next()){
Vector
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();
//得到字段值不为空的字段集合
Vector
//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(); //得到字段值不为空的字段集合 Vector //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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 连接 数据库 增强 DAO