WebService传递大字符串

来源:互联网 发布:普拉达高仿淘宝店 编辑:程序博客网 时间:2024/05/22 05:05

写一个小例子

WebService开发相对简单了 但是遇到了一个传递大字符串 并入库的需求

所以字符串入库肯定是CLOB 因为是大字符串

(需求是传递一个1M左右的字符串 然后返回一个1M的字符串)

最初觉得只是一个小需求

写一个WebService接口 然后里面用JDBC链接数据库 然后插入 最后返回 OK搞定

几分钟写完之后  觉得还行

然后测试

发现别说1M 就是上了几KB的数据 都进不去库 报错原因是数据量比较大 字符串太长

网上找了好多 有很多人说 理论上来讲WebService传递是没有大小限制的 又是更改连接时间 又是压缩字符串 或者是分包之类的办法

办法太杂 不晓得怎么弄 一时没了头绪 心中一万只草泥马奔腾而过……

(不知道大伙有没有这么感觉过 遇到困难了 找答案 然后看到一堆不想干 或者问题符合按照他给的办法就不是那么回事的了)

后来自己测试了一遍用存储过程写的SQL

效果比较好 终于能上10KB了 先高兴一下

然后20KB 的时候  又呵呵了…… %¥#%¥#¥%(各种骂娘中……)

最后找到了一个方法 抱着试一个疗程的态度 终于成功了

下面付上代码



package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.util.Date;

import oracle.jdbc.OracleConnection;
import oracle.jdbc.OraclePreparedStatement;
import oracle.sql.CLOB;

public class IntoOrclImpl implements IntoOrcl {
    
    public static void main(String[] args) {
        IntoOrclImpl ioi = new IntoOrclImpl();
        String str = "你";
        str = str+str+str+str+str+str+str+str+str+str;
        str = str+str+str+str+str+str+str+str+str+str;
        str = str+str+str+str+str+str+str+str+str+str;
        str = str+str+str+str+str+str+str+str+str+str;
        str = str+str+str+str+str+str+str+str+str+str;
        str = str+str+str+str+str+str+str+str+str+str;
        ioi.intoOral(str);
        
    }
    @Override
    public int intoOral(String demo) {
        String driver = "oracle.jdbc.OracleDriver";// 驱动字符串
        String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";// 链接字符串
        String user = "demo";// 用户名
        String password = "demo";// 密码
        Connection con = null;
        OraclePreparedStatement pstm = null;
        ResultSet rs = null;
        boolean flag=false;
        int i = 0;
        try {
            Class.forName(driver);
            con = DriverManager.getConnection(url, user, password);
            String sql = "DECLARE" +
                    " REALLYBIGTEXTSTRING CLOB := ?;" +
                    "BEGIN" +
                    "   INSERT INTO demo VALUES(REALLYBIGTEXTSTRING);" +
                    "end ;";
            CLOB clob = new CLOB((OracleConnection) con);
            clob = oracle.sql.CLOB.createTemporary((OracleConnection) con, true,
                    1);
            OracleConnection oCon = (OracleConnection) con;
            pstm = (OraclePreparedStatement) oCon
            .prepareCall(sql);
            pstm.setString(1, demo);
            i = pstm.executeUpdate();
            
            flag=true;
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(rs!=null){
                
                try {
                    rs.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            
        }
        //关闭执行通道
        if(pstm!=null){
        
            try {
                pstm.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        
        //关闭连接通道
        
            try {
                if(con!=null&&(!con.isClosed())){
                    try {
                        con.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                
}
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        if(flag){
            System.out.println("执行成功!");
        }else{
            System.out.println("执行失败!");
        }
        return i;
    }

}




0 0
原创粉丝点击