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]);
}
}
}
}
分享到:
相关推荐
### JDBC连接数据库步骤详解 #### 一、简介 在Java开发中,经常需要与数据库进行交互,例如查询数据、更新数据等操作。为了方便开发者进行这些操作,Sun公司推出了一套标准的Java访问数据库的API——Java Database...
对于初学者来说,理解JDBC连接数据库的基本步骤至关重要。以下是详细解释这些步骤的知识点: 1. 加载JDBC驱动程序: 在连接数据库之前,首先需要在Java虚拟机(JVM)中加载对应的数据库驱动程序。这一步是通过使用...
### JDBC连接数据库类知识点解析 #### 一、JDBC简介 Java Database Connectivity (JDBC) 是 Java 中一种用于执行 SQL 语句的标准 API,它由一组用 Java 编程语言编写的类和接口组成。JDBC 可为多种关系型数据库...
### JDBC连接数据库各种数据库参数详解 #### 一、Oracle8/8i/9i数据库(thin模式) 在Java中通过JDBC访问Oracle数据库时,通常采用thin驱动方式。thin驱动是一种纯Java驱动,无需依赖任何非Java代码即可完成与...
在"jdbc连接数据库事务工厂模式"中,我们主要关注三个方面:JDBC、事务管理和工厂模式。 首先,JDBC提供了与数据库交互的基本步骤,包括加载驱动、建立连接、执行SQL语句和关闭连接。例如,使用`Class.forName()`...
总的来说,了解和掌握这些JDBC连接数据库的方法是Java开发人员必备的技能之一,它们可以帮助你有效地与各种数据库进行交互,实现数据的存储和检索。在实际开发中,根据项目需求和团队偏好选择最适合的方法,并确保...
1. `DriverManager`:它是管理JDBC驱动的服务类,主要用于加载和注册驱动,以及建立到数据库的连接。`getConnection()`方法是获取数据库连接的关键。 2. `Connection`:代表一个到数据库的物理连接,提供了创建...
"JDBC 连接数据库" JDBC(Java Database Connectivity)是一种Java API,用于连接数据库,并执行 SQL 语句以访问和操作数据库中的数据。JDBC API 由java.sql包提供,包括了 Connection、Statement、ResultSet 等...
JDBC连接数据库的基本步骤包括: 1. 加载数据库驱动:`Class.forName(driverClassName);` 2. 创建数据库连接:`Connection conn = DriverManager.getConnection(url, username, password);` 3. 获取Statement或...
### 完整Java开发中JDBC连接数据库代码和步骤 #### 一、概述 在Java开发过程中,通过Java Database Connectivity (JDBC) 连接数据库是非常常见的一种操作方式。JDBC提供了一组标准的API,使得Java应用程序可以访问...
"常用的jdbc连接数据库架包jar"指的是包含不同数据库驱动的Java类库,这些驱动使得Java程序能够通过JDBC API与Oracle、DB2、SQLServer和MySQL等主流数据库建立连接。下面我们将详细探讨这些数据库以及它们对应的JDBC...
Java 是一种广泛使用的编程语言,它提供了多种方式来处理数据库数据,而 JDBC(Java Database Connectivity)是 Java 中连接数据库的标准 API 之一。将数据库数据导出到 CSV 文件是一种常见的数据交换格式,它可以被...
### Java JDBC连接数据库代码大全详解 #### 一、JDBC基础概述 JDBC(Java Database Connectivity)是一种标准的Java API,允许Java程序连接并操作各种类型的数据库。它为开发人员提供了一种统一的方式,以便使用...
标题中的“jdbc连接数据库的jar”指的是用于在Java程序中通过JDBC API连接数据库所需的驱动程序库,即JDBC驱动。这种驱动程序通常是一个Java Archive(JAR)文件,包含了实现JDBC接口的具体类,这些类能够与特定的...
#### 二、JDBC 连接数据库的基本步骤 1. **加载驱动程序**:通过 `Class.forName()` 方法来加载相应的 JDBC 驱动。 2. **建立连接**:利用 DriverManager 的 `getConnection()` 方法建立到数据库的连接。 3. **执行...
通过JDBC,开发者可以编写与数据库无关的代码,因为JDBC提供了统一的API来执行SQL语句、管理数据库连接和处理结果集。 Oracle JDBC驱动分为多个版本,如ojdbc14、ojdbc6、ojdbc7等,每个版本对应不同的Java和Oracle...
MHT文件是一种单个文件存储网页的格式,可能包含了如何使用JDBC连接数据库的网页教程,包括HTML代码示例和步骤解释。 5. **常用数据库JDBC连接写法.txt** 这个文本文件很可能包含了常用的JDBC连接代码片段,例如...
2. **JDBC(Java Database Connectivity)**:JDBC是Java中用来连接数据库的标准API,它允许Java应用程序与各种类型的数据库进行交互。实验要求你掌握JDBC的基本操作,包括连接、执行SQL语句和处理结果集。 3. **...
本文将详细解释如何使用JDBC连接MySQL数据库,以及如何创建一个工具类来简化数据库连接的管理。 首先,我们需要引入MySQL的JDBC驱动,这通常是一个jar文件,如`mysql-connector-java-5.1.20-bin.jar`。这个驱动包...