在线等待java.sql.SQLException: ORA-01002: 读取违反顺序错误,请问这是什么错误啊。

myepoch 2004-07-22 04:09:21
在ORACLE中create table test (id integer,content clob);后,编译执行下列文件提示我
insert:java.sql.SQLException: ORA-01002: 读取违反顺序错误

程序如下
import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.OracleResultSet;
import oracle.sql.CLOB;

public class TestOracleClob implements Serializable{
public static void main(String[] args)
{
//create table test (id integer,content clob);
System.out.println("-------------------insert -----------------");
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.40:1521:A10DB","exam","123456");
//con.setAutoCommit(false);
//Ok 1
String sql="insert into test values(1,empty_clob())";
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sql);
String sqll="select content from test where id=1 for update";
ResultSet rss=stmt.executeQuery(sqll);
if(rss.next()){
CLOB clob = ((OracleResultSet)rss).getCLOB(1);
clob.putString(1,"ddddddddddddddddddddddddddddddddddd");
sql="update test set content=? where id=1";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setClob(1,clob);
pstmt.executeUpdate();
pstmt.close();
}

rss.close();

rs.close();
stmt.close();
con.close();
System.out.println("-------------insert ok-------------");
}catch(Exception e){
System.out.println("insert:"+e);
}
System.out.println("-------------------query -----------------");
try{
String content="";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.40:1521:A10DB","exam","123456");
Statement stmt=con.createStatement();
String sql="select content from test where id=1";
ResultSet rs=stmt.executeQuery(sql);
if(rs.next()){
CLOB clob = ((OracleResultSet)rs).getCLOB(1);
if(clob!=null){
Reader is=clob.getCharacterStream();
BufferedReader br=new BufferedReader(is);
String s=br.readLine();
while(s!=null){
content+=s+",";
s=br.readLine();
// System.out.println(s);
}
}

}
rs.close();
stmt.close();
con.close();
System.out.println("clob:"+content);
System.out.println("-------------query ok-------------");
}catch(Exception ee){
System.out.println("query:"+ee);
}

}
}
...全文
348 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
myepoch 2004-07-22
  • 打赏
  • 举报
回复
修改后,还是提示:java.sql.SQLException: ORA-01002: 读取违反顺序错误


import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.OracleResultSet;
import oracle.sql.CLOB;

public class TestOracleClob implements Serializable
{
public static void main(String[] args)
{
//create table test (id integer,content clob);

System.out.println("-------------------insert -----------------");
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.40:1521:A10DB","exam","123456");


String sql="insert into test values(1,empty_clob())";
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sql);
String sqll="select content from test where id=1 for update";
ResultSet rss=stmt.executeQuery(sqll);
if(rss.next())
{
CLOB clob = ((OracleResultSet)rss).getCLOB(1);
clob.putString(1,"ddddddddddddddddddddddddd676667565jkkkmmmmmmmmmtggddddddddddddddddddddddddddddddddddddd");
sql="update test set content=? where id=1";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setClob(1,clob);
pstmt.executeUpdate();
pstmt.close();
}

String sql12="insert into test values(?,?)";
PreparedStatement pstmt1=con.prepareStatement(sql12);
pstmt1.setInt(1,2);
pstmt1.setClob(2,oracle.sql.CLOB.empty_lob());
pstmt1.executeUpdate();
String sqll2="select content from test where id=2 for update";
ResultSet rss2=stmt.executeQuery(sqll2);
if(rss2.next())
{
CLOB clob = ((OracleResultSet)rss2).getCLOB(1);
clob.putString(1,"123affffffffffdfdfdfdddddddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdddfff");
String sql1="update test set content=? where id=2";
PreparedStatement pstmt=con.prepareStatement(sql1);
pstmt.setClob(1,clob);
pstmt.executeUpdate();
pstmt.close();
}
//con.commit();
rss.close();
rss2.close();
pstmt1.close();
rs.close();
stmt.close();
con.close();
System.out.println("-------------insert ok-------------");
}
catch(Exception e)
{
System.out.println("insert:"+e);
}
}
}
myepoch 2004-07-22
  • 打赏
  • 举报
回复
UP一下。我一直找不出这个顺序问题出在哪里啊,请帮忙。
myepoch 2004-07-22
  • 打赏
  • 举报
回复
那我怎么没按顺序读了啊?请指教。
  • 打赏
  • 举报
回复
按顺序读个字段,这是jdbc的规矩
是规矩就得遵守

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧