动态形成SQL查询

时间:2014-10-24 09:38:36

标签: java

我正在尝试在请求上形成一个动态依赖的SQL

public class Main {

    public static void main(String args[]) {

        String reqstr = "popcorn@Bucket";

        String values[] = reqstr.split("@");

        StringBuffer sqlquery = new StringBuffer(
                "insert into category_dev (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) values (");

        for (int i = 0; i < values.length; i++) {

            sqlquery.append("'" + values[i] + "'");
            sqlquery.append(",");
        }

        if (sqlquery.length() > 0) {
            sqlquery.setLength(sqlquery.length() - 1);
        }

        sqlquery.append(")");

        System.out.println(sqlquery);

    }

}

该表已从T1,T2,T3 ------ T10获得固定列。

每个@符号表示表的列值

当我运行上述程序时,正在形成的输出是

insert into category_dev (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) values ('popcorn','Bucket')

如何用NULL填充其他值?例如

insert into category_dev (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) values ('popcorn','Bucket' , NULL , NULL , NULL ,  NULL , NULL , NULL , NULL , NULL)

2 个答案:

答案 0 :(得分:1)

这是一个非常糟糕的主意,请阅读一些关于sql注入的内容

改为使用PreparedStatements:

PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
                                 SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)
例如,

应该适用于任何类型的查询或表操作

进行查询:

pstmt.set<whatever>// for the ones you want to actually set and
pstmt.setNull // in a loop for whichever didnt use

答案 1 :(得分:1)

Aren你只是在寻找这样的东西吗?

for (int i = 0; i < 10; i++) {
    if (i > values.length()) {
        sqlquery.append("NULL");
        sqlquery.append(",");
    }else {
        sqlquery.append("'" + values[i] + "'");
        sqlquery.append(",");
    }
}

我同意另一个答案。你应该看看准备好的陈述。