INSERT语句后的SELECT?

时间:2015-10-09 03:43:17

标签: java mysql

所以我的问题是在数据库中插入新记录后,我想做一个应包含该新记录的SELECT查询。但是,返回的数据会排除新添加的记录。似乎每当我第一次打开连接时,数据库中已有的东西都是我的程序发生的。我希望这是有道理的。所有的意见都表示赞赏。

更新

所以这是INSERT片段

String DML = "INSERT INTO MEMBERS (FIRST_NAME, LAST_NAME, BIRTHDATE, DEATH_DATE, MARITAL_STATUS,"
+ " WEDDING_DATE, SPOUSE_NAME, MILITARY_SERVICE, DATE_JOINED, DEPARTURE_DATE, ACCEPTANCE_MODE, DEPARTURE_MODE,"
+ " RELATED_TO, NOTES) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
            PreparedStatement pstmt = conn.prepareStatement(DML);
            pstmt.setString(1, jTextField2.getText());
            pstmt.setString(2, jTextField1.getText());
            pstmt.setString(3, jTextField6.getText());
            pstmt.setString(4, jTextField11.getText());
            pstmt.setString(5, jTextField3.getText());
            pstmt.setString(6, jTextField5.getText());
            pstmt.setString(7, jTextField4.getText());
            pstmt.setString(8, jTextField8.getText());
            pstmt.setString(9, jTextField7.getText());
            pstmt.setString(10, jTextField10.getText());
            pstmt.setString(11, jTextField9.getText());
            pstmt.setString(12, jTextField13.getText());
            pstmt.setString(13, jTextField14.getText());
            pstmt.setString(14, jTextArea1.getText());
            pstmt.executeUpdate();
            if (conn.getAutoCommit() == false)
                conn.commit();

现在这是SELECT片段,如果在INSERT之后触发

pstmt=conn.prepareStatement("SELECT CONCAT(LAST_NAME, ', ', FIRST_NAME) AS NAME FROM MEMBERS ORDER BY LAST_NAME, FIRST_NAME");
        rs=pstmt.executeQuery();

3 个答案:

答案 0 :(得分:1)

您很可能已禁用<VirtualHost *:80> ServerAdmin myemail DocumentRoot /var/www/html/example.com ServerName example.com ServerAlias www.example.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 模式和/或您正在运行2个查询(autocommit然后INSERT)作为 交易

尝试启用{/ 1}模式 ,然后再次运行2个查询(SELECT然后autocommit),它应该可以正常工作。

答案 1 :(得分:0)

如果你的意思是

    stmt.executeUpdate("insert into t1 ...");
    ResultSet rs = stmt.executeQuery("select ... from t1");

然后在语句2中插入的数据始终在语句2中可见,两者都在自动提交开启和关闭模式下。

如果您在一个事务中插入,不提交,并在另一个事务中读取,那么select可能不会看到插入的记录

答案 2 :(得分:0)

这样的事情可以做到:

您可以使用autoincrement列,称之为 serialID 正常插入数据。检索时使用MAX(serialID)

SELECT CONCAT(LAST_NAME, ', ', FIRST_NAME) AS NAME FROM MEMBERS ORDER BY
LAST_NAME, FIRST_NAME where serialID = (select max(serialID) from MEMBERS);

您必须在一次交易中执行此操作。