【问题标题】:Failed to read auto-increment value from the storage engine in MySQLMySQL 存储引擎读取自增值失败
【发布时间】:2013-12-06 04:25:17
【问题描述】:

我的为什么会出现这个异常?

public String setIDAndInsert(String fName, String lName, String gender, String date) {
    String id = null;
    ResultSet res;
    try {
        Connection con;
        PreparedStatement pStatement;
        String query = "insert into Users(FirstName,LastName,Gender,Date) " +
                "values ( '" + fName + "' , '" + lName + "' , '" + gender + "', '" + date + "' ) ";
        con = DriverManager.getConnection(...);
        pStatement = con.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
        pStatement.execute(query);
        res = pStatement.getGeneratedKeys();
        while (res.next()) {
            id = String.valueOf(res.getInt(1));
        }

    } catch (SQLException sqle) {
        sqle.printStackTrace();
    }
    return id;
}

以前这个方法可以正常工作,不知道为什么现在不行了!

我在控制台中的表格:

java.sql.SQLException: Failed to read auto-increment value from storage engine
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:734)
    at Project.UserPage_Admin.setIDAndInsert(UserPage_Admin.java:145)
    at Project.UserPage_Admin.addAction(UserPage_Admin.java:127)
    at Project.UserPage_Admin.actionPerformed(UserPage_Admin.java:114)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:682)
    at java.awt.EventQueue$3.run(EventQueue.java:680)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:696)
    at java.awt.EventQueue$4.run(EventQueue.java:694)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

【问题讨论】:

  • 如果它抛出异常,请在此处发布该错误堆栈。
  • 你提交了插入吗?
  • 看看这个链接对你有没有帮助:ask.amoeba.co.in/…
  • int(12) 是一种相当奇怪的数据类型(它是 +/- 39 位整数),您确定该值仍然适合 32 位(有符号)整数吗? java 整数最多可以占用一个 int(10)(或“普通”SQL INTEGER)。另请参阅stackoverflow.com/questions/7346934/…
  • @MarkRotteveel 我将其更改为12 用于训练alter 语句为sql。应该是多少?

标签: java mysql jdbc


【解决方案1】:

试试这个:

ALTER TABLE `table_name`  AUTO_INCREMENT = 1

【讨论】:

    猜你喜欢
    • 2011-11-12
    • 2014-02-11
    • 2015-01-27
    • 2016-07-01
    • 2013-07-15
    • 2013-07-07
    • 2010-12-14
    • 2014-03-10
    • 1970-01-01
    相关资源
    最近更新 更多