无法在 MySql JDBC 中获取自动生成的 ID

Unable to get AutoGenerated ID in MySql JDBC

我正在尝试在执行插入操作后获取自动生成的 ID。我有一个名为 sg_InsuranceInfo 的 table,它会生成一个 autoIncremented id。所以我需要得到它。我已附上示例代码以供参考

try
{
    String insertQuery = "INSERT INTO sg_InsuranceInfo(Patient_Name,LIC_Name) VALUES(?,?)";
    PreparedStatement preparedStatement = getConnectionObject().getConnection().prepareStatement(insertQuery,  Statement.RETURN_GENERATED_KEYS);
    preparedStatement.setString(1, insuranceInformation.getPatientName());
    preparedStatement.setString(2, insuranceInformation.getLicName());
    int noOfRowsAffected = preparedStatement.executeUpdate();
    if (noOfRowsAffected != 0)
    {
        ResultSet resultSet = preparedStatement.getGeneratedKeys();
        if(resultSet.next())
        {
            System.out.println(resultSet.getInt(1));
        }
    }
}
catch (SQLException e)
{
    e.printStackTrace();
} 

这是错误文本

Exception in thread "AWT-EventQueue-0" java.lang.AbstractMethodError: com.inet.tds.TdsConnection.prepareStatement(Ljava/lang/String;I)Ljava/sql/PreparedStatement;
at hospitalApp.common.InsuranceObject.saveInformation(InsuranceObject.java:42)
at hospitalApp.common.InsuranceObject.updateInformationToDatabase(InsuranceObject.java:161)
at hospitalApp.common.InsuranceController.actionPerformed(InsuranceController.java:117)
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:6516)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6281)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4872)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4698)
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:4698)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747)
at java.awt.EventQueue.access0(EventQueue.java:103)
at java.awt.EventQueue.run(EventQueue.java:706)
at java.awt.EventQueue.run(EventQueue.java:704)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue.run(EventQueue.java:720)
at java.awt.EventQueue.run(EventQueue.java:718)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:717)
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)

AbstractMethodError.html

Thrown when an application tries to call an abstract method. Normally, this error is caught by the compiler; this error can only occur at run time if the definition of some class has incompatibly changed since the currently executing method was last compiled

我怀疑您可能使用不同版本的 JDBC jar 文件进行编译和 运行 您的程序,因为这仅在运行时发生。

它完成了工作

public void saveInformation(InsuranceInformation insuranceInformation)
{       
    try
    {
        int noOfRowsAffected = getConnectionObject().getStatement().executeUpdate(
                "INSERT INTO sg_InsuranceInfo(Patient_Name,LIC_Name) VALUES(" + "'" + insuranceInformation.getPatientName() + "','" + insuranceInformation.getLicName() + "'"
                        + ")");
        if (noOfRowsAffected != 0)
        {
            ResultSet autoGeneratedId = getConnectionObject().getStatement().executeQuery("SELECT SCOPE_IDENTITY()");
            if(autoGeneratedId.next())
            {
                System.out.println(autoGeneratedId.getInt(1));
            }
        }
    }
    catch (SQLException e)
    {
        e.printStackTrace();
    }
}

您可以在此处获得更多信息http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/