繁体   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