java - 使用数字自动增量 (AutoNumber) 将特定键插入 Access 表

标签 java database ms-access jdbc ucanaccess

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

CodOperazione (PK AutoNumber)

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)。

现在如何将特定数字插入到具有自动增量 PK 的表中?

最佳答案

I use UCanAccess 2.0.9.3 version

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

另请注意,需要执行SQL语句

DISABLE AUTOINCREMENT ON tablename

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

关于java - 使用数字自动增量 (AutoNumber) 将特定键插入 Access 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43322519/

相关文章:

java - 如何在mockito+Junit测试中捕获或模拟意外异常?

sql - 为什么我的 pg_hint_plan 前导提示没有被使用?

mysql - Django 模型中存储商业商店交易中购买的元素的有效方法

mysql - 比较 SQL 表行,如果完全匹配则返回不同的答案,1 个差异,2 个差异等

sql - 如何使用 Access SQL 在表中查找重复项?

java - 对列表数据使用国际化

Java Kerberos 身份验证似乎有效,但仍被拒绝

database - 自动分片postgresql?

c# - 使用 C# 将数据同时导出到 Access 到两个表中

java - 为什么我没有获得 hystrix 指标?