封装数据库操作

简介:
今天在一本书上面看到了一个封装数据库操作的辅助类,封装了获得数据库的连接、关闭数据库的连接、执行SQLINSERT/UPDATE/DELETE/SELECT 语句的方法。
  代码如下:
/**
*
*/
package com.sotaof.struts.db.utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import javax.naming.InitialContext;
import javax.sql.DataSource;
/**
* @Title: DbUtils.java
* @Package com.sotaof.struts.db.utils
* @Description: TODO
* @author A18ccms A18ccms_gmail_com
* @date 2013-2-4 下午06:30:36
* @version V1.0
*/
public class DbUtils {
private static Logger logger = Logger.getLogger("DbUtils");
public static int execute(String sql, List<Object> paramList) throws Exception
{
if(sql == null || sql.trim().equals(""))
{
logger.info("parameter is valid!");
}
Connection conn = null;
PreparedStatement pstmt = null;
int result = 0;
try
{
conn = DbUtils.getConnection();
pstmt = DbUtils.getPreparedStatement(conn, sql);
setPreparedStatementParam(pstmt, paramList);
if(pstmt == null)
{
return -1;
}
result = pstmt.executeUpdate();
}
catch(Exception e)
{
logger.info(e.getMessage());
throw new Exception(e);
}
finally
{
closeStatement(pstmt);
closeConn(conn);
}
return result;
}
public static Connection getConnection() throws Exception
{
InitialContext cxt = new InitialContext();
if(cxt == null)
{
throw new Exception("no context!");
}
DataSource ds = (DataSource) cxt.lookup("java:/comp/env/jdbc/orcl");
if(ds == null)
{
throw new Exception("Data source not found!");
}
return ds.getConnection();
}
public static PreparedStatement getPreparedStatement(Connection conn, String sql) throws Exception
{
if(conn == null || sql == null || sql.trim().equals(""))
{
return null;
}
PreparedStatement pstmt = conn.prepareStatement(sql.trim());
return pstmt;
}
public static void setPreparedStatementParam(PreparedStatement pstmt, List<Object> paramList) throws Exception
{
if(pstmt == null || paramList == null || paramList.isEmpty())
{
return;
}
DateFormat df = DateFormat.getDateTimeInstance();
for(int i = 0; i < paramList.size(); i++)
{
if(paramList.get(i) instanceof Integer)
{
int paramValue = ((Integer) paramList.get(i)).intValue();
pstmt.setInt(i + 1, paramValue);
}
else if(paramList.get(i) instanceof Float)
{
float paramValue = ((Float) paramList.get(i)).floatValue();
pstmt.setFloat(i + 1, paramValue);
}
else if(paramList.get(i) instanceof Double)
{
double paramValue = ((Double) paramList.get(i)).doubleValue();
pstmt.setDouble(i + 1, paramValue);
}
else if(paramList.get(i) instanceof Date)
{
pstmt.setString(i + 1, df.format((Date)paramList.get(i)));
}
else if(paramList.get(i) instanceof Long)
{
long paramValue = ((Long)paramList.get(i)).longValue();
pstmt.setLong(i + 1, paramValue);
}
else if(paramList.get(i) instanceof String)
{
pstmt.setString(i + 1, (String)paramList.get(i));
}
}
return;
}
private static void closeConn(Connection conn)
{
if(conn == null)
{
return;
}
try
{
conn.close();
}
catch(SQLException e)
{
logger.info(e.getMessage());
}
}
private static void closeStatement(Statement stmt)
{
if(stmt == null)
{
return;
}
try
{
stmt.close();
}
catch(SQLException e)
{
logger.info(e.getMessage());
}
}
private static void closeResultSet(ResultSet rs)
{
if(rs == null)
{
return;
}
try
{
rs.close();
}
catch(SQLException e)
{
logger.info(e.getMessage());
}
}
private static ResultSet getResultSet(PreparedStatement pstmt) throws Exception
{
if(pstmt == null)
{
return null;
}
ResultSet rs = pstmt.executeQuery();
return rs;
}
public static List<Map<String,String>> getQueryList(String sql, List<Object> paramList) throws Exception
{
if(sql == null || sql.trim().equals(""))
{
logger.info("parameter is valid!");
return null;
}
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
List<Map<String,String>> queryList = null;
try
{
conn = DbUtils.getConnection();
pstmt = DbUtils.getPreparedStatement(conn, sql);
setPreparedStatementParam(pstmt, paramList);
if(pstmt == null)
{
return null;
}
rs = DbUtils.getResultSet(pstmt);
queryList = DbUtils.getQueryList(rs);
}
catch(Exception e)
{
logger.info(e.getMessage());
throw new Exception();
}
finally
{
closeResultSet(rs);
closeStatement(pstmt);
closeConn(conn);
}
return queryList;
}
private static List<Map<String,String>> getQueryList(ResultSet rs) throws Exception
{
if(rs == null)
{
return null;
}
ResultSetMetaData rsMetaData = rs.getMetaData();
int columnCount = rsMetaData.getColumnCount();
List<Map<String,String>> dataList = new ArrayList<Map<String,String>>();
while(rs.next())
{
Map<String,String> dataMap = new HashMap<String,String>();
for(int i = 0; i < columnCount; i++)
{
dataMap.put(rsMetaData.getColumnName(i+1), rs.getString(i+1));
}
dataList.add(dataMap);
}
return dataList;
}
}
  不过我认为这种方法虽然封装性比较好,也比较好管理,但是当出现异常时,对于错误的查找非常的麻烦,所以我个人很少使用这样的方法,不过如果这样的数据库麻烦,那么就用Hibernate框架吧(如果你的数据库够强大的话)。


最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
|
9月前
|
存储 SQL 缓存
数据库操作的经济效益
转为使用文档数据库并实施恰当的数据建模技术,就有机会提高效率、节省资金。
|
SQL 安全 关系型数据库
封装数据库操作类(小结)|学习笔记
快速学习封装数据库操作类(小结)
81 0
|
SQL PHP 数据库
封装数据库操作类(写操作)|学习笔记
快速学习封装数据库操作类(写操作)
65 0
|
SQL 安全 搜索推荐
封装数据库操作类(优化)|学习笔记
快速学习封装数据库操作类(优化)
119 0
封装数据库操作类(优化)|学习笔记
|
SQL 安全 PHP
封装数据库操作类(读操作)|学习笔记
快速学习封装数据库操作类(读操作)
74 0
封装数据库操作类(读操作)|学习笔记
|
SQL 安全 数据库连接
封装数据库操作类(步骤)|学习笔记
快速学习封装数据库操作类(步骤)
199 0
|
SQL PHP 数据库
封装数据库操作类(连接认证)|学习笔记
快速学习封装数据库操作类(连接认证)
54 0
封装数据库操作类(连接认证)|学习笔记
|
SQL 关系型数据库 MySQL
数据库操作中需要注意的问题
数据库操作中需要注意的问题
152 0
数据库操作中需要注意的问题
|
SQL 存储 数据库
C#之数据库操作类
  平时在进行C#开发时,需要对数据库进行操作,下面介绍几种常见的操作数据库的方法:   一、操作类DataAccess   using System;   using System.Collections.Generic;   using System.Linq;   using System.Text;   using System.Data;   using System.Data.SqlClient;   using DevExpress.XtraEditors;   using System.Windows.Forms;   //自己写的解密数据库链接dll,可
399 0