Java 使用数字自动递增(自动编号)将特定键插入访问表

Java 使用数字自动递增(自动编号)将特定键插入访问表,java,database,ms-access,jdbc,ucanaccess,Java,Database,Ms Access,Jdbc,Ucanaccess,我有一个简单的Access数据库。我有一个带有此字段的表: 协同操纵子酮(PK自动编号) CodiceCliente(testo) 现在我想用另一个数据库中的数据对这个表进行序列化。 我已经编写了填充此表的代码。 代码如下: public Boolean insertOperazioneDareAvere(OperazioneCliente op, Boolean trasferimento) { try{ Boolean result=false;

我有一个简单的Access数据库。我有一个带有此字段的表:

协同操纵子酮(PK自动编号)

CodiceCliente(testo)

现在我想用另一个数据库中的数据对这个表进行序列化。 我已经编写了填充此表的代码。 代码如下:

public Boolean insertOperazioneDareAvere(OperazioneCliente op, Boolean trasferimento) {
        try{
            Boolean result=false;
            String query="";
            if(trasferimento){
                query="INSERT INTO OPERAZIONI (COdOperazione,CodiceCliente,"
                        + "DataOperazione,Descrizione,Quantita,Importo,SommaDare,SommaAvere,Periodo,Anno,IDFattura) "
                        + "VALUES (?,?,?,?,?,?,?,?,?,?,?)";
            }else{
                query="INSERT INTO OPERAZIONI (CodiceCliente,"
                        + "DataOperazione,Descrizione,Quantita,Importo,SommaDare,SommaAvere,Periodo,Anno,IDFattura) "
                        + "VALUES (?,?,?,?,?,?,?,?,?,?)";
            }
            int nColonna=1;

            PreparedStatement stmt = db.prepareStatement(query);
            if(trasferimento)
                stmt.setInt(nColonna++, op.getCodOperazione());
            stmt.setString(nColonna++, op.getCodiceCliente());

            //if(trasferimento){
            Timestamp yyyymmddXmas = 
                    new Timestamp(yyyymmddFormat.parse(op.getDataOperazione()).getTime());
            stmt.setTimestamp(nColonna++, yyyymmddXmas);
            //}else
            //  stmt.setString(nColonna++, op.getDataOperazione());
            if(op.getDescrizione()!=null && !op.getDescrizione().isEmpty() && op.getDescrizione().length()>0)
                stmt.setString(nColonna++, op.getDescrizione());
            else if(op.getDescrizioneRiscossione()!=null && !op.getDescrizioneRiscossione().isEmpty() && op.getDescrizioneRiscossione().length()>0)
                stmt.setString(nColonna++, op.getDescrizioneRiscossione());
            stmt.setInt(nColonna++, op.getQuantita()!=null ? op.getQuantita() : 0);
            stmt.setDouble(nColonna++, op.getImporto()!=null ? op.getImporto() : 0.0);
            stmt.setDouble(nColonna++, op.getSommaDare()!=null ? op.getSommaDare() : 0.0);
            stmt.setDouble(nColonna++, op.getSommaAvere()!=null ? op.getSommaAvere() : 0.0);
            stmt.setString(nColonna++, op.getPeriodo());
            if(op.getAnno()==null){
                stmt.setNull(nColonna++, Types.NULL);
            }else{
                stmt.setInt(nColonna++, op.getAnno());
            }
            if(op.getCodiceFattura()==null){
                stmt.setNull(nColonna++, Types.NULL);
            }else{
                stmt.setInt(nColonna++, op.getCodiceFattura());
            }
            
            int n= stmt.executeUpdate();   // Ottengo il ResultSet dell'esecuzione della query
            if(n>0 && !trasferimento){
                result = true;
                int id= getLastInsertID();
                op.setCodOperazione(id);
            }else{
                System.out.println("codice operazione non inserita "+op.getCodOperazione());
            }
            //
            stmt.close();
            if(op.getCodiceFattura()!=null && op.getCodiceFattura()>0)
                inserisciOperazioniInOpFattura(op);
            return result;
        }catch(Exception e){
            log.logStackTrace(e);
            return false;
        }
    }
使用此代码,如果

“op.getCodiceOperazione()=10”

在数据库中插入后,ID不是10,而是(例如50)

现在,我如何将特定的数字插入到具有autoincrement PK的表中


我使用UCanAccess 2.0.9.3版本

UCanAccess 2.0.9.3——现在已经有两年多的历史了——使用的是Jackcess 2.0.8。将任意值插入自动编号字段的功能添加到2.1.1版的JackAccess中,随后添加到4.0.2版的UCanAccess中。因此,您需要将UCanAccess更新为

还要注意,您需要执行SQL语句

禁用tablename上的自动增量

在将自己的值插入“自动编号”字段之前。有关详细信息,请参阅博文。

您正在使用UCanAccess JDBC驱动程序吗?如果是,什么版本?我使用UCanAccess 2.0.9.3 versionToposon,我已经下载了UCanAccess的最新版本,但是如果我尝试启动我的代码,我会出现以下错误:原因:org.hsqldb.hsqleException:java.lang.NoSuchMethodError:com.healthmarketscience.jackcess.Table.isAllowAutoNumberInsert()Z@bircastri-听起来你的CLASSPATH/BUILD\u路径仍然指向旧版本的Jackcess。对不起,我在我的BUILD\u路径中也更改了Jackess.jar文件,但是现在结果是一样的,系统插入了他的主键