2017-09-06 4 views
0

はネット上で示唆したが、不正な文字列値 - JOOQ - 私はerror.I以下になっていますどのようにこれまでjooq使用してdbが私のmysqlにcsvファイルをアップロードしようとしていたJava

Error: org.jooq.exception.DataAccessException: SQL [insert into `Test`.`testtable` <mydata> Incorrect string value: '\xEF\xBF\xBD15 ...' for column 'colum_Name' at row 1 

どのようにそれを修正カント様々なソリューションを試してみましたこれまでにUTF-8文字のレコードがDBに保存することができないとerror.Iの上に投げているがある場合、私は、ファイルがしかし、UTF-8であることを確認

create.loadInto(Tables.TableName) 
               .onErrorIgnore() 
               .loadCSV(new File("/tmp/uploaded-files/" + fileName), "UTF-8").<fields>.execute(); 

をjooqするCSVファイルをアップロードしていますと、

file -i <filename> 
を使用して確実に

フロントエンドのAjax:

$.ajax({ 
    type: "POST", 
    enctype: 'multipart/form-data', 
    url: fileUploadUrl, 
    data: dataforFileUpload, 
    processData: false, 
    contentType: false, 
    cache: false, 
    timeout: 600000, 
    success: function (message) { 
     console.log(message); 
     alert(message); 
     console.log("upload done "+ new Date()); 

    }, 
    error: function (e) { 
     console.log("ERROR : ", e.responseText); 
     alert("ERROR : "+ e.responseText); 

    } 
}); 

私はJavaの残り

PrintWriter fop = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file, true), StandardCharsets.UTF_8)); 
をjooqに渡す前に

InputStream inputStream = listingFilePart.getBody(InputStream.class, null); 

とローカルシステムに再帰的にファイルの書き込みを経由して、それを読んで私のフロントエンドからファイルを取得しています

utf-8を受け入れるように自分のDBを設定し、同じことを確認しました

答えて

0

問題が見つかりました。問題はajax呼び出しです。 enctypeのような文字セットを

のように送信する必要があります。
$.ajax({ 
    type: "POST", 
    enctype: 'multipart/form-data;charset=UTF-8', 
    url: fileUploadUrl, 
    data: dataforFileUpload, 
    processData: false, 
    contentType: false, 
    cache: false, 
    timeout: 600000, 
    success: function (message) { 
     console.log(message); 
     alert(message); 
     console.log("upload done "+ new Date()); 

    }, 
    error: function (e) { 
     console.log("ERROR : ", e.responseText); 
     alert("ERROR : "+ e.responseText); 

    } 
}); 
関連する問題