码迷,mamicode.com
首页 > 数据库 > 详细

数据库操作通用类

时间:2014-05-28 23:06:02      阅读:844      评论:0      收藏:0      [点我收藏+]

标签:style   c   class   code   java   ext   

DataBase.java
 
说明:
1. 此类包含对数据库的查询,删除,更新操作.
    2. 可以实现对大文本对象的增删改.
    3. 利用自建的数据库连接池类, 得到数据库连接.
    4. 可以利用Tomcat 自带的连接池, 得到数据库连接
 
变量:
    1. 数据库连接
    变量名     : conn
    应用范围   : protect
    变量类型   : Connection 数据库连接
    初始值     : null
    是否Static :  否
    2. 声明语句
    变量名     : stm
    应用范围   : protect
    变量类型   : Statement
    初始值     : null
    是否Static : 否
    3. 预声明语句
    变量名     : pstm
    应用范围   : protect
    变量类型   : PreparedStatement
    初始值     : null
    是否Static : 否
    4. 结果集
    变量名     : rs
    应用范围   : protect
    变量类型   : ResultSet
    初始值     : null
    是否Static : 否
    5. 标识是否取得连接
    变量名     : connected
    应用范围   : protect
    变量类型   : boolean
    初始值     : false
    是否Static : 否
方法简介
序号
方法名
参数
返回值
功能
1
DataBase Void 构造函数
2
showConnNum Void 在控件台显示当前连接池情况,连接数,总连接数等信息
3
getConnPool Void
取得Tomcat连接池, 在server.xml 中配置的连接池
从连接池中取得连接
4
getMyConnPool Void
创建连接池, 并取得连接
从由连接池类DBConnectionManager 创建的连接池
5
releaseMyConnPool Boolean 释放我的连接池, 即由DBConnectionManager 创建的连接池
6
createConn
String drv
String url
String usr
String pwd
Void
生成Oracle SQLServer 等的连接
不使用连接池
7
createConn
String drv
String url
Void 生成Access连接
8
realaseConn Void 释放的是当前类中, 通过各种方法取得的连接
9
QuerySql String sql ResultSet 执行查询sql 语句, 并返回执行结果
10
ExceuteSql String sql Int 执行删除sql 语句, 自动提交, 成功返回0,失败返回错误代码
11
getOnePage
String sql
int page
int records
Vector
执行查询sql 语句
将页号为page , 每页显示records条记录的结果集,以键/值对应的形式存入Hashtable 并存入Vector
12
getOnePage1
String sql
int page
int records
Boolean b
Vector
执行查询sql 语句
将页号为page , 每页显示records条记录的结果集,以键/值对应的形式存入Hashtable 并存入Vector
13
getOnePage
String sql
int page
int records boolean useDic
Vector
执行查询sql 语句
将页号为page , 每页显示records条记录的结果集,以键/值对应的形式存入Hashtable 并存入Vector
如果useDic 为true , 从配置表中取每面显示记录数
14
getData String sql Vector
执行查询sql 语句
将结果以 列/值对应的存入Hashtabl中, 存入Vector
15
QueryClob
String table String wherestr
String clobfield
String
查询 Clob型字段的值
将Clob结果转换为String , 并返回String
16
UpdateClob
String table String wherestr
String clobfield
String clobvalue
Int
将clobvalue 转换为clob
用转换后的clob 更新clobfield字段
成功返回0 , 失败返回错误代码
17
QueryBlob String table String wherestr String blobfield String
查询 Blob 型字段的值
将Blob 结果转换为String , 并返回String
18
UpdateBlob
String table String wherestr
String blobfield String blobvalue
Int
将blobvalue 转换为blob
用转换后的blob 更新blobfield字段
成功返回0 , 失败返回错误代码
19
QueryBLOB_JNDI String table String wherestr String blobfield String 查询blob 型字段, 返回String
20
UpdateBLOB_JNDI String table String wherestr String blobfield String blobvalue Int 更新blob 型辽段
21
clobInsert
String sql String table String wherestr
String clobfield String infile
Int
往数据库中插入一个新的CLOB对象
sql 是一条插入语句
22
clobModify
String table String wherestr String clobfield
String infile
int 修改CLOB对象(是在原CLOB对象基础上进行覆盖式的修改)
23
clobReplace
String table String wherestr String clobfield
String infile
Int 替换CLOB对象(将原CLOB对象清除,换成一个全新的CLOB对象)
24
blobInsert
String sql String table String wherestr
String blobfield
String infile
int 向数据库中插入一个新的BLOB对象
25
blobModify
String table String wherestr String blobfield
            String infile
int 修改BLOB对象(是在原BLOB对象基础上进行覆盖式的修改)
26
blobReplace
String table String wherestr String blobfield
String infile
int 替换BLOB对象(将原BLOB对象清除,换成一个全新的CLOB对象)
27
getDataBaseInfo   Hashtable 数据库信息(类型,版本,驱动等) 使用DatabaseMetaData类
28
getTableList   Vector 使用DatabaseMetaData类的getTables
29
getTableStruct String table Vector 数据表的结构(字段名,类型,是否为空,精度等) DatabaseMetaData类
30
getResultSetData ResultSet rs Vector 列/值 存入Hashtable, 将Hashtable 存入Vector中
31
prepareStatement String sql Void 用sql 创建表达, 为类变量pstm 赋值
32
executeQuery void 执行查询, 执行变量pstm中设置的表达, 返回结果集赋给类变量rs
33
next boolean 调用rs.next(), 转向下一条记录
34
getObject String field String sqlType String 取得数据并根据数据类型转化为字符串
35
setObject
int index
String value
String sqlType
Void
根据数据类型保存到数据库
根据将参数sqlType 将value 转换为相应的类型
调用 psmt.setObject(index, 转换后的value)
36
executeUpdate Void 调用 psmt.executeUpdate() , 执行数据更新
37
closePstm Void 调用 psmt.close(), 关闭表达对象
38
closeRs Void 调用 rs.close(), 关闭结果集
39
setBinaryStream int index InputStream is int t Void 调用 pstm.setBinaryStream(index, is, t);
40
setAsciiStream int index InputStream is int t Void 调用 pstm.setBinaryStream(index, is, t);
41
getAutoCommit   boolean 调用conn.getAutoCommit(); 判断是否自动提交
42
closeAutoCommit   Void 调用 conn.setAutoCommit(false);
43
commit   Void 调用 conn.commit()
44
Rollback   Void 调用 conn.rollback()
45
openAutoCommit   Void 调用 conn.setAutoCommit(true)
46
createStatement   Void 调用 stm = conn.createStatement();
47
clearBatch   void 调用 stm.clearBatch();
48
addBatch   Void 调用 stm.addBatch(sql);
49
executeBatch   Int[] 调用 stm.executeBatch();
50
closeStm   Void 调用 stm.close()
 
方法详解
 
package oa.main;
 
import java.util.*;
import java.sql.*;
import java.io.*;
import javax.naming.*;
/**
 * 此文件为数据库的基本操作处理类
 * 
 * @author zhoumeng
 * @version 1.0
 */

public class DataBase extends Object
{
    Connection        conn      = null; // 连接
    Statement          stm       = null; //
    PreparedStatement pstm      = null; //
 
    ResultSet         rs                = null; // 结果集
    boolean           connected = false;// 是否连接
    /** 构造函数 */
    public DataBase()
    {
    }

    /**
     *  在控制台显示连接池情况
     * 
     * */

    public void showConnNUM()
    {
        /**---------------------------------------------------------------------------------------------------------------**/
        // 字符操作类
        DealString ds = new DealString();
        **---------------------------------------------------------------------------------------------------------------**/
        // 连接池信息
        int curnum        = DBConnectionManager
             .getCurConns(Configuration.ConnectionPoolName);  
// 现有连接数 
        int sumnum      = DBConnectionManager
             .getSumConns(Configuration.ConnectionPoolName); 
// 连接总数
        int maxnum      = DBConnectionManager
             .getMaxConns(Configuration.ConnectionPoolName);  
// 池中连接
        int isNullPool  = DBConnectionManager
             .getNullPool(Configuration.ConnectionPoolName);     
 // 池中空连接数
        int isOracleErr = DBConnectionManager
             .getOracleErr(Configuration.ConnectionPoolName);   
// 错误连接数
        **---------------------------------------------------------------------------------------------------------------**/       
        int jvmcount    = ParentBean.count;
        float jvm1        = (floatRuntime.getRuntime().totalMemory() / 1024 / 1024;
        float jvm2        = (floatRuntime.getRuntime().maxMemory() / 1024 / 1024;
        **---------------------------------------------------------------------------------------------------------------**/
        System.out.print("/r"  + ds.getDateTime().substring(11, 19)             + 
                "程序中调用连接累计数> "   + ds.toLengthStrRight(sumnum  + "", 10)      + 
                "当前非空闲的连接总数> "   + ds.toLengthStrRight(curnum    + "", 10)      + 
                "连接数(空闲+非空闲)  > "    + ds.toLengthStrRight(maxnum   + "", 10)      + 
                "超出连接数限制的请求> "   + ds.toLengthStrRight(isNullPool+ "", 10)      + 
                "DB未响应> "   + ds.toLengthStrRight(isOracleErr + "", 10) + 
                "JVM垃圾回收> "+ jvmcount + "  ");
    }
    /** 
     * 
     * 取得Tomcat连接池, 在server.xml 中配置的连接池
     * 从连接池中取得连接
     * */

    public void getConnPool()
    {
        try {
            /**---------------------------------------------------------------------------------------------------------------**/
            if (connected// 已经连接
            {
                throw new SQLException("数据库已连接,无须重连!");
            }
            /**---------------------------------------------------------------------------------------------------------------**/
            // 上下文环境
            Context initCtx = new InitialContext();
            Context ctx       = (ContextinitCtx.lookup("java:comp/env");
            /**---------------------------------------------------------------------------------------------------------------**/
            /** 获取连接池对象 */
            Object obj = (Objectctx.lookup("jdbc/OracleDB");
            /**---------------------------------------------------------------------------------------------------------------**/
            /** 类型转换 */
            javax.sql.DataSource ds = (javax.sql.DataSourceobj;
            /**---------------------------------------------------------------------------------------------------------------**/
            // 从连接池中得到连接
            conn = ds.getConnection();
            /**---------------------------------------------------------------------------------------------------------------**/
            // 标识已得到连接池, 并得到连接
            connected = true;
            /**---------------------------------------------------------------------------------------------------------------**/
            // 控件台输出连接情况
            showConnNUM();
        } catch (NamingException e) {
            System.out.println("从数据池取得数据库连接时出错;/r/n错误为:" + e);
        } catch (SQLException e) {
            System.out.println("从数据池取得数据库连接时出错;/r/n错误为:" + e);
        }
    }

    /** 
     * 创建连接池, 并取得连接
     * 从由连接池类DBConnectionManager 创建的连接池 
     * 
     * */
    public boolean getMyConnPool()
    {
        /**---------------------------------------------------------------------------------------------------------------**/
        // 创建连接池实例, 并取得连接
        conn = Configuration.connMgr
                .getConnection(Configuration.ConnectionPoolName);
        /**---------------------------------------------------------------------------------------------------------------**/
        // 显示连接池情况
        showConnNUM();
        /**---------------------------------------------------------------------------------------------------------------**/
        // 判断方法是否执行成功, 连接为空返回false , 连接不为空返回true
        if (conn == null)
        {
            return false;
        } else {
            return true;
        }
    }

    /** 
     * 释放我的连接池中的连接
     * 通过连接池管理类DBConnectionManager 生成的连接
     * */

    public boolean releaseMyConnPool()
    {
        /**---------------------------------------------------------------------------------------------------------------**/
        // 判断是否已连接
        boolean b;
        if (conn != null)
        {
            b = true;
        } else {
            b = false;
        }
        /**---------------------------------------------------------------------------------------------------------------**/
        // 调用DBConnectionManager 中的freeConnection 方法, 释放指定连接
        // 池中的指定连接

        Configuration.connMgr
         .freeConnection(Configuration.ConnectionPoolNameconn);
        /**---------------------------------------------------------------------------------------------------------------**/       
        // 连接置为空
        conn = null;
        /**---------------------------------------------------------------------------------------------------------------**/
        // 控件台显示连接池情况
        showConnNUM();
        
        return b;
    }

    /** 
     * 生成Oracle SQLServer 等的连接 
     * 不使用连接池
     * */
    public void createConn(String drvString urlString usrString pwd)
    {
         try{
             /**---------------------------------------------------------------------------------------------------------------**/
             if (connected)
             {
                 throw new SQLException("数据库已连接,无须重连!");
             }
             /**---------------------------------------------------------------------------------------------------------------**/
             // JDBC 或 JDBC-ODBC 连接, 依据url而定
             Class.forName(drv).newInstance();
             conn = DriverManager.getConnection(urlusrpwd);
             /**---------------------------------------------------------------------------------------------------------------**/
             connected = true;
             /**---------------------------------------------------------------------------------------------------------------**/
             // 控件台显示连接池情况 
             showConnNUM();
            
         } catch (ClassNotFoundException ec){
            System.out.println("从自身建立数据库连接时出错;/r/n错误为:" + ec);
         } catch (SQLException e){
            System.out.println("从自身建立数据库连接时出错;/r/n错误为:" + e);
        } catch (Exception et){
            System.out.println("从自身建立数据库连接时出错;/r/n错误为:" + et);
        }
    }

    /** 
     * 生成Access连接 
     * */

    public void createConn(String drvString url)
    {
        try
{
            /**---------------------------------------------------------------------------------------------------------------**/
            if (connected)
            {
                throw new Exception("数据库已连接,无须重连!");
            }
            Class.forName(drv).newInstance();
            conn = DriverManager.getConnection(url);
            /**---------------------------------------------------------------------------------------------------------------**/
            connected = true;
            /**---------------------------------------------------------------------------------------------------------------**/
            /*控制台显示连接池情况 */
            showConnNUM();
        } catch (ClassNotFoundException ec)
{
            System.out.println("从自身建立数据库连接时出错;/r/n错误为:" + ec);
        } catch (SQLException e){
            System.out.println("从自身建立数据库连接时出错;/r/n错误为:" + e);
        } catch (Exception et){
            System.out.println("从自身建立数据库连接时出错;/r/n错误为:" + et);
        }
    }

    /** 
     * 释放数据库连接 
     * */

    public void releaseConn()
    {
        try{
            /**---------------------------------------------------------------------------------------------------------------**/
            if (!connected)
            {
                throw new SQLException("数据库未连接!");
            }
            if (conn != null)
            {
                /***--------------------------------------------------------------------------------------------------------***/
                // 关闭连接
                conn.close();
                /***--------------------------------------------------------------------------------------------------------***/
                // 标识未连接
                connected = false;
                /***--------------------------------------------------------------------------------------------------------***/
                // 控件台显示连接池情况
                showConnNUM();
            }
        } catch (SQLException e){
            System.out.println("关闭数据库连接时出错;/r/n错误为:" + e);
        }
    }


    /** 
     * 查询记录 
     * @param sql String 查询SQL语句
     *
     * @return ResultSet 返回查询结果集
     * */

    public ResultSet QuerySQL(String sql)
    {
        /**---------------------------------------------------------------------------------------------------------------**/
        // 定义结果集
        ResultSet rs = null;
        /**---------------------------------------------------------------------------------------------------------------**/
        try{
            /***---------------------------------------------------------------------------------------------------------***/
            // 执行SQL 语句, 返回结果集
            pstm = conn.prepareStatement(sql);
            rs   = pstm.executeQuery();
        } catch (SQLException sqle)
{
            System.out.println("执行DataBase::QuerySQL(String)调用SQL语句 " + sql
                    + " 时出错;/r/n错误为:" + sqle);
            if (pstm != null)
            {
                try{
                    pstm.close();
                } catch (Exception e){
                    System.out
                            .println
("执行DataBase::QuerySQL(String)试图关闭错误的声明时出错;/r/n错误为:"
                                    + e);
                }
            }
        }
        return rs;
    }

    /** 
     * 执行增删改的语句
     * */
    public int ExecuteSQL(String sql)
    {
        try{
            /**---------------------------------------------------------------------------------------------------------------**/
            pstm = conn.prepareStatement(sql);
            pstm.executeUpdate();
            /**---------------------------------------------------------------------------------------------------------------**/
            conn.commit();
        } catch (SQLException sqle){
            //System.out.println("执行DataBase::ExecuteSQL(String)调用SQL语句 "+sql+"
            // 时出错;/r/n错误为:"+sqle);
            return sqle.getErrorCode();
        } finally{
            try{
                pstm.close();
            } catch (SQLException sqle){
                System.out.println("执行DataBase::ExecuteSQL(String)调用SQL语句 "
                        + sql + " 时出错;/r/n错误为:" + sqle);
            }
        }
        return 0;
    }

    /*
     * 在vector 中 第一项为总页数 第项...个为Hashtable存放列/值
     *  @param1 sql String SQL 语句
     *  @param2 page int 页号
     *  @param3 records int 一页显示条数
     * 
     *  @return vector 指定页显示数据矩阵
     * */

    public Vector getOnePage(String sqlint pageint records)
    {
        return getOnePage(sqlpagerecordstrue);
    }

    /*
     *  在vector 中 第一项为记录数,第二项总页数 第三项后为Hashtable存放列/值
     *  @param1 sql String SQL 语句
     *  @param2 page int 页号
     *  @param3 records int 一页显示条数
     *  @param4 boolean b 
     * 
     *  @return vector 指定页显示数据矩阵
     * */

    public Vector getOnePage(String sqlint pageint recordsboolean b)
    {
        Vector vect = new Vector();
        try{
            pstm = conn.prepareStatement(sql);
            rs = pstm.executeQuery();
            /**---------------------------------------------------------------------------------------------------------------**/
            // 记录总数
            int rows = 0;
          
            while (rs.next())
            {
                rows++;
            }
            /**---------------------------------------------------------------------------------------------------------------**/
            // 根据每页显示记录数, 得到总显示页数
            int sum = rows / records;
            if (rows % records != 0 || rows == 0)
            {
                sum++;
            }
            /**---------------------------------------------------------------------------------------------------------------**/
            vect.add("" + rows); // 总记录条数
            vect.add("" + sum);  // 总页数
            /**---------------------------------------------------------------------------------------------------------------**/
            int temp = rows// 记录总记录数
            /**---------------------------------------------------------------------------------------------------------------**/
            // 移动数据指针, 到当前页所要显示的记录位置
            pstm.close();
            //rs.close();
            /***------------------------------------------------------------------------------------------------------------***/
            pstm = conn.prepareStatement(sql);
            rs = pstm.executeQuery();
            /***------------------------------------------------------------------------------------------------------------***/
            // 把指针定位到当前页第一条记录位置
            rows = (page - 1) * records
            rows++ ; // 当前页, 所要显示的记录中, 首条记录的上一条记录的位置

            while (rows > 0)
            {
                rs.next(); // 数据指针, 移到需显示当前页记录的位置
                rows--;
            }
            /**---------------------------------------------------------------------------------------------------------------**/
            // 字符操作类
            DealString ds = new DealString();
            /**---------------------------------------------------------------------------------------------------------------**/
            //查询当前页
            int j = 0; // 记录本页显示的记录数, 递增
            do{
                /***---------------------------------------------------------------------------------------------------------***/
                // 如遇到以下情况, 退出循环
                // 结果集为空 , 已显示记录数等于每页显示的记录数 
                // 总记录数为0 , 需要显示的页号大于总页数

                if (rs == null || j == records || temp == 0 || page > sum)
                {
                    break;
                }
                /***---------------------------------------------------------------------------------------------------------***/
                j++; // 显示的记录条数, 如果等于设定的每页显示记录数, 将退出本循环
                /***---------------------------------------------------------------------------------------------------------***/
                // 列数
                ResultSetMetaData rsmd = rs.getMetaData();
                int cols = rsmd.getColumnCount();
                /***---------------------------------------------------------------------------------------------------------***/
                Hashtable hash = new Hashtable();
                for (int i = 1; i <= colsi++)
                {
                    // 列名
                    String field = ds.toString(rsmd.getColumnName(i));
                    // 列名对应的值
                    String value = ds.toString(rs.getString(i));
                    // 列名与列值存入哈希表
                    hash.put(fieldvalue);
                }
                /***---------------------------------------------------------------------------------------------------------***/
                // 哈希表存入Vector
                vect.add(hash);
            } while (rs.next());
        } catch (SQLException sqle){
            System.out.println("执行SQL语句 " + sql + " 分页至第 " + page
                    + " 页时出错;错误为:" + sqle);
        } finally{
            closeRs();
            closePstm();
        }
        return vect;
    }

    /*
     *  @param1 sql String SQL 语句
     *  @param2 page int 页号
     *  @param3 records int 一页显示条数
     *  @param4 useDic boolean 是否使用配置表中设定的每页显示记录数
     *  @return vector 指定页显示数据矩阵
     *   在vector 中 第一项为总页数 第项...个为Hashtable存放列/值
     * 
     *  分页是返回一页的数据矩阵
     */

    public Vector getOnePage1(String sqlint pageint recordsboolean useDic)
    {
        /**---------------------------------------------------------------------------------------------------------------**/
        Vector vect = new Vector();
        /**---------------------------------------------------------------------------------------------------------------**/
        int zdrecords = records;
        /**---------------------------------------------------------------------------------------------------------------**/
        try{
            if (useDic)
            {
                /***------------------------------------------------------------------------------------------------------***/
                // 从配置表中读取每页显示记录数
                String strsql = "select XMMC from CODE_ZDB where trim(ZDMC)=‘每页显示记录条数‘";
                pstm = conn.prepareStatement(strsql);
                rs = pstm.executeQuery();
                /***------------------------------------------------------------------------------------------------------***/
                if (rs.next())
                {
                    zdrecords = Integer.parseInt(rs.getString("XMMC"));
                }
                /***------------------------------------------------------------------------------------------------------***/
                rs.close();
                pstm.close();
            }
            
            //查询总页数
            // pstm.clearBatch();
            pstm = conn.prepareStatement(sql,
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE);
            rs = pstm.executeQuery();
            /***---------------------------------------------------------------------------------------------------------***/
            // 总记录数
            int rows = 0;
            while (rs.next())
            {
                rows++;
            }
            int sum = rows / zdrecords;
            if (rows % zdrecords != 0 || rows == 0)
            {
                sum++;   
            }
            /***---------------------------------------------------------------------------------------------------------***/
            vect.add("" + sum); // 添加总页数到Vector 中
            /***---------------------------------------------------------------------------------------------------------***/
            rs.close();
            pstm.close();
            /***---------------------------------------------------------------------------------------------------------***/
            //  得到结果集, 以可移动指针的模式
            // pstm.clearBatch();
            pstm = conn.prepareStatement(sql,
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE);
            rs = pstm.executeQuery();
            // 计算显示页的首记录的位置
            rows = (page - 1) * zdrecords;
            /***---------------------------------------------------------------------------------------------------------***/
            // 移动指针位置到首记录
            rs.absolute(rows + 1);
            rs.previous();
            /***---------------------------------------------------------------------------------------------------------***/
            DealString ds = new DealString();
            /***---------------------------------------------------------------------------------------------------------***/
            // 查询当前页
            int j = 0;
            while (rs.next())
            {
                /****---------------------------------------------------------------------------------------------------****/
                if (j == zdrecords)
                {
                    break;
                }
                j++; // 记录当前页显示的记录数, 此值递增, 如果等于每页显示的记录数时, 退出
                /****---------------------------------------------------------------------------------------------------****/
                ResultSetMetaData rsmd = rs.getMetaData();
                int cols = rsmd.getColumnCount();
                /****---------------------------------------------------------------------------------------------------****/
                Hashtable hash = new Hashtable();
                for (int = 1; i <= colsi++)
                {
                    String field   = ds.toString(rsmd.getColumnName(i));
                    String value = ds.toString(rs.getString(i));
                    hash.put(fieldvalue);
                }
                /****---------------------------------------------------------------------------------------------------****/
                vect.add(hash);
            }
        } catch (SQLException sqle){
            System.out.println("DataBase::getOnePage(String,int,int)执行SQL语句 "
                    + sql + " 分页至第 " + page + " 页时出错;错误为:" + sqle);
        } finally{
            if (rs != null)
            {
                try{
                    rs.close();
                } catch (SQLException e){
                    System.out
                            .println
("DataBase::getOnePage(String,int,int)调用SQL语句 "
                                    + sql + " 时出错;/r/n错误为:" + e);
                }
            }
            if (pstm != null)
            {
                try{
                    pstm.close();
                } catch (SQLException e){
                    System.out
                            .println
("DataBase::getOnePage(String,int,int)调用SQL语句 "
                                    + sql + " 时出错;/r/n错误为:" + e);
                }
            }
        }
        return vect;
    }

    /*
     *  @param1 sql String SQL语句
     *  
     *  @return Vector 存储对象为Hashtabl, 语句结果集对应的矩阵 
     * 
     *  返回SQL 语句执行后所得结果集, 存储为Hashtable 形式的vector 对象
     * */

    public Vector getData(String sql)
    {
        Vector vect = new Vector();
        try{
            /**---------------------------------------------------------------------------------------------------------------**/
            pstm = conn.prepareStatement(sql);
            rs   = pstm.executeQuery();
            /**---------------------------------------------------------------------------------------------------------------**/
            DealString ds = new DealString();
            /**---------------------------------------------------------------------------------------------------------------**/
            ResultSetMetaData rsmd = rs.getMetaData();
            int cols = rsmd.getColumnCount();
            /**---------------------------------------------------------------------------------------------------------------**/
            while (rs.next())
            {
                Hashtable hash = new Hashtable();
                for (int = 1; i <= colsi++)
                {
                    String field   = ds.toString(rsmd.getColumnName(i));
                    String value = ds.toString(rs.getString(i));
                    hash.put(fieldvalue);
                }
                /***--------------------------------------------------------------------------------------------------------***/
                vect.add(hash);
                /***--------------------------------------------------------------------------------------------------------***/
            }
        } catch (SQLException sqle){
            System.out.println("执行DataBase::getData(String)执行SQL语句 " + sql
                    + " 时出错;错误为:" + sqle);
        } finally{
            if (rs != null)
            {
                try{
                    rs.close();
                } catch (SQLException e){
                    System.out
                            .println
("执行DataBase::getData(String)试图释放rs时出错;/r/n错误为:"
                                    + e);
                }
            }
            if (pstm != null)
            {
                try{
                    pstm.close();
                } catch (SQLException e){
                    System.out
                            .println
("执行DataBase::getData(String)试图释放pstm时出错;/r/n错误为:"
                                    + e);
                }
            }
        }
        return vect;
    }
    /** 
     * 查询BLOB类型值 
     * 
     * @param1 table String 表名
     * @param2 wherestr String 条件
     * @param3 blobfield String blob类型字段
     * 
     * @return String blob转换成string 返回
     * */

    public String QueryBLOB(String tableString wherestrString blobfield)
    {
        String out = "";
        try{
            String sqlCommand = "select " + blobfield + " from " + table;
            if (!wherestr.equals(""))
            {
                sqlCommand = sqlCommand + " where " + wherestr;
            }
            pstm = conn.prepareStatement(sqlCommand);
            rs = pstm.executeQuery();
            if (rs.next())
            {
                oracle.sql.BLOB blob = (oracle.sql.BLOBrs.getBlob(blobfield);
                if (blob != null)
                {
                    InputStream is = blob.getBinaryStream();
                    InputStreamReader isw = new InputStreamReader(is);
                    BufferedReader br = new BufferedReader(isw);
                    String br.readLine();
                    while (!= null)
                    {
                        out += s;
                        s = br.readLine();
                    }
                }
            }
            out = (new DealString()).Replace(out, "/"", "/"/"");
        } catch (SQLException sqle) {
            System.out.println("调用MyDataBase.QueryBLOB()函数错误:/r/n" + sqle);
        } catch (IOException iosql){
            System.out.println("调用MyDataBase.QueryBLOB()函数错误:/r/n" + iosql);
        } finally{
            if (rs != null)
            {
                try{
                    rs.close();
                } catch (SQLException e){
                    System.out.println("试图释放rs时出错;/r/n错误为:" + e);
                }
            }
            if (pstm != null)
            {
                try{
                    pstm.close();
                } catch (SQLException e){
                    System.out.println("试图释放pstm时出错;/r/n错误为:" + e);
                }
            }
        }
        return out;
    }

    /** 
     * 修改BLOB类型值 
     * @param1 table String 表名
     * @param2 wherestr String 条件
     * @param3 blobfield String blob 字段名
     * @param4 blobvalue String string形式的blob 值
     * 
     * @return int 成功返回0, 失败返回错误代码
     * */

    public int UpdateBLOB(String tableString wherestrString blobfieldString blobvalue)
    {
        try{
            /**---------------------------------------------------------------------------------------------------------------**/
            /* 设定不自动提交 */
            boolean defaultCommit = conn.getAutoCommit();
            conn.setAutoCommit(false);
            /**---------------------------------------------------------------------------------------------------------------**/
            /* 清空原BLOB对象 */
            String sqlCommand = "UPDATE " + table + " set " + blobfield + "=EMPTY_BLOB()";
            if (!wherestr.equals(""))
            {
                sqlCommand += " where " + wherestr;
            }
            pstm = conn.prepareStatement(sqlCommand);
            pstm.executeUpdate();
            /**---------------------------------------------------------------------------------------------------------------**/
            /* 查询BLOB对象并锁定 */
            sqlCommand = "select " + blobfield + " from " + table;
            if (!wherestr.equals(""))
            {
                sqlCommand += " where " + wherestr;
            }
            sqlCommand += " for update";
            pstm.clearBatch();
            pstm.addBatch(sqlCommand);
            rs = pstm.executeQuery();
            
            while (rs.next())
            {
                /***--------------------------------------------------------------------------------------------------------***/
                /* 获取此BLOB对象 */
                oracle.sql.BLOB blob = (oracle.sql.BLOBrs.getBlob(blobfield);
                BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
                byte b[] = blobvalue.getBytes();
                out.write(b,  0,  b.length);
            }
            /**-----------------------------------------------------------**/
            /* 正式提交 */
            conn.commit();
            conn.setAutoCommit(defaultCommit);
        } catch (SQLException sqle){
            System.out.println("调用MyDataBase.UpdateBLOB()函数错误:/r/n" + sqle);
            return sqle.getErrorCode();
        } catch (Exception e){
            System.out.println("调用MyDataBase.UpdateBLOB()出错:" + e);
        } finally{
            if (rs != null)
            {
                try{
                    rs.close();
                } catch (SQLException e){
                    System.out
                            .println
("调用MyDataBase.UpdateBLOB()试图释放rs时出错;/r/n错误为:"
                                    + e);
                }
            }
            if (pstm != null)
            {
                try{
                    pstm.close();
                } catch (SQLException e){
                    System.out
                            .println
("调用MyDataBase.UpdateBLOB()试图释放pstm时出错;/r/n错误为:"
                                    + e);
                }
            }
        }
        return 0;
    }
   
    /** 
     * 修改BLOB对象(是在原BLOB对象基础上进行覆盖式的修改) 
     * */
    public int blobModify(String tableString wherestrString blobfieldString infile)
    {
        try{
            /* 设定不自动提交 */
            boolean defaultCommit = conn.getAutoCommit();
            conn.setAutoCommit(false);
            /* 查询此BLOB对象并锁定 */
            String sqlCommand = "select " + blobfield + " from " + table;
            if (!wherestr.equals(""))
            {
                sqlCommand += " where " + wherestr;
            }
            sqlCommand += " for update ";
            pstm = conn.prepareStatement(sqlCommand);
            rs = pstm.executeQuery();
            while (rs.next())
            {
                /* 取出此BLOB对象 */
                oracle.sql.BLOB blob = (oracle.sql.BLOBrs.getBlob(blobfield);
                /* 进行覆盖式修改 */
                BufferedInputStream in = new BufferedInputStream(
                        new FileInputStream(infile));
                BufferedOutputStream out = new BufferedOutputStream(blob
                        .getBinaryOutputStream());
                int c;
                while ((c = in.read()) != -1)
                {
                    out.write(c);
                }
                in.close();
                out.close();
            }
            rs.close();
            pstm.close();
            /* 正式提交 */
            conn.commit();
            /* 恢复原提交状态 */
            conn.setAutoCommit(defaultCommit);
        } catch (SQLException sqle){
            System.out.println("调用DataBase.blobModify()函数错误:/r/n" + sqle);
            return sqle.getErrorCode();
        } catch (IOException iosql){
            System.out.println("调用DataBase.blobModify()函数错误:/r/n" + iosql);
        }
        return 0;
    }

    /** 
     * 替换BLOB对象(将原BLOB对象清除,换成一个全新的BLOB对象) 
     * */

    public int blobReplace(String tableString wherestrString blobfieldString infile)
    {
        int out = 0;
        try{
            /* 设定不自动提交 */
            boolean defaultCommit = conn.getAutoCommit();
            conn.setAutoCommit(false);
            /* 清空原BLOB对象 */
            String sqlCommand = "update " + table + " set " + blobfield + "=EMPTY_BLOB()";
            if (!sqlCommand.equals(""))
            {
                sqlCommand += " where " + wherestr;
            }
            pstm = conn.prepareStatement(sqlCommand);
            pstm.executeUpdate();
            pstm.close();
            /* 正式提交 */
            conn.commit();
            /* 恢复原提交状态 */
            conn.setAutoCommit(defaultCommit);
            // 执行修改
            out = blobModify(tablewherestrblobfieldinfile);
        } catch (SQLException sqle) {
            System.out.println("调用DataBase.blobReplace()函数错误:/r/n" + sqle);
            return sqle.getErrorCode();
        }
        return out;
    }

    /** 
     * 数据库信息 
     * */

    public Hashtable getDataBaseInfo()
    {
        Hashtable hash = new Hashtable();
        try{
            DatabaseMetaData dmd = conn.getMetaData();

            hash.put("1", dmd.getCatalogSeparator());
            hash.put("2", dmd.getCatalogTerm());
            hash.put("数据库类型名称", dmd.getDatabaseProductName());
            hash.put("数据库版本", dmd.getDatabaseProductVersion());
            hash.put("5", dmd.getDefaultTransactionIsolation() + "");
            hash.put("驱动版本(最大)", dmd.getDriverMajorVersion() + "");
            hash.put("驱动版本(最小)", dmd.getDriverMinorVersion() + "");
            hash.put("驱动名", dmd.getDriverName());
            hash.put("驱动版本", dmd.getDriverVersion());
            hash.put("10", dmd.getExtraNameCharacters());
            hash.put("11", dmd.getIdentifierQuoteString());
            hash.put("12", dmd.getMaxBinaryLiteralLength() + "");
            hash.put("最大行限定", dmd.getMaxRowSize() + "");
            hash.put("方案", dmd.getSchemaTerm());
            hash.put("日期函数", dmd.getTimeDateFunctions());
            hash.put("连接地址", dmd.getURL());
            hash.put("用户名", dmd.getUserName());
        } catch (SQLException sqle){
            System.out.println("调用DataBase.getDataBaseInfo()函数错误:/r/n" + sqle);
        } catch (AbstractMethodError e){
            System.out.println("调用DataBase.getDataBaseInfo()函数错误:/r/n" + e);
        }
        return hash;
    }

    /** 
     * 数据表列表 
     * */

    public Vector getTableList()
    {
        Vector vect new Vector();
        try{
            if (ParentBean.DBType.equals("Access"))
            {
                //ExecuteSQL("create table tab(name char)");
                //ExecuteSQL("insert into tab(name) select name from MsysObjects");
                rs = QuerySQL("select name as TABLE_NAME from tab");
                //rs = QuerySQL("SELECT MSysObjects.Name as TABLE_NAME
                //                               FROM MsysObjects WHERE (Left$([Name],1)<>‘~‘)
                //                               AND (Left$([Name],4) <> ‘Msys‘)
                //                               AND (MSysObjects.Type)=1
                //                               ORDER BY MSysObjects.Name");
            }else{
                DatabaseMetaData dmd = conn.getMetaData();
                String[] types = new String[1];
                types[0] = "TABLE";
                //types[1] = "VIEW"
                rs = dmd.getTables(nullParentBean.DBName.toUpperCase(), "%", types);
            }
            System.out.println("000" + getResultSetData(rs));
            while (rs.next())
            {
                vect.add((new DealString()).toString(rs.getString("TABLE_NAME")));
            }
            rs.close();
        } catch (SQLException sqle){
            System.out.println("调用DataBase.getTableList()函数错误:/r/n" + sqle + sqle.getErrorCode());
        } catch (AbstractMethodError e){
            System.out.println("调用DataBase.getTableList()函数错误:/r/n" + e);
        }
        return vect;
    }

    /** 
     * 数据表的结构 
     * */

    public Vector getTableStruct(String table)
    {
        Vector vect = new Vector();
        try{
            /*
             * rs = QuerySQL("select * from "+table);
             * ResultSetMetaData rmd =rs.getMetaData();
             * int cols = rmd.getColumnCount();
             * for(int i=1;i <=cols;i++)
             * {
             *     Hashtable hash = new Hashtable();
             *     //hash.put("目录名",rmd.getCatalogName(i));
             *     //hash.put("列返回值类型名",rmd.getColumnClassName(i));
             *     hash.put("列定义大小",rmd.getColumnDisplaySize(i)+"");
             *     //hash.put("列标签",rmd.getColumnLabel(i));
             *     hash.put("字段名",rmd.getColumnName(i));
             *     hash.put("列类型编号",rmd.getColumnType(i)+"");
             *     hash.put("列标准类型名",rmd.getColumnTypeName(i));
             *     hash.put("列精确度",rmd.getPrecision(i)+"");
             *     //hash.put("10",rmd.getScale(i)+"");
             *     //hash.put("11",rmd.getSchemaName(i));
             *     //hash.put("表名",rmd.getTableName(i));
             *     //hash.put("13",rmd.isAutoIncrement(i)+"");
             *     //hash.put("大小写敏感",rmd.isCaseSensitive(i)+"");
             *     //hash.put("是否为金额",rmd.isCurrency(i)+"");
             *     //hash.put("是否可写",rmd.isDefinitelyWritable(i)+"");
             *     hash.put("是否可为空",rmd.isNullable(i)+"");
             *     //hash.put("是否只读",rmd.isReadOnly(i)+"");
             *     //hash.put("是否可查询",rmd.isSearchable(i)+"");
             *     hash.put("是否数字",rmd.isSigned(i)+"");
             *     //hash.put("是否可写",rmd.isWritable(i)+""); vect.add(hash); }
             */
            DatabaseMetaData dmd = conn.getMetaData();
            rs = dmd.getColumns(null, ParentBean.DBName.toUpperCase(), table.toUpperCase(), null);
            rs = dmd.getColumns(null, "HG", "TEST", null);
            ResultSetMetaData rmd = rs.getMetaData();
            int cols = rmd.getColumnCount();
            System.out.println(cols + "gggHHH");
            System.out.println("ResultSet" + getResultSetData(rs));
            while (rs.next())
            {
                System.out.println("TTTTT");
                Hashtable hash = new Hashtable();
                hash.put("列定义大小", rs.getString("CHAR_OCTET_LENGTH") + "");
                String rs.getString("COLUMN_NAME");
                ResultSet r = QuerySQL("select " + f + " from " + table);
                ResultSetMetaData rm = r.getMetaData();
                hash.put("字段名", f + "");
                hash.put("列类型编号", rm.getColumnType(1) + "");
                hash.put("列标准类型名", rm.getColumnTypeName(1) + "");
                hash.put("是否可为空", rm.isNullable(1) + "");
                hash.put("是否数字", rm.isSigned(1) + "");
                hash.put("列定义大小", rm.getColumnDisplaySize(1) + "");
                hash.put("列精确度", rs.getString("NUM_PREC_RADIX") + "");
                r.close();
                Statement stst = r.getStatement();
                if (stst != null)
                    stst.close();
                vect.add(hash);
            }
            Statement stmt = rs.getStatement();
            rs.close();
            if (stmt != null)
                stmt.close();
            System.out.println("____" + vect);
        } catch (SQLException sqle){
            System.out.println("调用DataBase.getTableStruct()函数错误:/r/n" + sqle);
        } catch (AbstractMethodError e){
            System.out.println("调用DataBase.getTableStruct()函数错误:/r/n" + e);
        }
        return vect;
    }

    /** 
     * 取得数据集内容 
     * */

    public Vector getResultSetData(ResultSet rs)
    {
        Vector vect = new Vector();
        try{
            //取得列数和列名
            ResultSetMetaData rsmd = rs.getMetaData();
            int cols = rsmd.getColumnCount();
            while (rs.next())
            {
                Hashtable hash = new Hashtable();
                for (int = 1; i <= colsi++)
                {
                    DealString ds = new DealString();
                    String field = ds.toString(rsmd.getColumnName(i));
                    String value = ds.toString(rs.getString(i));
                    hash.put(fieldvalue);
                }
                vect.add(hash);
            }
        } catch (SQLException sqle){
            System.out.println("调用DataBase.getResultSetData()函数错误:/r/n" + sqle);
        }
        return vect;
    }

    /** 
     * 创建申明对象 
     * */

    public void prepareStatement(String sql)
    {
        try{
            pstm = conn.prepareStatement(sql);
        } catch (SQLException sqle){
            System.out.println("调用DataBase.prepareStatement()函数错误:/r/n" + sqle);
        }
    }

    /** 
     * 执行查询 
     * */

    public void executeQuery()
    {
        try{
            rs = pstm.executeQuery();
        } catch (SQLException sqle){
            System.out.println("调用DataBase.executeQuery()函数错误:/r/n" + sqle);
        }
    }

    /** 
     * 转向下一条 
     * */
    public boolean next()
    {
        try{
            return rs.next();
        } catch (SQLException sqle){
            System.out.println("调用DataBase.next()函数错误:/r/n" + sqle);
        }
        return true;
    }

    /** 
     * 执行更新 
     * */
    public void executeUpdate()
    {
        try{
            pstm.executeUpdate();
        } catch (SQLException sqle){
            System.out.println("调用DataBase.executeUpdate()函数错误:/r/n" + sqle);
        }
    }

    /** 
     * 关闭申明对象 
     * */

    public void closePstm()
    {
        if (pstm != null)
            try{
                pstm.close();
            } catch (SQLException sqle){
                System.out.println("调用DataBase.closePstm()函数错误:/r/n" + sqle);
            }
    }

    /** 
     * 关闭游标 
     * */

    public void closeRs()
    {
        if (rs != null)
            try{
                rs.close();
            } catch (SQLException sqle){
                System.out.println("调用DataBase.closeRs()函数错误:/r/n" + sqle);
            }
    }

    /**
      *  得到是否自动提交
      */
    public boolean getAutoCommit()
    {
        try {
            return conn.getAutoCommit();
        } catch (SQLException e){
        }
        return true;
    }

    /**
      * 关闭自动提交
      */
    public void closeAutoCommit()
    {
        try{
            conn.setAutoCommit(false);
        } catch (SQLException e){
        }
    }

    /**
       * 提交操作
       **/
    public void commit()
    {
        try{
            conn.commit();
        } catch (SQLException e){
        }
    }

    /**
       * 执行回滚
       **/
    public void rollback()
    {
        try{
            conn.rollback();
        } catch (SQLException e){
        }
    }

    /**
      * 设置自动回滚
      */
    public void openAutoCommit()
    {
        try{
            conn.setAutoCommit(true);
        } catch (SQLException e){
        }
    }

    /**
       * 创建statement 对象
       **/
    public void createStatement()
    {
        try{
            stm = conn.createStatement();
        } catch (SQLException e){
        }
    }

    /**
      *  清空批处理
      */
    public void clearBatch()
    {
        try{
            stm.clearBatch();
        } catch (SQLException e){
        }
    }

    /**
      * 增加批处理
      */
    public void addBatch(String sql)
    {
        try{
            stm.addBatch(sql);
        } catch (SQLException e){
        }
    }

    /**
      *  执行批处理
      **/
    public int[] executeBatch()
    {
        try{
            return stm.executeBatch();
        } catch (SQLException e){
        }
        return null;
    }

    /**
       * 关闭statement 对象
       **/
    public void closeStm()//专门使用
    {
        if (stm != null)
            try{
                stm.close();
            } catch (SQLException e){
            }
    }

    /**
      * 测试是否连接
      */
    public String ttest() throws Exception
    {
        PreparedStatement pstm = conn.prepareStatement("select * from test1");
        ResultSet rs = pstm.executeQuery();
        rs.next();
        InputStream is = rs.getBinaryStream("ziduan");
        Statement stmt = rs.getStatement();
        rs.close();
        if (stmt != null)
            stmt.close();
        return (new DealFile()).readCHStr(is);
    }

    public static void main(String args[]) throws Exception
    {
        /*
         * 必须执行的代码 stm = rs.getStatement(); rs.close(); stm.close();
         */
        System.out.println("begin/r/n/r/n");
        DataBase db = new DataBase();
        db.createConn("oracle.jdbc.driver.OracleDriver",
                "jdbc:oracle:thin:@10.0.0.94:1521:hg", "oaadminuser",
                "lancom4454");
        //db.createConn("sun.jdbc.odbc.JdbcOdbcDriver","jdbc:odbc:test");
        //db.createConn("com.microsoft.jdbc.sqlserver.SQLServerDriver","jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test","test","test");
        //ParentBean.DBName = "hg";
        //System.out.println(db.UpdateCLOB("test","","content","ttew测试tewagdsagsad"));
        //System.out.println(db.QueryCLOB("test","","content"));
        //System.out.println(db.getDataBaseInfo());
        //System.out.println(db.getTableList());
        //System.out.println(db.getTableStruct("test"));
        //System.out.println(db.getResultSetData(db.QuerySQL("select * from
        // test")));
        //System.out.println(db.getResultSetData(db.getTypeInfo()));
        /**
         * ????? 1.Access不能取得表列表 2.Oracle不能取得表结构:CLOB,BLOB 3.不能取得视图结构
         * 4.clob,blob,time类型读出和写入时没有区分,都当作字符串处理了 5.字段精确度问题?如何区分和使用?
         * 6.定义不同数据库的需求, 7.可视化的界面 8.字段映射列表,如何更合理?
         * 
         * 1。字段类型,创建表时字段属性写法(长度,精确度,),写入数据时所用的函数setObject
         * clob,blob,字符串(Ascii,unicode),数字(整数,浮点数),时间,布尔型,字节类型,数组
         * 2。如何取得access表列表 3。数据库驱动,不同数据库,字段映射配置情况 4。对不同的数据实现不同的配置选项,仿造SQLServer
         *  
         */
        /*
         * //不用addBatch(),clearBatch() //str长度 <=file长度-2
         * //间接方式----------------(1) db.prepareStatement("update test set
         * dlxc=?"); db.setObject(1,"大类型测试","CLOB"); db.executeUpdate();
         * db.closePstm(); //---------------------- db.prepareStatement("select *
         * from test"); db.executeQuery(); db.next();
         * System.out.println(db.getObject("dlxc","CLOB")); db.closeRs();
         * db.closePstm();
         * 
         * //直接方式---------------------(2) db.prepareStatement("update test set
         * dlxc = ? "); FileInputStream fis = new FileInputStream("out.txt");
         * db.setAsciiStream(1,fis,100); db.executeUpdate();
         * //----------------------
         * System.out.println(db.QueryCLOB("test","","dlxc"));
         *  
         */
        //db.ExecuteSQL("create table test1 (bh integer,ziduan blob)");
        //db.ExecuteSQL("insert into test1(bh) values(1)");
        /*
         * db.prepareStatement("update test1 set ziduan=?");
         * db.setObject(1,"大类型测试","BLOB"); db.executeUpdate(); db.closePstm();
         * 
         * db.prepareStatement("select * from test1"); db.executeQuery();
         * db.next(); System.out.println(db.getObject("ziduan","BLOB"));
         * 
         * db.closeRs(); db.closePstm();
         */
        //System.out.println(db.ttest());
        //db.prepareStatement("update article set content=?");
        //db.setObject(1,"大类型测试eee","BLOB");
        //db.executeUpdate();
        //db.closePstm();
        //db.UpdateBLOB_JNDI("test1","bh=1","ziduan","大类型测试333");
        //System.out.println(db.QueryBLOB_JNDI("article","id=60","content"));
        System.out
                .println(db.makeID("ZZ_GRWJB", "ZGBH", "WJBH", "2340", false));
        db.releaseConn();
        System.out.println("/r/n/r/nend");
    }
}

数据库操作通用类,布布扣,bubuko.com

数据库操作通用类

标签:style   c   class   code   java   ext   

原文地址:http://www.cnblogs.com/lvdongjie/p/3754568.html

(0)
(2)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!