如何检索刚刚在Java中添加的DB表中的行

时间:2010-01-07 05:22:55

标签: java sql mysql

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

我想做的是。我想检索刚刚添加的行。

2 个答案:

答案 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放在与插入相同的事务中。