有没有办法从最后插入的行中获取值?
我正在插入一行,由于序列创建,PK将自动增加,我想得到这个序列号.只有PK才能保证在表中是唯一的.
我正在使用Java和JDBC和Oracle.
我忘了添加我想使用下面的结果集检索此值.(我用mysql尝试了这个并且它运行成功,但我不得不切换到Oracle,现在我得到了ID的字符串表示而不是实际的序列号)
Statement stmt = conn.createStatement();
stmt.executeUpdate(insertCmd, Statement.RETURN_GENERATED_KEYS);
stmt.RETURN_GENERATED_KEYS;
ResultSet rs = stmt.getGeneratedKeys();
if(rs.next()){
log.info("Successful insert");
id = rs.getString(1);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段将返回存储在mysql表中的列int值.但是由于我已切换到Oracle,返回的值现在是一个奇怪的字符串值.
在mysql中,如何在自动增量时获取用于插入操作的主键.
基本上,我希望在语句完成时返回新的自动增量值.
谢谢!
我有这个代码试图在数据库中插入一条记录:
try {
Connection conn = getConnection();
String sql =
"INSERT INTO myTable(userId,content,timestamp) VALUES(?,?,NOW())";
PreparedStatement st =
conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
st.setLong(1, userId);
st.setString(2, content);
id = st.executeUpdate(); //this is the problem line
} catch(Exception e) {}
Run Code Online (Sandbox Code Playgroud)
问题是,虽然正确插入了记录,但我想要id包含刚刚插入的记录的主键+ auto_increment id.但是,由于某种原因,它总是返回'1'作为id,可能是因为userId插入期间值为1.
我的桌子是InnoDB.起初userId是另一个表的外键,不管我已经删除了外键,甚至是userId列上的索引,但我仍然得到1作为返回值.
我有什么想法我做错了吗?
我使用JDBC在ResultSet中遇到了一些问题.
这是我的关系:
create table person (
person_id number(5) generated always as identity
minvalue 1
maxvalue 99999
increment by 1 start with 1
cycle
cache 10,
firstname varchar(10) not null,
lastname varchar(10) not null,
);
Run Code Online (Sandbox Code Playgroud)
我正在尝试将(名字,姓氏)插入元组,然后获取其中的person_id.这是我的JDBC代码:
//connection is taken care of beforehand and is named con
prep = con.prepareStatement("insert into person (firstname, lastname) values (?, ?)", Statement.RETURN_GENERATED_KEYS);
prep.setString(1, firstname);
prep.setString(2, lastname);
prep.execute();
ResultSet generated = prep.getGeneratedKeys();
if (generated.next()) {
String key = generated.getString("0");
System.out.println(key);
}
Run Code Online (Sandbox Code Playgroud)
这很好用.但我的问题是密钥应该是整数,而不是字符串.每次我跑,我得到一个包含"AAA3vaAAGAAAFwbAAG",或类似的规定的字符串的ResultSet.我想获取person_id,以便稍后在我的Java程序中使用它.
在搜索ResultSet或执行语句本身方面,我有什么问题吗?