2017-07-12 14 views
0

大量のデータを処理しているので、メソッドがクエリを生成しています。Java:MySQLデータの切り捨て:不適切なdouble値: ''列の場合

 ... 
     switch(operation) { 
     case "insert":     
      query +="INSERT INTO " + table + " SET "; 
      for(int i=0; i<columns.size(); i++) { 
       query += "`"+columns.get(i)+"`='"+values.get(i)+"',"; 
      } 
      query=query.substring(0, query.length()-1); //to remove the last " , " from the string 
      query += ";"; 
     break; 
     ... 

このメソッドは、このエラーメッセージを生成し、我々はそれによって生成されたクエリを実行すると:

Data truncation: Incorrect double value: '' for column 'HITELKERET' at row 1 

の方法によって生成されたクエリ文字列は次のとおりです。

INSERT INTO szallvev 

SET `NEV2`='',`BANKSZAMLA`='   -   -   ', 
    `BANK1`='', 
    `ORSZAG`='', 
    `BANK2`='', 
    `IBAN`='', 
    `SWIFT`='', 
    `IRSZAM`='', 
    `VAROS`='', 
    `UTCA`='', 
    `KTJELLEG`='0', 
    `HAZSZAM`='', 
    `EPULET`='', 
    `LEPCSOHAZ`='', 
    `EMELET`='', 
    `AJTO`='', 
    `ADOSZAM`='', 
    `KOZADOSZAM`='', 
    `UGYINTEZO`='', 
    `EMAIL`='', 
    `TELEFON`='', 
    `MOBIL`='', 
    `INTERNET`='', 
    `FAX`='', 
    `FIZMOD`='0', 
    `CSOPADO`='', 
    `MUNKASZAM`='', 
    `HITELKERET`='', 
    `DEVARSZINT`='0', 
    `KEDV1`='0', 
    `NAPOK`='', 
    `ELADO`='0', 
    `UZLETKOTO`='', 
    `AZONOSITO`='test', 
    `NEV1`='test'; 

問題は場合には、この文字列をJavaコンソールからコピーし、MySQLエディタ(SQLYOGを使用)に貼り付けると、クエリはエラーなく実行されます。

+0

、はい、これはなぜ手工芸INSERT文である - HITELKERETのPreparedStatementの –

+0

列タイプを使用するには何ですか? –

+0

これは浮動小数点(32) – Fusyoo

答えて

0

ではないことを確認してください。私は空白のフィールドだけを残すことができるので、SQLは ''からdoubleを読み込もうとしません。 私はこのように見えるために私の方法を変更:恐ろしい考えです

switch(operation) { 
     case "insert":     
      query +="INSERT INTO " + table + " SET "; 
      for(int i=0; i<columns.size(); i++) { 
       val = values.get(i); 
       if(val.length()>0) { // notice the if(), when the field has no value, it wont be put into the query string. 
        col = columns.get(i); 
        query+="`"+col+"` = '"+val+"',"; 
        if(i%3==0) query+="\n"; 
       } 

      } 
      query=query.substring(0, query.length()-1); 
      query += ";"; 
     break; 
0

クエリの文字列をスプライシングするときに、エラーヒントと私の経験に基づいて、HITELKERET列の正しいデータ型を取得できませんでした。

HITELKERETフィールドはデータベーステーブルにfloat型である必要があります。

HITELKERET列が空の文字列、私はちょうど私が完全な馬鹿だということが分かった少なくともデフォルト0

+0

エラーが発生したときに浮動小数点だったのですが、それを2倍に変更しました(エラーはまだここにあります) 問題は、これは記入が必要なフィールドではなく、可能であれば空のままにしておいてください。 – Fusyoo

+0

@Fusyooは空の文字列を意味しません。 ""あなたは単にこの列をSQL文字列に記述することはできません。 –

+0

@Fusyooデータベースのfloat型またはdouble型はできません空の文字列を識別すると、エラーになる –

関連する問題