如何获得刚存入的一条数据的ID? 我的建议:把插入操作写成存储过程,然后在存储过程里返回该唯一标识sys_unid。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在oracle里存储过程怎么写?在jsp中又该怎么调用?还有没有别的方法啊? 晕 找本Oracle的书看看吧 调用用CallableStatement 我是这么操作的:insert 后,执行select max(id) from table获得 估计还是需要在数据库端进行操作,假设十个人进行插入动作,那么这时候选择最大的max(id)就可以出现问题,所以最好在它插入之前获得一个id 用select g_forum_id.currval from dual 看下我写的吧,对你绝对有帮助,别忘了加分啊:create table person(id number(12,0) not null primary key,name char(10) not null,sex char(3) not null);create sequence id;CREATE OR REPLACE PROCEDURE addperson(p_name in varchar2,p_sex in varchar2,idReturn out number) IStemp_id number;BEGINselect id.nextval into temp_id from dual;insert into person(id,name,sex) values(temp_id,p_name,p_sex);idReturn:=temp_id;END addperson;import java.sql.*;import java.lang.*;import oracle.jdbc.driver.*;public class OracleDB2{ public static void main(String[] args) { ResultSet rs=null; CallableStatement call=null; try { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.115:1521:OracleDB","scott","tiger"); call=conn.prepareCall("{ call addperson (?,?,?) }"); call.registerOutParameter(3,java.sql.Types.INTEGER); call.setString(1, "小路"); call.setString(2, "女"); call.execute(); int id=call.getInt(3); Statement stmt=conn.createStatement(); String sql="select * from person where id="+id; rs=stmt.executeQuery(sql); }catch(Exception e) {System.out.println("error:"+e);} try{// 获得数据结果集合 ResultSetMetaData rmeta = rs.getMetaData();// 确定数据集的列数,亦字段数int numColumns=rmeta.getColumnCount();// 输出每一个数据值for(int i=1;i<=numColumns;i++) { if(i<numColumns) System.out.print(rmeta.getColumnName(i)+" | "); else System.out.println(rmeta.getColumnName(i)); } while(rs.next()){ for(int i=1;i<=numColumns;i++) { if(i<numColumns) System.out.print(rs.getString(i).trim()+" | "); else System.out.println(rs.getString(i).trim()); } }}catch(Exception e){System.out.println("error:"+e);} }} Java初学者,急需知道使用这个类前还要添加什么,myeclipse上已经提示了好多问题,可是不知道该怎么做? 求一个获取系统时间的代码 有关IE显示的问题(急急急急急急急急!) 能不能配置xml文件,在系统初始化或者退出的时候执行点东西 为什么不能画图? 预编译的问题,急! Servlet 表单提交不过来,请您指点!多谢 初来乍到,给大家散分 短信猫一段时间后报错mpRefNo must be > 0 Spring MVC 请问为什么我的request得不到任何东西??? how to go on?
还有没有别的方法啊?
insert 后,执行
select max(id) from table获得
create table person(id number(12,0) not null primary key,name char(10) not null,sex char(3) not null);
create sequence id;CREATE OR REPLACE PROCEDURE addperson(p_name in varchar2,p_sex in varchar2,idReturn out number) IS
temp_id number;
BEGIN
select id.nextval into temp_id from dual;
insert into person(id,name,sex) values(temp_id,p_name,p_sex);
idReturn:=temp_id;
END addperson;import java.sql.*;
import java.lang.*;
import oracle.jdbc.driver.*;
public class OracleDB2
{
public static void main(String[] args)
{
ResultSet rs=null;
CallableStatement call=null;
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection conn =
DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.115:1521:OracleDB","scott","tiger");
call=conn.prepareCall("{ call addperson (?,?,?) }");
call.registerOutParameter(3,java.sql.Types.INTEGER);
call.setString(1, "小路");
call.setString(2, "女");
call.execute(); int id=call.getInt(3); Statement stmt=conn.createStatement();
String sql="select * from person where id="+id;
rs=stmt.executeQuery(sql);
}catch(Exception e)
{System.out.println("error:"+e);}
try{
// 获得数据结果集合
ResultSetMetaData rmeta = rs.getMetaData();
// 确定数据集的列数,亦字段数
int numColumns=rmeta.getColumnCount();
// 输出每一个数据值
for(int i=1;i<=numColumns;i++) {
if(i<numColumns)
System.out.print(rmeta.getColumnName(i)+" | ");
else
System.out.println(rmeta.getColumnName(i));
}
while(rs.next()){
for(int i=1;i<=numColumns;i++) {
if(i<numColumns)
System.out.print(rs.getString(i).trim()+" | ");
else
System.out.println(rs.getString(i).trim());
}
}}catch(Exception e){System.out.println("error:"+e);}
}
}