使用JDBC获取数据库自动生成的主键:
注:此参数仅对insert操作有效
在数据库中生成users表:
create table users(
id int primary key auto_increment,
name varchar(40),
password varchar(40),
email varchar(60),
birthday date
)
向该表中插入一行记录,然后得到自动增长的id的实现:
Connection con = null;
PreparedStatement st = null;
ResultSet rs = null;
try {
//获取连接
con = DBManager.getConnection();
String sql="insert into users(name,password) value(?,?)";
st = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
st.setString(1,"Jerry");
st.setString(2,"QAZ");
st.executeUpdate();
rs=st.getGeneratedKeys();//结果集单行单列的
if(rs.next()){
System.out.println(rs.getObject(1));
}
DBManager.release(con, st, rs);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
MySql数据库的处理连接:
public class DBManager {
private static String username;
private static String password;
private static String url;
private static String driver;
static{
try{
InputStream in = DBManager.class.getClassLoader().getResourceAsStream("db.properties");
Properties prop = new Properties();
prop.load(in);
driver = prop.getProperty("driverClassName");
url = prop.getProperty("url");
username = prop.getProperty("username");
password = prop.getProperty("password");
Class.forName(driver);
}catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, username, password);
}
public static void release(Connection conn,Statement st,ResultSet rs){
if(rs!=null){
try{
rs.close();
}catch (Exception e) {e.printStackTrace();}
rs = null;
}
if(st!=null){
try{
st.close();
}catch (Exception e) {e.printStackTrace();}
st = null;
}
if(conn!=null){
try{
conn.close();
}catch (Exception e) {e.printStackTrace();}
conn = null;
}
}
}