`
thinkgem
  • 浏览: 586064 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

JDBC 连接数据库处理类

    博客分类:
  • Java
阅读更多
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连接数据库步骤及代码

    ### JDBC连接数据库步骤详解 #### 一、简介 在Java开发中,经常需要与数据库进行交互,例如查询数据、更新数据等操作。为了方便开发者进行这些操作,Sun公司推出了一套标准的Java访问数据库的API——Java Database...

    jdbc连接数据库步骤

    对于初学者来说,理解JDBC连接数据库的基本步骤至关重要。以下是详细解释这些步骤的知识点: 1. 加载JDBC驱动程序: 在连接数据库之前,首先需要在Java虚拟机(JVM)中加载对应的数据库驱动程序。这一步是通过使用...

    jdbc连接数据库类

    ### JDBC连接数据库类知识点解析 #### 一、JDBC简介 Java Database Connectivity (JDBC) 是 Java 中一种用于执行 SQL 语句的标准 API,它由一组用 Java 编程语言编写的类和接口组成。JDBC 可为多种关系型数据库...

    JDBC连接数据库各种数据库参数大全

    ### JDBC连接数据库各种数据库参数详解 #### 一、Oracle8/8i/9i数据库(thin模式) 在Java中通过JDBC访问Oracle数据库时,通常采用thin驱动方式。thin驱动是一种纯Java驱动,无需依赖任何非Java代码即可完成与...

    jdbc连接数据库事务工厂模式

    在"jdbc连接数据库事务工厂模式"中,我们主要关注三个方面:JDBC、事务管理和工厂模式。 首先,JDBC提供了与数据库交互的基本步骤,包括加载驱动、建立连接、执行SQL语句和关闭连接。例如,使用`Class.forName()`...

    jdbc连接数据库方法大全

    总的来说,了解和掌握这些JDBC连接数据库的方法是Java开发人员必备的技能之一,它们可以帮助你有效地与各种数据库进行交互,实现数据的存储和检索。在实际开发中,根据项目需求和团队偏好选择最适合的方法,并确保...

    JDBC连接数据库代码大全

    1. `DriverManager`:它是管理JDBC驱动的服务类,主要用于加载和注册驱动,以及建立到数据库的连接。`getConnection()`方法是获取数据库连接的关键。 2. `Connection`:代表一个到数据库的物理连接,提供了创建...

    jdbc连接数据库jdbc连接数据库

    "JDBC 连接数据库" JDBC(Java Database Connectivity)是一种Java API,用于连接数据库,并执行 SQL 语句以访问和操作数据库中的数据。JDBC API 由java.sql包提供,包括了 Connection、Statement、ResultSet 等...

    java实例jdbc连接数据库大全.doc

    JDBC连接数据库的基本步骤包括: 1. 加载数据库驱动:`Class.forName(driverClassName);` 2. 创建数据库连接:`Connection conn = DriverManager.getConnection(url, username, password);` 3. 获取Statement或...

    完整java开发中JDBC连接数据库代码和步骤

    ### 完整Java开发中JDBC连接数据库代码和步骤 #### 一、概述 在Java开发过程中,通过Java Database Connectivity (JDBC) 连接数据库是非常常见的一种操作方式。JDBC提供了一组标准的API,使得Java应用程序可以访问...

    常用的jdbc连接数据库架包jar

    "常用的jdbc连接数据库架包jar"指的是包含不同数据库驱动的Java类库,这些驱动使得Java程序能够通过JDBC API与Oracle、DB2、SQLServer和MySQL等主流数据库建立连接。下面我们将详细探讨这些数据库以及它们对应的JDBC...

    java使用jdbc将数据库数据导出到csv文件.pdf

    Java 是一种广泛使用的编程语言,它提供了多种方式来处理数据库数据,而 JDBC(Java Database Connectivity)是 Java 中连接数据库的标准 API 之一。将数据库数据导出到 CSV 文件是一种常见的数据交换格式,它可以被...

    java JDBC连接数据库代码大全

    ### Java JDBC连接数据库代码大全详解 #### 一、JDBC基础概述 JDBC(Java Database Connectivity)是一种标准的Java API,允许Java程序连接并操作各种类型的数据库。它为开发人员提供了一种统一的方式,以便使用...

    jdbc连接数据库的jar

    标题中的“jdbc连接数据库的jar”指的是用于在Java程序中通过JDBC API连接数据库所需的驱动程序库,即JDBC驱动。这种驱动程序通常是一个Java Archive(JAR)文件,包含了实现JDBC接口的具体类,这些类能够与特定的...

    JDBC不同数据库连接

    #### 二、JDBC 连接数据库的基本步骤 1. **加载驱动程序**:通过 `Class.forName()` 方法来加载相应的 JDBC 驱动。 2. **建立连接**:利用 DriverManager 的 `getConnection()` 方法建立到数据库的连接。 3. **执行...

    java使用jdbc连接oracle数据库

    通过JDBC,开发者可以编写与数据库无关的代码,因为JDBC提供了统一的API来执行SQL语句、管理数据库连接和处理结果集。 Oracle JDBC驱动分为多个版本,如ojdbc14、ojdbc6、ojdbc7等,每个版本对应不同的Java和Oracle...

    jdbc连接各种数据库方式

    MHT文件是一种单个文件存储网页的格式,可能包含了如何使用JDBC连接数据库的网页教程,包括HTML代码示例和步骤解释。 5. **常用数据库JDBC连接写法.txt** 这个文本文件很可能包含了常用的JDBC连接代码片段,例如...

    实验3 JDBC操作数据库3

    2. **JDBC(Java Database Connectivity)**:JDBC是Java中用来连接数据库的标准API,它允许Java应用程序与各种类型的数据库进行交互。实验要求你掌握JDBC的基本操作,包括连接、执行SQL语句和处理结果集。 3. **...

    java使用jdbc连接数据库工具类和jdbc连接mysql数据示例

    本文将详细解释如何使用JDBC连接MySQL数据库,以及如何创建一个工具类来简化数据库连接的管理。 首先,我们需要引入MySQL的JDBC驱动,这通常是一个jar文件,如`mysql-connector-java-5.1.20-bin.jar`。这个驱动包...

Global site tag (gtag.js) - Google Analytics