我正在使用Java JDBC連接到MySQL數據庫並將數據加載到表中。 Load in data語句在從GUI界面(我正在使用Navicat)運行時工作正常。但是,當我採取相同的語句,並將其放置在一個文本文件,然後我讀使用下面的代碼不起作用:Java JDBC問題,第1行不包含所有列的數據
public String readFile(String path, Charset encoding) throws IOException {
byte[] encoded = Files.readAllBytes(Paths.get(path));
return encoding.decode(ByteBuffer.wrap(encoded)).toString();
}
String hcccontent = readFile("resources/loadinhcc.txt", StandardCharsets.UTF_8);
String[] loadinhcc = hcccontent.split(regex);
for(int i = 0; i < loadinhcc.length; i++){
Statement stmt = conn.createStatement();
stmt.execute(loadinhcc[i]);
}
這工作得很好,我甚至通過代碼加強提取查詢我的Java程序解析,將其複製到navicat中,並加載所有數據。當我運行它並讓程序嘗試執行時,出現以下錯誤「第1行不包含所有列的數據」
我在網上搜索了最近的東西,我發現可能導致此問題是MySQL嚴格模式。如果輸入的數據長度超過了表中指定的值,MySQL不會加載,或者如果沒有所有列的數據,則不會加載。但它沒有任何意義,因爲查詢在Navicat中起作用,這會導致這個問題。在JDBC中是否存在禁用嚴格模式的設置?還是我想念的東西?
是什麼'loadinhcc [I]'包含哪些內容? – Kal
其聲明中的加載不會在程序上工作,但在我從navicat運行時運行正常。實際查詢是: LOAD DATA INFILE'/path/test.txt'INTO TABLE hcc FIELDS TERMINATED BY'|' ''''ESCAPED BY''LINES終止'\ n'忽略1行; –
您不能使用'sqlldr'命令通過JDBC加載數據,您必須使用SQL ..'insert into table(col1 ,col2,...)values(val1,val2 ..);' – Kal