表
id int(11)no auto_increment Change Drop Primary Index Unique Fulltext
email varchar(45)latin1_swedish_ci无变更删除主索引唯一全文
billpayment tinyint(1)无变化删除主要索引唯一全文
dispatch tinyint(1)无变化删除主索引唯一全文
地址varchar(75)latin1_swedish_ci是NULL更改删除主索引唯一全文
phone int(11)是NULL更改删除主索引唯一全文
created_at datetime无变更删除主索引唯一全文
totalbillamount float是NULL更改删除主索引唯一全文
Java代码:
sql = "insert into session_shopping (email,billpayment,dispatch,address,phone,created_at,totalbillamount) values(?,?,?,?,?,?,?)";
ps = (PreparedStatement) con.prepareStatement(sql);
ps.setString(1, email);
ps.setBoolean(2, false);
ps.setBoolean(3, false);
ps.setString(4, "");
ps.setInt(5, 0);
java.util.Date date = new java.util.Date();
long t = date.getTime();
java.sql.Date sqlDate = new java.sql.Date(t);
ps.setDate(6, sqlDate);
ps.setFloat(7, 00.0f);
int newId = ps.executeUpdate();
System.out.println("newId" + newId);
if (newId == 1) {
sql = "select * from session_shopping where id = ?";
ps = (PreparedStatement) con.prepareStatement(sql);
ps.setInt(1, newId);
ResultSet reS = ps.executeQuery();
Session s = new Session();
s.setId(reS.getInt("id"));
s.setEmail(reS.getString("email"));
System.out.println("retreived");
return s;
} else {
System.out.println("unable to save");
}
此代码失败,因为int newId是boolean
我想做的是。我想检索刚刚添加的行。
答案 0 :(得分:4)
executeUpdate将返回受影响的行数,而不是当前行。
试试这个
ResultSet rs = aStatement.executeQuery("SELECT LAST_INSERT_ID()");
while(rs.next())
{
key = rs.getInt(1);
}
答案 1 :(得分:2)
executeUpdate
返回的值与您的ID无关。
在我们获取您的ID之前,您可以先从您的电子邮件变量中设置会话中的电子邮件,而不是将其从数据库中拉出来。
就目前情况而言,我能想到获取新插入ID的唯一方法是改变你的SQL:
sql = "select max(id) from session_shopping";
如果您在选择最大ID之前获得另一个插入,这将给您带来问题。为了防止这种情况,请将select放在与插入相同的事务中。