[英]Simple Java Insert using JDBC
我的數據庫表架構類似於
DocumentID: Name1: Name2: Name3: Name4: Location1: Location2: Location3....:Organization1:..
現在,我有3個具有上述值的哈希集(即,一個用於名稱,一個用於位置,一個用於組織)
在循環的每個單次迭代中,這些哈希集都填充有以上值。
在每次迭代結束時,將刪除這些哈希集的數據,並創建新的哈希集。
現在我的問題是,在每次迭代中,我必須從這些哈希集值中填充sql表行(每次迭代僅1行)。
我無法理解的是,如果我有硬編碼的字符串,而不是簡單地可以使用類似以下內容的字符串:
String sql = "INSERT INTO Table " +
"VALUES ('100', 'Zara', 'Akli', '18','100', 'Zara', 'Ali', '18')";
但是,我需要遍歷每個哈希集並將所有3個哈希集的數據插入到同一行中。 我對如何寫這樣的陳述感到困惑。 請記住,我的表最初是完全空的,所以我不能使用where子句(諸如“插入..... where documentID =“ 23423”之類的東西)
假設您通過以下方式創建了這些集合:
long DocumentId
names {"A", "B", "C"}
location {"1", "2", "3"}
and so on...
我認為最簡單的方法是動態創建要執行的SQL:
{
...
StringBuilder sb = new StringBuilder("insert into mytable (");
List<Object> params = new ArrayList<Object>();
addColumnAndValue(sb, "DocumentID", docIdYouHaveSomewhere, params);
int i = 0;
for (String name: names)
addColumnAndValue(sb, ",name" + i, name, params);
i = 0;
for (String location: locations)
addColumnAndValue(sb, ",location" + i, location, params);
// now close the thing
sb.append(") values (?");
for (i = 1; i<params.size(); i++)
sb.append(",?");
sb.append("=");
// and now sb.toString() will contain valid SQL and the param values for a PreparedStatement will be in params array-list:
PreparedStatement ps = conn.prepareStatement(sb.toString());
for (i=0; i<params.size(); i++)
ps.setObject(i+1, params.get(i));
ps.executeUpdate(); // voi là!
...
}
private void add addColumnAndValue(StringBuilder sb, String columnName, Object value, List<Object> params) {
sb.append(columnName);
params.add(value);
}
我想您需要首先對3個“ HashSet”進行一些工作。
正如您所說的,“ 3組數據”最終將進入數據庫的單行。 因此,我建議您將3個哈希集轉換為Map或至少一個List,其順序與insert語句中的字段相同。 這樣以后您就可以通過名稱或索引將這些值設置為PS的參數。
而且我從未見過像"Insert into table values (....) where id=123"
這樣的插入語句,您確定它會起作用嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.