2017-04-10 29 views
1

我有一個簡單的Access數據庫。我有一個這個字段的表格:使用數字自動增量將特定的鍵插入到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,具體的數字?

+0

您是否使用UCanAccess JDBC驅動程序?如果是這樣,什麼版本? –

+0

我使用UCanAccess 2.0.9.3版本 – bircastri

回答

1

I use UCanAccess 2.0.9.3 version

UCanAccess 2.0.9.3 –這是超過兩歲現在–使用Jackcess 2.0.8。將任意值插入AutoNumber字段的功能已添加到版本2.1.1中的Jackcess中,並隨後添加到版本4.0.2中的UCanAccess中。所以,您需要將UCanAccess更新爲current version

還要注意的是,你需要將自己的價值觀爲自動編號字段之前執行的SQL語句

DISABLE AUTOINCREMENT ON tablename 

。有關詳細信息,請參閱博客文章here

+0

Thomposon,我已經下載了最新版本的UCanAccess,但是如果我嘗試啓動我的代碼,我有這個錯誤: 引起:org.hsqldb.HsqlException:java.lang.NoSuchMethodError:com。 healthmarketscience.jackcess.Table.isAllowAutoNumberInsert()Z – bircastri

+0

@bircastri - 聽起來你的CLASSPATH/BUILD_PATH仍然指向舊版本的Jackcess。 –

+0

對不起,我在build_path中也改變了Jackess .jar文件,但現在結果是一樣的,系統插入他的主鍵 – bircastri

相關問題