2017-06-28 6 views
2

Ich verwende jdbcTemplate, um in DataBase Oracle einige Daten einzufügen. Ich bin diesen Fehler leider immer:Negative Zahl einfügen - ORA-01722

java.sql.SQLSyntaxErrorException: ORA-01722: invalid Number 

Zunächst einmal konvertiere ich die Zeichenfolge zu verdoppeln:

Number number = nmFormat.parse(record[8]); 
double doubleVLBalance = number.doubleValue(); 

und nachher: ​​

String sqlSettlementBalance = "INSERT INTO STARR4.TBSETR_SETTLEMENT_BALANCE"+ 
       "(DT_MOVEMENT,NU_CUSTOMER_REF, NU_MOD_CUSTOMER_REF,"+ 
       "NU_HIERARCHICAL_NODE, CD_ACQUIRER, CD_PRODUCT,"+ 
       "CD_BALANCE_TYPE, NU_CUSTOMER, VL_BALANCE, NU_CONTROL)"+ 
       "VALUES ('" ...,'"+doubleVLBalance+"','"+sb.getNuControl()+"')"; 

jdbcTemplate.update(sqlSettlementBalance); 

Der Wert des String-Datensatz [ 8] ist "-0,34". Irgendwelche Vorschläge, um dieses Problem zu lösen?

Antwort

3

Wenn Sie eine Zahl mit Anführungszeichen umgeben, wird sie zu einer Zeichenfolge. Entfernen Sie die Angebote.

String sqlSettlementBalance = "INSERT INTO STARR4.TBSETR_SETTLEMENT_BALANCE"+ 
      "(DT_MOVEMENT,NU_CUSTOMER_REF, NU_MOD_CUSTOMER_REF,"+ 
      "NU_HIERARCHICAL_NODE, CD_ACQUIRER, CD_PRODUCT,"+ 
      "CD_BALANCE_TYPE, NU_CUSTOMER, VL_BALANCE, NU_CONTROL)"+ 
      "VALUES ('" ...,"+doubleVLBalance+",'"+sb.getNuControl()+"')"; 
+0

Perfekt, es funktioniert jetzt! Danke, Mann! – Stankevix

3

Wie erwähnt, bevor Sie Zitate löschen sollte, aber ich empfehle statt

jdbcTemplate.update(sqlSettlementBalance); 

jdbcTemplate.update(sqlSettlementBalance, Object... args); 

zum Beispiel so etwas wie dies mit:

String sqlSettlementBalance = "INSERT INTO STARR4.TBSETR_SETTLEMENT_BALANCE"+ 
      "(DT_MOVEMENT,NU_CUSTOMER_REF, NU_MOD_CUSTOMER_REF,"+ 
      "NU_HIERARCHICAL_NODE, CD_ACQUIRER, CD_PRODUCT,"+ 
      "CD_BALANCE_TYPE, NU_CUSTOMER, VL_BALANCE, NU_CONTROL)"+ 
      "VALUES ('"...,?,'"+sb.getNuControl()+"')"; 

jdbcTemplate.update(sqlSettlementBalance, doubleVLBalance); 

Nutzungs PreparedStatement siehe Beispiel le this