【问题标题】:How to retrieve row in DB Table just added now in Java如何检索刚刚在 Java 中添加的 DB 表中的行
【发布时间】:2010-01-07 05:22:55
【问题描述】:

表格

id int(11) No auto_increment Change Drop Primary Index Unique Fulltext

email varchar(45) latin1_swedish_ci No Change Drop Primary Index Unique Fulltext

billpayment tinyint(1) No Change Drop Primary Index Unique Fulltext

dispatch tinyint(1) No Change Drop Primary Index Unique Fulltext

address varchar(75) latin1_swedish_ci 是 NULL Change Drop Primary Index Unique Fulltext

phone int(11) Yes NULL Change Drop Primary Index Unique Fulltext

created_at datetime No Change Drop Primary Index Unique Fulltext

totalbillamount float Yes NULL Change Drop Primary Index Unique Fulltext

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 是布尔值

我想做的是。我想找回刚才添加的行。

【问题讨论】:

    标签: java sql mysql


    【解决方案1】:

    executeUpdate 将返回受影响的行数,而不是当前行。

    试试这个

    ResultSet rs = aStatement.executeQuery("SELECT LAST_INSERT_ID()");
    while(rs.next()) 
    {
      key =  rs.getInt(1);
    }
    

    【讨论】:

      【解决方案2】:

      executeUpdate返回的值与你的ID无关。

      在我们开始获取您的 ID 之前,您可以从电子邮件变量的 Session 中设置电子邮件开始,而不是将其从数据库中拉回。

      就目前情况而言,我能想到的获取新插入的 ID 的唯一方法是更改​​您的 SQL:

      sql = "select max(id) from session_shopping";
      

      如果您在选择最大 ID 之前获得另一个插入,这会给您带来问题。为防止这种情况发生,请将 select 放在与 insert 相同的事务中。

      【讨论】:

        猜你喜欢
        • 2013-03-31
        • 2012-05-30
        • 1970-01-01
        • 2011-06-21
        • 1970-01-01
        • 1970-01-01
        • 2015-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多