WebService传递大字符串
写一个小例子 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; ?? ?} } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- permissions – unix / setfacl:设置目录默认ac
- 如何在Angular 2中解释MVC模式?
- scala – currying和多个参数列表有什么区别?
- 如何通过IP使其他网络机器可以访问Docker容器?
- 设置Linux系统的空闲等待时间TMOUT的方法
- scala – 为什么在知道类型时引用重载定义是不明
- angularjs – 什么是Angular ui-router生命周期?
- yum安装jdk如何配置JAVA_HOME
- Angular 2 ContentChild & ContentChildren
- angular – p-dataTable行上的鼠标悬停事件(prim