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

java执行sql处理类,包括CLOB,Blob字段的处理

阅读更多
import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.Reader;
import java.sql.Clob;
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.sql.Types;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class ExeSqlDAO {
private Log log = LogFactory.getLog(this.getClass().getName());

private int rows, cols;
/**
     * 执行数据库的更新操作
     *
     * @param sql SQL语句
     * @param con 数据库连接对象
     * @exception java.sql.SQLException
     */
    //do update
    public void update(String sql, Connection con) throws SQLException {
    log.info("JDBC SQL: "+sql);
            PreparedStatement pstmt = con.prepareStatement(sql);
            pstmt.executeUpdate();
            pstmt.close();


    }
    /**
     * 批量执行数据库操作
     *
     * @param sql
     * @param con
     * @throws SQLException
     */
    public void muchUpdate(String[] sql, Connection con) throws SQLException {
    for (int i=0;i<sql.length;i++){
    if (sql[i]!=null&&sql[i].length()>0&&!sql[i].equals("")){
    update(sql[i],con);
    }
    }

}
    /**
     * 执行查询数据库操作
     *
     * @param sql SQL语句
     * @param con 数据库连接对象
     * @return Result对象
     * @exception java.sql.SQLException
     */
    //do select
    public Resultobj queryExecute(String sql, Connection con) throws SQLException {
            Statement stmt = null;
            Resultobj result = new Resultobj();
            rows = 0;
            stmt = con.createStatement();
            log.info("JDBC SQL: "+sql);
            ResultSet rs = stmt.executeQuery(sql);
            ResultSetMetaData rsmd = rs.getMetaData();
            cols = rsmd.getColumnCount();
            String s[] = new String[cols];
            for (int i = 1; i <= cols; i++) {
                    s[i - 1] = rsmd.getColumnLabel(i);
            }
            result.add(s);
            rows++;
          if(rs==null){
          System.out.println("#############");
          }
            while (rs.next()) {
                    s = new String[cols];
                    for (int i = 1; i <= cols; i++) {
                            s[i - 1] = helper(rs, rsmd.getColumnType(i), i);
                           
                    }
                    result.add(s);
                    rows++;
            }

            result.setCols(cols);
            result.setRows(rows);

            rs.close();
            stmt.close();
            return (result);

    }

/**
     * 执行查询数据库操作
     * @param sql SQL语句
     * @param con 数据库连接对象
     * @param maxRow 取得最大记录个数
     * @return Result对象
     * @exception java.sql.SQLException
     */
    //do select
    public Resultobj queryByMaxRow(String sql, Connection con,int intMaxRows) throws SQLException {

            Statement stmt = null;
            Resultobj result = new Resultobj();
            rows = 0;
            stmt = con.createStatement();
            stmt.setMaxRows(intMaxRows);
            log.info("JDBC SQL: "+sql);
            ResultSet rs = stmt.executeQuery(sql);
            ResultSetMetaData rsmd = rs.getMetaData();
            cols = rsmd.getColumnCount();
            String s[] = new String[cols];
            for (int i = 1; i <= cols; i++) {
                    s[i - 1] = rsmd.getColumnLabel(i);
            }
            result.add(s);
            rows++;

            while (rs.next()) {
                    s = new String[cols];
                    for (int i = 1; i <= cols; i++) {
                            s[i - 1] = helper(rs, rsmd.getColumnType(i), i);
                          
                    }
                    result.add(s);
                    rows++;
            }
            result.setCols(cols);
            result.setRows(rows);
            //System.out.print("cols"+cols);
            //System.out.print("rows"+rows);
            rs.close();
            stmt.close();
            return (result);
    }
    /**
     * 对记录中的字段的类型转换
     * @param rs
     * @param dataType
     * @param col
     * @return
     * @throws SQLException
     */
    public String helper(ResultSet rs, int dataType, int col) throws SQLException {
            String retValue = null;
            Integer intObj;
            // ask for data depending on the datatype
            switch (dataType) {

                    case Types.DATE :
                            java.sql.Date date = rs.getDate(col);
                            if (date != null)
                                    retValue = date.toString();
                            break;
                    case Types.TIME :
                            java.sql.Time time = rs.getTime(col);
                            if (time != null)
                                    retValue = time.toString();
                            break;
                    case Types.TIMESTAMP :
                            java.sql.Timestamp timestamp = rs.getTimestamp(col);
                            if (timestamp != null)
                                    retValue = timestamp.toString();
                            break;
                    case Types.CHAR :
                    case Types.VARCHAR :
                    case Types.LONGVARCHAR :
                            retValue = rs.getString(col);
                            break;
                    case Types.NUMERIC :
                    case Types.DECIMAL ://zhanpeng 修改了不建议使用的api
                            java.math.BigDecimal numeric = rs.getBigDecimal(col);
                            if (numeric != null)
                                    retValue = numeric.toString();
                            break;
                    case Types.BIT :
                            boolean bit = rs.getBoolean(col);
                            Boolean boolObj = new Boolean(bit);
                            retValue = boolObj.toString();
                            break;
                    case Types.TINYINT :
                            byte tinyint = rs.getByte(col);
                            intObj = new Integer(tinyint);
                            retValue = intObj.toString();
                            break;
                    case Types.SMALLINT :
                            short smallint = rs.getShort(col);
                            intObj = new Integer(smallint);
                            retValue = intObj.toString();
                            break;
                    case Types.INTEGER :
                            int integer = rs.getInt(col);
                            intObj = new Integer(integer);
                            retValue = intObj.toString();
                            break;
                    case Types.BIGINT :
                            long bigint = rs.getLong(col);
                            Long longObj = new Long(bigint);
                            retValue = longObj.toString();
                            break;
                    case Types.REAL :
                            float real = rs.getFloat(col);
                            Float floatObj = new Float(real);
                            retValue = floatObj.toString();
                            break;
                    case Types.FLOAT :
                    case Types.DOUBLE :
                            double longreal = rs.getDouble(col);
                            Double doubleObj = new Double(longreal);
                            retValue = doubleObj.toString();
                            break;
                    case Types.BINARY :
                    case Types.VARBINARY :
                    case Types.LONGVARBINARY :
                            byte[] binary = rs.getBytes(col);
                            if (binary != null)
                                    retValue = new String(binary);
                            break;
                    case Types.CLOB :
                   
                    if(rs.getClob(col)!=null){
                    try {
Clob cBlob =(Clob)rs.getClob(col);
retValue=readClob(cBlob);
} catch (IOException e) {

}
                    }
                        break;       
            }
            if (retValue==null) {
            retValue = "";
            }
            return retValue;
    }
    //处理Clob字段
    public  String readClob(Clob cBlob)throws java.sql.SQLException, java.io.IOException {
    Reader r = cBlob.getCharacterStream();
    char[] b = new char[1024 * 3];
    int i = 0;
    CharArrayWriter caw = new CharArrayWriter();
    while ((i = r.read(b)) > 0) {
    caw.write(b, 0, i);
    }
   
    b = caw.toCharArray();
    String result = new String(b);
    return result;
    }

public Resultobj queryExecute (ResultSet rs) throws SQLException{
   
    Resultobj result = new Resultobj();
    ResultSetMetaData rsmd = rs.getMetaData();
    int rows = 0;
    int cols = rsmd.getColumnCount();
    String s[] = new String[cols];
    for(int i = 1;i<=cols;i++){
    s[i-1] = rsmd.getColumnLabel(i);
    }
    result.add(s);
    rows++;
    while(rs.next()){
    s = new String[cols];
    for(int i =1;i<=cols;i++){
    s[i-1]=helper(rs,rsmd.getColumnType(i),i);
    }
    result.add(s);
    rows++;
    }
    result.setCols(cols);
    result.setRows(rows);
    return result;
    }
}
分享到:
评论

相关推荐

    delphi读写BLOB字段

    delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段...

    kettle通过java代码将数据库blob 字段抽取到本地文件

    kettle通过java代码将数据库blob 字段抽取到本地文件

    sql server中的image类型的数据导出到oracle的clob字段中

    sql server中的image类型的数据导出到oracle的clob字段中

    批量导出ORACLE数据库BLOB字段生成图片

    只需要安装oracle client在本地,然后配置好tns,输入连接名,用户名,密码,数据表的名称,文件名数据列名以及blob数据列名,就可以批量导出ORACLE数据库BLOB字段生成图片

    关于在Hibernate中对于Clob,Blob字段的处理方法

    oracle的jdbc驱动程序,用这个版本的操作Clob,blob类型的数据很方便。 博文链接:https://zhenjw.iteye.com/blog/173419

    ORACLE中CLOB字段转String类型

    ORACLE中CLOB字段转String类型

    Oracle bolb转换Base64 CLOB.txt

    Oracle slq bolb转换Base64 CLOB

    关于oracle中clob字段查询慢的问题及解决方法

    最近在用oracle的过程中用到了对blob字段模糊查询的问题。接下来通过本文给大家分享关于oracle中clob字段查询慢的问题及解决方法,需要的的朋友参考下吧

    oracle中的BLOB(照片)转换到mysql中

    从oracle中的BLOB类型字段中取出照片,转存到mysql数据库中。思路是现将oracle中的照片存储在本地文件夹,在将本地图片上传到mysql中。

    Oracle 插入超4000字节的CLOB字段的处理方法

    在通过拼组sql语句来实现数据插入的应用中,我们很有可能会遇到需要插入大型数据的情况,例如,在oracle中需要插入字节数超过4000的字段内容时,我们如果通过简单的拼组sql语句来实现插入,显然就会出现问题,而在...

    oracle中读写blob字段的问题解析

    LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对像(Binary Large Object),适用于存贮非文本的字节流数据(如程序、图像、影音等)。而CLOB,即字符型大型对像(Character Large Object),则与字符集相关,适于...

    plsql查询数据库时中文字段为乱解决方法.txt

    plsql查询数据库时中文字段为乱解决方法

    向Oracle数据库的CLOB属性插入数据报字符串过长错误

    今天在项目中向数据库的CLOB属性插入一段篇文章(1000~2000)字就会报一个字符串过长的错误。 网上说用流来处理,没有这么做。这像是一个Bug,只要把插入的数据,默认扩充到2000以上就ok了。 下面是这段代码: if(...

    Java数据库编程宝典3

    第14章 使用Blob和Clob管理图像和文档 14.1 大对象 14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 ...

    ssh(structs,spring,hibernate)框架中的上传下载

    首先数据表中的Blob字段在Java领域对象中声明为byte[]类型,而非java.sql.Blob类型。  2.数据表Blob字段在Hibernate持久化映射文件中的type为org.springframework.orm.hibernate3.support.BlobByteArrayType,即...

    DBAnywhere发布4.79版本了

    swing开发的数据库管理工具,系统自带常用的主流数据库驱动包,其他数据库可以扩展添加(只要添加数据库jdbc驱动的jar包就可以),可以创建和查看用户表(数据可导出成Excel和txt,可以下载或以图片格式直接查看blob字段),...

    Java数据库编程宝典2

    第14章 使用Blob和Clob管理图像和文档 14.1 大对象 14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 ...

    Java数据库编程宝典4

    第14章 使用Blob和Clob管理图像和文档 14.1 大对象 14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 ...

    Java数据库编程宝典1

    第14章 使用Blob和Clob管理图像和文档 14.1 大对象 14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 ...

Global site tag (gtag.js) - Google Analytics