簡體   English   中英

java打印出一個arraylist來構建一個SQL字符串

[英]java printing out an arraylist to build a sql sting

我正在嘗試使用數組列表中的一組值來構建SQL語句。 我將從頭開始。

定義我的arrayList

ArrayList<String[]> myRecords = new ArrayList<String[]>();

定義我的數組字符串:

String[] record = new String[2];

然后我遍歷一個文件並在逗號上分割並將記錄添加到myRecords

while(scan.hasNext())
        {
            record = scan.nextLine().split(",");
            myRecords.add(record);
        }

所以現在我需要創建一個SQL導入語句,並在arraylist中使用thoes值。 例如。

String sql = "insert into table (parm1, parm2) Values ";

現在,我想循環遍歷數組,並填寫param1&param2。

   for(String[] list : myRecords)
    {
       sqlString +=("(");
        for(String list1 : list)
        {
            sqlString +=("'"+ list1+ "',");
        }
        sqlString+=("),");
    }
        sqlString += ';';

    logger.info(sqlString);

現在的問題是,當我打印出SQL字符串時,它看起來像這樣。

insert into table (parm1, parm2) Values ('value1','value2',),('value3','value4',),;

等等等等。

因此,問題在於value2和value4的末尾有一個多余的逗號。 並且在最后一個括號之后; 我已經在其他地方切換了,但是我似乎無法弄清楚如何獲得正確格式的sql字符串。

這就是它的外觀。

 insert into table (parm1, parm2) Values ('value1','value2'),('value3','value4');

也許這就是我形成for循環的方式。 任何建議都很好!

添加一個計數器並將其初始化為0,在添加值后遞增計數器。 僅當計數器大於0時才添加逗號

int recCount = 0;
for(String[] list : myRecords)
{
    if (recCount > 0)
    {
        sqlString += ",";
    }
    sqlString +=("(");
    int count = 0
    for(String list1 : list)
    {
        if (count > 0)
        {
            sqlString += ",";
        }
        sqlString += "'"+ list1+ "'";
        count++;
    }
    sqlString+=(")");
    recCount++;
}

通常,構建SQL字符串不是一個好主意,並且是主要的安全風險

只是:

boolean first = true;
for(String[] list : myRecords) {
    if(first) {
        first = false;
    } else {
        sqlString += ',';
    }
    sqlString +=("(");
    for(String list1 : list) {
        sqlString +=("'"+ list1+ "',");
    }
    sqlString+=(")");   // no more "'"
}
sqlString += ';';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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