ORALCE 数据库中 我用的 SEQUENCE 和触发器自增主键ID
然后我通过JDBC插入数据 同时希望得到返回的自动生成的主键是什么
结果报错
Exception in thread "main" java.sql.SQLException: 无效的列类型: getInt not implemented for class oracle.jdbc.driver.T4CRowidAccessor
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.Accessor.unimpl(Accessor.java:358)
at oracle.jdbc.driver.Accessor.getInt(Accessor.java:468)
at oracle.jdbc.driver.OracleReturnResultSet.getInt(OracleReturnResultSet.java:265)
at dao.impl.EmpDAOImpl.save(EmpDAOImpl.java:47)
at dao.impl.EmpDAOImpl.main(EmpDAOImpl.java:65)-------------------------------------
@Override
public int save(Emp emp)throws Exception {
// TODO Auto-generated method stub
Connection con =null;
con=DBUtil.getConnection();
PreparedStatement pstmt=null;
String sql = "insert into emp(name,salary,age) values(?,?,?)";
pstmt=con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1,emp.getName());
pstmt.setDouble(2,emp.getSalary());
pstmt.setInt(3, emp.getAge());
pstmt.executeUpdate();
ResultSet rs=null;
rs=pstmt.getGeneratedKeys();
int id=-1;
while(rs.next()){
System.out.println(rs.getInt(1));
}
return id;
}
然后我通过JDBC插入数据 同时希望得到返回的自动生成的主键是什么
结果报错
Exception in thread "main" java.sql.SQLException: 无效的列类型: getInt not implemented for class oracle.jdbc.driver.T4CRowidAccessor
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.Accessor.unimpl(Accessor.java:358)
at oracle.jdbc.driver.Accessor.getInt(Accessor.java:468)
at oracle.jdbc.driver.OracleReturnResultSet.getInt(OracleReturnResultSet.java:265)
at dao.impl.EmpDAOImpl.save(EmpDAOImpl.java:47)
at dao.impl.EmpDAOImpl.main(EmpDAOImpl.java:65)-------------------------------------
@Override
public int save(Emp emp)throws Exception {
// TODO Auto-generated method stub
Connection con =null;
con=DBUtil.getConnection();
PreparedStatement pstmt=null;
String sql = "insert into emp(name,salary,age) values(?,?,?)";
pstmt=con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1,emp.getName());
pstmt.setDouble(2,emp.getSalary());
pstmt.setInt(3, emp.getAge());
pstmt.executeUpdate();
ResultSet rs=null;
rs=pstmt.getGeneratedKeys();
int id=-1;
while(rs.next()){
System.out.println(rs.getInt(1));
}
return id;
}
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;public class OracleTest { public static void main(String[] args) {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
con = OracleConnectionFactory.getConnection();
DatabaseMetaData dmd = con.getMetaData(); System.out.println("database product name: " + dmd.getDatabaseProductName());
System.out.println("database product version: " + dmd.getDatabaseProductVersion());
System.out.println("supports generate keys? " + dmd.supportsGetGeneratedKeys()); String sql = "INSERT INTO t_mt_stat (id, mt_time, stat, stat_time) " +
"VALUES (s_mt_stat.nextval, ?, ?, ?)"; ps = con.prepareStatement(sql, new String[]{"ID"}); // 后面一个参数表示需要返回的列 ps.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
ps.setString(2, "Y");
ps.setTimestamp(3, new Timestamp(System.currentTimeMillis()));
ps.executeUpdate(); if(dmd.supportsGetGeneratedKeys()) {
rs = ps.getGeneratedKeys();
while(rs.next()) {
// 如果使用 rs.getInt("ID") 会报错,奇怪的 Oracle JDBC 驱动!
System.out.println("ID: " + rs.getInt(1));
}
} } catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(rs, ps, con);
}
}
}