关键就在这一句PreparedStatement ps = stmt.getPreStmt(sql);
其中stmt.getPreStmt(sql);是在哪里来了?

解决方案 »

  1.   

    你直接写成这样试试:
    PreparedStatement ps = con.prepareStatement(sql);
      

  2.   

    改成这样PreparedStatement ps = con.prepareStatement(sql);
    内容比较少时能录入进取,但是当字段非常大时,还是出现错误
    是不是insert不能插入大于4000汉字的问题Error 500--Internal Server Error 
    java.sql.SQLException: 嗾蜽?刾n
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
    at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1160)
    at oracle.jdbc.ttc7.MAREngine.unmarshalUB1(MAREngine.java:963)
    at oracle.jdbc.ttc7.MAREngine.unmarshalSB1(MAREngine.java:893)
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:375)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1894)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1094)
    at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2132)
    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2015)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2877)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:608)
    at jsp_servlet._news.__savenew._jspService(__savenew.java:271)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6310)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3622)
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2569)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
     
      

  3.   

    对的,要是大数字,你先把插入空,然后再UPDATE这条信息,不是给你下载地址了吗?看里面代码
    http://www.eastkeyi.com/help.rar
      

  4.   

    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.io.*,java.sql.*,javax.sql.* ,javax.naming.*,java.util.Date" errorPage="" %>
    <jsp:useBean id="date" scope="page" class="oracle.date" />
    <%
        String sDBDriver = "oracle.jdbc.driver.OracleDriver"; 
        String sConnStr = "jdbc:oracle:thin:@192.168.1.202:1521:ora9";
    Connection conn = null; 
    oracle.jdbc.driver.OracleResultSet rs2=null; //这里rs一定要用Oracle提供的 
        oracle.jdbc.driver.OraclePreparedStatement stmt2=null;
    String str2=null;
    Class.forName(sDBDriver); 
        conn = DriverManager.getConnection(sConnStr,"用户明","密码"); 
    conn.setAutoCommit(false);
     
        String table=new String(request.getParameter("table").trim().getBytes("ISO-8859-1"),"GBK");
    String NID=new String(request.getParameter("NID").trim().getBytes("ISO-8859-1"),"GBK");
    String NVERSION=new String(request.getParameter("NVERSION").trim().getBytes("ISO-8859-1"),"GBK");
    String Title=new String(request.getParameter("Title").trim().getBytes("ISO-8859-1"),"GBK");
    String NCONTENT=new String(request.getParameter("NCONTENT").trim().getBytes("ISO-8859-1"),"GBK");
    int tableint=Integer.parseInt(table);
    int NIDint=Integer.parseInt(NID);
    int NVERSIONint=Integer.parseInt(NVERSION);
    int NSORTID=0;
    if(table.equals("1"))
    {
       //插入CLOB内容
       
       str2="select count(*) as num from cbsw.Cbsw_Ag where NID=? and NVERSION=?";
       stmt2=(oracle.jdbc.driver.OraclePreparedStatement)conn.prepareStatement(str2);
           stmt2.setInt(1,NIDint);
       stmt2.setInt(2,NVERSIONint);
           rs2=(oracle.jdbc.driver.OracleResultSet)stmt2.executeQuery();
       rs2.next();
       NSORTID=rs2.getInt(1);
       NSORTID++;
       
           str2="insert into cbsw.Cbsw_Ag values(?,?,?,?,?,?,?,?,?,?,?,?,empty_clob())";
           stmt2=(oracle.jdbc.driver.OraclePreparedStatement)conn.prepareStatement(str2);
           stmt2.setInt(1,NIDint);
       stmt2.setInt(2,NVERSIONint);
       stmt2.setInt(3,NSORTID);
       stmt2.setString(4,Title);
       stmt2.setString(5,"Y");
       stmt2.setString(6,NID+"1"+Integer.toString(NSORTID));
       stmt2.setString(7,null);
       stmt2.setInt(8,1);
       stmt2.setString(9,null);
       stmt2.setString(10,date.todatetime());
       stmt2.setString(11,null);
       stmt2.setString(12,date.todatetime());
           stmt2.executeUpdate();
           stmt2.clearParameters();
           str2="select NCONTENT from cbsw.Cbsw_Ag where NID=? and NVERSION=? and NSORTID=? for update";
           stmt2=(oracle.jdbc.driver.OraclePreparedStatement)conn.prepareStatement(str2);
           stmt2.setInt(1,NIDint);
       stmt2.setInt(2,NVERSIONint);
       stmt2.setInt(3,NSORTID);
           rs2=(oracle.jdbc.driver.OracleResultSet)stmt2.executeQuery();
           if (rs2.next()) 
           {
                oracle.sql.CLOB clob = (oracle.sql.CLOB)(rs2.getClob(1));
                oracle.sql.CLOB my_clob = (oracle.sql.CLOB)clob;//方法二
                java.io.Writer writer = my_clob.getCharacterOutputStream();
                writer.write(NCONTENT);
                writer.flush();
                writer.close();
            }
           conn.commit();
       //插入CLOB内容结束
    }
    以前使用的方法,copy了一段,按照这样写应该没问题~~~~~