由如下的jdbc问题:
如下表: 
create table EGO.EGO_EXTJS2X_GRIDLIST
(
  INNERID  NVARCHAR2(50),
  TEXT     NVARCHAR2(20),
  PARENTID NVARCHAR2(50),
  LEAF     NVARCHAR2(10),
  ORDERNUM NUMBER
)
tablespace STUDYDB
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
comment on column EGO.EGO_EXTJS2X_GRIDLIST.INNERID
  is '唯一标志';
comment on column EGO.EGO_EXTJS2X_GRIDLIST.TEXT
  is '结点名称';
comment on column EGO.EGO_EXTJS2X_GRIDLIST.PARENTID
  is '父结点唯一标志';
comment on column EGO.EGO_EXTJS2X_GRIDLIST.LEAF
  is '是否为子结点(1为是,0为否)';
comment on column EGO.EGO_EXTJS2X_GRIDLIST.ORDERNUM
  is '排序的标志列';有如下语句: 
insert into EGO_EXTJS2X_GRIDLIST
  (INNERID, TEXT, PARENTID, LEAF, ORDERNUM)
values
  (
  sys_guid(),
   '2',
   '00',
   'false',
   (
   select max(ORDERNUM) + 1
      from EGO_EXTJS2X_GRIDLIST t1
     where t1.parentid = '00'

  )
)
标红部分现在需要用jdbc实现:JDBCConnection dbc=new JDBCConnection();
Connection conn=dbc.getConnection();
String sql="insert into EGO_EXTJS2X_GRIDLIST values(?,?,?,?,?)";
boolean f=false;
try {
node.setInnerid(GetID.getUniqueString(20,false,"yyyyMMddHms"));
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1, node.getInnerid());
ps.setString(2, node.getText());
ps.setString(3, node.getParentid());
ps.setString(4, "1");
//第五个参数,由上面得红色查询语句获得,用PreparedStatement怎么表达?可不可以不再写一个查询
f=ps.execute();
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
f=false;
e.printStackTrace();
}
JDBCConnection.closeConnection(conn);jdbc高手请指点,有经验的程序员请指点.

解决方案 »

  1.   


    insert into EGO_EXTJS2X_GRIDLIST (INNERID, TEXT, PARENTID, LEAF, ORDERNUM) 
    select sys_guid(),'2', '00', 'false',max(ORDERNUM)+1 
    from EGO_EXTJS2X_GRIDLIST 
    where parentid = '00'; 
      

  2.   

    你可以先查询出 select max(ORDERNUM) + 1 
          from EGO_EXTJS2X_GRIDLIST t1 
        where t1.parentid = '00' 
    赋值给一个java变量ORDERNUM 
    然后再设置第5个参数ps.setString(5, ORDERNUM ); 
      

  3.   

    虽不能解决我的问题,但我学习过了.看的出来你对sql颇有经验,谢谢关注.希望您继续关注我的问题
      

  4.   

    首先谢谢你支的招,但我在帖子里已经说明,本帖子的发帖目的是看"第五个参数,由上面得红色查询语句获得,用PreparedStatement怎么表达?可不可以不再写一个查询"主要探讨的是这个问题.希望你继续关注,和我一起继续探讨jdbc的使用,看jdbc是否有高级部分能支持这样复杂的操作
      

  5.   

    第五个当然是再写一个查询了结果集了.
    用PreparedStatement无法获取查询结果
      

  6.   

    同意二楼说法。先把需要插入的数据查出。赋给一个JAVA变量。然后通过插入语句,把参数值赋为该JAVA变量即可。这样程序比较简单而且清晰。其它的方法不是不可以。但对这样一个简单的插入。没有必要弄那么复杂。
      

  7.   

    1楼的sql不能解决你的问题吗?要是PreparedStatement不允许动态设置select字段的值,你可以用createStatement,用拼接sql的办法来做。
      

  8.   

    可以用更新记录集
    sql="select max(ORDERNUM) + 1 as m
          from EGO_EXTJS2X_GRIDLIST t1 
        where t1.parentid = '00' "
     ps = con.prepareStatement(sql,
      ResultSet.TYPE_FORWARD_ONLY,
      ResultSet.CONCUR_UPDATABLE);rs = ps.executeQuery();maxrownum=rs.getInt("m"); rs.insertRow();  System.out.println("-------------更新一条记录-------------");   //构建行数据  rs.updateString("", "uuuu");   rs.updateRow();
    代码没有写全 只是提供个思路 自己再找下可更新记录的知识点 是可以解决的 
      

  9.   

    我尽可能不用拼接sql的办法,尽量避免sql攻击(非法字符的攻击).
      

  10.   

    你的思路很新颖,但是我查询的sql语句可不是查一整条记录,用rs.insertRow(); 插入数据显然不可行.你看是不?