這個問題是關於從字符串的散列生成預處理語句並處理一些Date,Times和Int字符串。準備好聲明到數據庫設置變量類型處理
我有一個數據庫,這個數據庫的列名存儲在列「列」。
我也有一個hashmap「pdf」,它存儲PDF文檔的字段名和值。
下面的代碼從數據庫中查找與PDF哈希映射相匹配的列名,如果找到,則插入它。
StringJoiner col = new StringJoiner(",");
StringJoiner val = new StringJoiner(",");
//First Iteration: Create the Statement
for(String c : columns) {
//Your PDF has a matching formfield
if(pdf.hasKey(c)) {
col.add(c);
val.add("?");
}
}
String sql = String.format("INSERT INTO table (%s) VALUES (%s)", col.toString(), val.toString());
try(PreparedStatement insert = con.prepareStatement(sql)) {
//Insert position in statement
int pos = 0;
//Second iterations: Bind the values to the statement
for(String c : columns) {
//Your PDF has a matching formfield
if(pdf.hasKey(c)) {
insert.setString(++pos, pdf.get(c));
}
}
insert.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
這很好,但我需要處理一些情況。 PDF格式具有以下字段這是int和日期,時間:
年齡(INT) DOB(日期) 分數(INT) DateStart(日期) TimeStart(時間)
我也想修改數據庫只需要一個單獨的DateTimeStart字段,它可以同時擁有這兩個字段。
現在我也有在用像處理此一展身手:
if (c.toLowerCase().contains("date")) {
System.out.println("A Date field has been found: " +c);
DateTimeFormatter formatter = DateTimeFormat.forPattern ("dd/mm/yyyy");
DateTime startdt = formatter.parseDateTime(pdf.get(c));
insert.setDate(++pos, startdt);
}
if (pdf.containsKey(c) && !c.toLowerCase().contains("date")) {
insert.setString(++pos, pdf.get(c));
}
但是,這並不工作。對於初學者,setDate不接受DateTime對象,即使它們只包含日期。同時試圖讓我的頭腦與數據庫現在只包含「DateTimeStart」而不是「DateStart」和「TimeStart」的新預備聲明讓我頭疼。
任何幫助在這裏將不勝感激。自從Java7以來,我已經在使用Joda了。
乾杯
-Al
if (c.toLowerCase().contains("date")) {
System.out.println("A Date field has been found: " +c);
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/mm/yyyy kk:mm");
long millis = formatter.parseMillis(pdf.get("DateStart") +" " +pdf.get("TimeStart"));
Timestamp timeStamp = new Timestamp(millis);
insert.setTimestamp(++pos, timeStamp);
}
謝謝@Jim所以它會出現我需要使用setTimestamp做插入? –
我認爲這就是我在我的答案中所說的......您可以選擇您想要的精度,將您的時間戳轉換爲'java.sql'類之一,並在PreparedStatement上使用正確的'set'方法。 –
感謝@Jim所以我最終會將我的DateTime作爲毫秒時間值存儲在數據庫(MS Access)中。 這是漂亮的用戶不友好嗎? 仍在研究如何將我的日期字符串轉換爲JDBC接受的毫秒值。 –