簡體   English   中英

使用JDBC的簡單Java插入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM