相关疑难解决方法(0)

PLSQL JDBC:如何获取最后一行ID?

什么是PLSQL(Oracle)相当于这个SQL服务器片段?

BEGIN TRAN
INSERT INTO mytable(content) VALUES ("test") -- assume there's an ID column that is autoincrement
SELECT @@IDENTITY
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)

在C#中,您可以调用myCommand.ExecuteScalar()来检索新行的ID.

如何在Oracle中插入新行,让JDBC获取新ID的副本?

编辑: BalusC提供了一个非常好的起点.由于某种原因,JDBC不喜欢命名参数绑定.这给出了"错误设置或注册的参数"SQLException.为什么会这样?

        OracleConnection conn = getAppConnection();
        String q = "BEGIN INSERT INTO tb (id) values (claim_seq.nextval) returning id into :newId; end;" ;
        CallableStatement cs = (OracleCallableStatement) conn.prepareCall(q);
        cs.registerOutParameter("newId", OracleTypes.NUMBER);
        cs.execute();
        int newId = cs.getInt("newId");
Run Code Online (Sandbox Code Playgroud)

java oracle plsql jdbc

18
推荐指数
2
解决办法
1万
查看次数

使用JDBC检索Oracle中最后插入的id

我正在尝试使用此问题中提到的方法(我使用的是Oracle 10g)检索JSP中最后生成的自动增量ID,例如PHP mysql_insert_id()函数或MySQL last_insert_id()函数.getGeneratedKeys()

TRANSPORTER在Oracle数据库中有一个表,它有一个名为TRANSPORTER_IDtype 的列,NUMBER(35, 0)它映射到BigDecimalJava中的类型,它是一个序列生成的主键.

Connection con;
ResultSet rs;
PreparedStatement ps;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "root";
String pwd = "root";

Class.forName("oracle.jdbc.OracleDriver").newInstance();
con = DriverManager.getConnection(url, user, pwd);

ps = con.prepareStatement("INSERT INTO transporter(transporter_name, transporter_website)VALUES(?, ?)");
ps.setString(1, "New");
ps.setString(2, "New Website");
ps.executeUpdate();

BigDecimal id = new BigDecimal(0);
rs = ps.getGeneratedKeys();

while (rs.next()) {
    id = rs.getBigDecimal("transporter_id");
}

out.println("The generated id is : " + id); …
Run Code Online (Sandbox Code Playgroud)

java oracle jdbc oracle10g

4
推荐指数
1
解决办法
5073
查看次数

标签 统计

java ×2

jdbc ×2

oracle ×2

oracle10g ×1

plsql ×1