package com.eulee.forum.db;
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.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DBProcessor {
private Connection conn = null;
private Statement stmt = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
/**
* 读取数据库驱动,初始化连接池。
*/
public DBProcessor(){
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// try {
// getConnection();
// } catch (SQLException e) {
// e.printStackTrace();
// }
}
/**
* 获得一个连接
* @throws SQLException
*/
public void getConnection() throws SQLException {
if(conn == null || conn.isClosed())
conn = DriverManager.getConnection("proxool.mysql");
}
//---execute--------------------------------------------------------------------------------
/**
* 执行查询语句
* @return 返回 ResultSet 结果集
*/
public List<Map<String, Object>> excuteQuery(String sql) {
if(sql == null || "".equals(sql)) return null;
try {
this.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
return this.getListByResultSet();
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.closeRs();
this.closeStmt();
this.closeConn();
}
return null;
}
/**
* 执行带参数的查询语句
* @return 返回 ResultSet 结果集
*/
public List<Map<String, Object>> excuteQuery(String sql, Object[] params) {
if(sql == null || "".equals(sql)) return null;
if(params == null || params.length <= 0) return null;
try {
this.getConnection();
pstmt = conn.prepareStatement(sql);
this.setParameterByPreparedStatement(params);
rs = pstmt.executeQuery(sql);
return this.getListByResultSet();
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.closeRs();
this.closeStmt();
this.closeConn();
}
return null;
}
/**
* 执行数据库更新
* @param sql
* @return 返回影响的行数
*/
public int excuteUpdate(String sql) {
if(sql == null || "".equals(sql)) return 0;
int result = 0;
try {
this.getConnection();
stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.closeStmt();
this.closeConn();
}
return result;
}
/**
* 执行带参数的查询语句
* @return 返回影响的行数
*/
public int excuteUpdate(String sql,Object[] params){
if(sql == null || "".equals(sql)) return 0;
if(params == null || params.length <= 0) return 0;
int result = 0;
try {
this.getConnection();
pstmt = conn.prepareStatement(sql);
this.setParameterByPreparedStatement(params);
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally{
closePStmt();
this.closeConn();
}
return result;
}
/**
* 执行批量更新
* @param sqls SQL语句数组
* @return true
*/
public boolean executeBatchUpdate(String[] sqls){
if(sqls == null || sqls.length <= 0) return false;
boolean result = false;
try {
this.getConnection();
conn.setAutoCommit(false);
try{
stmt=conn.createStatement();
for(int i=0; i<sqls.length; i++){
stmt.executeUpdate(sqls[i]);
}
conn.commit();
result = true;
}catch(Exception ex){
result = false;
this.conn.rollback();
}
}catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
this.closeStmt();
this.closeConn();
}
return result;
}
//---get-----------------------------------------------------------------------------------
/**
* 获得总数
* @param field 字段
* @param table 表名
* @param where 条件 赋值空为无条件
* @return 返回SQL语句,语句结果:返回总行数列名为:count
*/
public int getCount(String field, String table, String where){
if(field == null || "".equals(field)) return 0;
if(table == null || "".equals(table)) return 0;
StringBuilder sql = new StringBuilder();
sql.append("select count(").append(field).append(") as count ");
sql.append("from ").append(table).append(" ");
if(where != null) sql.append("where ").append(where);
try {
this.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql.toString());
if(rs.next()){
return rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.closeRs();
this.closeStmt();
this.closeConn();
}
return 0;
}
//---close--------------------------------------------------------------------------------
/**
* 关闭记录集
*/
public void closeRs(){
try {
if(this.rs != null){
this.rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 关闭语句对象
*/
public void closeStmt() {
try{
if(this.stmt!= null){
this.stmt.close();
}
}catch (SQLException e){
e.printStackTrace();
}
}
/**
* 关闭预备语句对象
*/
public void closePStmt() {
try{
if(this.pstmt!= null){
this.pstmt.close();
}
}catch (SQLException e){
e.printStackTrace();
}
}
/**
* 关闭数据库连接
*/
public void closeConn() {
try{
if(this.conn != null){
this.conn.close();
}
}catch (SQLException e){
e.printStackTrace();
}
}
//---private--------------------------------------------------------------------------
/**
* 获得 List by ResultSet
* @param rs 结果集
* @return List<Map<String, Object>>
* @throws SQLException
*/
private List<Map<String, Object>> getListByResultSet() throws SQLException{
if(rs == null) return null;
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map;
String column;
Object value;
ResultSetMetaData md = rs.getMetaData();
while(rs.next()){
map = new HashMap<String, Object>();
//遍历此行的所有列
for (int i = 0; i < md.getColumnCount(); i++){
column = md.getColumnName(i + 1);//列名
// System.out.println( column + ": " + md.getColumnClassName(i+1));
if("java.lang.Boolean".equals(md.getColumnClassName(i+1)))
value = rs.getInt(column);//获得值
else
value = rs.getObject(column);//获得值
map.put(column, value == null ? "" : value);
}
list.add(map);
}
return list;
}
/**
* 设置 PreparedStatement 参数
* @param params
* @throws SQLException
*/
private void setParameterByPreparedStatement(Object[] params) throws SQLException{
if(params == null || params.length <= 0) return;
for(int i=0; i<params.length; i++){
if(params[i] instanceof String ){
pstmt.setString(i+1, String.valueOf(params[i]));
}if(params[i] instanceof Integer){
pstmt.setInt(i+1, Integer.parseInt(String.valueOf(params[i])));
}else if(params[i] instanceof Short){
pstmt.setShort(i+1, Short.parseShort(String.valueOf(params[i])));
}else if(params[i] instanceof Long){
pstmt.setLong(i+1, Long.parseLong(String.valueOf(params[i])));
}else if(params[i] instanceof Double){
pstmt.setDouble(i+1, Double.parseDouble(String.valueOf(params[i])));
}else if(params[i] instanceof Float){
pstmt.setFloat(i+1, Float.parseFloat(String.valueOf(params[i])));
}else if(params[i] instanceof Byte){
pstmt.setByte(i+1, Byte.parseByte(String.valueOf(params[i])));
}else if(params[i] instanceof Byte[]){
pstmt.setBytes(i+1, (byte[])params[i]);
}else{
pstmt.setObject(i+1, params[i]);
}
}
}
}
分享到:
相关推荐
1、加载JDBC驱动程序 2、提供JDBC连接的URL 3、创建数据库的连接 4、创建一个Statement 5、执行SQL语句 6、处理结果 7、关闭JDBC对象
JDBC连接数据库的标准步骤 1. 载入JDBC驱动程序(dbDriver) 2. 定义URL 3. 建立连接 4 创建Statement对象 5 执行查询或更新 6. 处理结果 7 关闭连接 实例java方式获取连接的一个方法
一个简单的连接数据库例子,通过jdbc,实现了增加,查询 利用反射和普通办法 查询单条记录和多条记录 加载jdbc驱动 提供连接参数 建立一个数据库的连接 创建一个statement连接 执行sql语句 处理结果 关闭jdbc对象。 ...
一、实验目的: ...(5)理解数据库连接池的基本原理和思想,学会在tomcat服务器中配置数据库连接池,并掌握从连接池中获取连接的基本方法。 (6)初步理解数据访问层的基本设计方法,理解web的分层架构。
我要向大家介绍的最重要的经验是充分利用SQL的面向集合的方法来解决数据库处理需求,而不是使用Java等过程化的编程语言。 如果编程人员要在一个表中查找许多行,结果中的每个行都会查找其他表中的数据,最后,...
jdbc连接各数据库及事务处理
加载JDBC驱动程序,提供JDBC连接的URL ,创建数据库的连接,创建一个Statement ,执行SQL语句 ,处理结果,关闭JDBC对象
是一个最简单,也是学习jsp必须会的一个入门实验----通过jdbc连接数据库。 采用jsp+access数据库实现,同时使用javabean通过jdbc连接数据库。运行结果将显示从数据库查询出的图书。里面包含了javabean的源代码及解释...
可在Servlet的init方法中创建数据库的连接; 在doPost方法中处理查询,最后进行转发处理,可使用forword方法。 4. 登录界面login.jsp如下,将用户在JSP页面输入的用户名username和密码password,通过servlet到数据库...
详细介绍JDBC的连接操作数据库、处理大数据、批处理使用操作 Sun公司为了简化数据库开发,定义了一套JDBC接口,这套接口由数据库厂商去实现,这样,开发人员只需要学习JDBC接口, 并通过JDBC加载具体的驱动,就可以...
2.2 使用JDBC连接数据库 2.2.1 SQLJ基本知识 2.2.2 用PL/SQL和Java建立应用程序的基本知识 2.2.3 PL/SQL和Java的特性 2.2.4 PL/SQL和Java的实际开发应用实例 2.2.5 Java连接各类数据库的程序代码 2.3 Web应用...
1、并发问题 2、多数据库服务器和多用户 3、事务处理 4、连接池的分配与释放 5、连接池的配置与维护 连接池模型
jdbc连接各类数据库的综合文档,供自己备份使用,应对各种接口
Oracle JDBC连接缓存对JSP数据库处理性能的优化.pdf
mybatis入门之如何使用jdbc操作数据库;连接、预处理、传参、处理结果集、关闭资源
同数据库在java中使用jdbc的连接语句
所有的JDBC应用程序都具有下面的基本流程: 1、加载数据库驱动并建立到数据库的连接。 2、执行SQL语句。 3、处理结果。 4、从数据库断开连接释放资源。下面我们就来仔细看一看每一个步骤:其实按照上面所说每个...
Java的数据库连接技术是指在Java程序中与数据库建立连接并进行数据交互的技术。通过数据库连接技术,Java...使用JDBC连接数据库的步骤包括加载数据库驱动程序、建立连接、创建Statement对象、执行SQL语句并处理结果。
1. JDBC(Java Database Connectivity,Java 数据库连接)是一套用于执行 SQL 语句的 Java API。应用 程序可通过这套 API 连接到关系型数据库,并使用 SQL 语句来完成对数据库中数据的查询、新增、更 新和删除等操作...
C# 数据库连接 设计模式 查询处理 C# 数据库连接 设计模式 查询处理