改成这样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)
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了一段,按照这样写应该没问题~~~~~
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)
http://www.eastkeyi.com/help.rar
<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了一段,按照这样写应该没问题~~~~~