使用java在SQL数据库中插入命令时出错

时间:2015-11-18 06:20:09

标签: java sql

我需要每天更新sql数据库,以便更改点击次数和转化次数列。我有每列的数组。在此声明中存在错误。我也找不到错误。请帮助

for(int j=1;j<row;j++){
pst= conn.prepareStatement("INSERT INTO babum_test.l2ttracker SET Clientid='"+Customer_ID[j]+"',Accountname='"+Account[j]"',Dates='"Day[j]"',Clicks='"Clicks[j]"',Impressions='"Impressions[j]"',CTR='"CTR[j]"',Avg_CPC='"Avg_CPC[j]"',Cost='"Costs[j]"',Conversions='"Conversions[j]"',Converted_clicks='"Converted_clicks[j]"',Avg_position='"Avg_position[j]"',Revenue='"Total_Conv_value[j]+"' ON DUPLICATE KEY UPDATE'"+ "'Clicks='"+Clicks[j]"',Impressions='"Impressions[j]"',CTR='"CTR[j]"',Avg_CPC='"Avg_CPC[j]"',Cost='"Costs[j]"',Conversions='"Conversions[j]"',Avg_position='"Avg_position[j]"',Converted_clicks='"Converted_clicks[j]"',Revenue='"Total_Conv_value[j]);
}

1 个答案:

答案 0 :(得分:3)

那里有三个主要问题:

  1. 您在使用引号的地方不使用引号。

  2. 我不知道任何使用INSERT ... SET语句的数据库。

  3. 您对SQL注入攻击持开放态度。

  4. 强制性漫画#3:

    enter image description here

    相反:

    pst = conn.prepareStatement(
        "INSERT INTO sampletable " +
        "(FirstColumn SecondColumn, Etc) " +
        "VALUES " +
        "(?, ?, ?)"
    );
    pst.setString(1, "value for first column");
    pst.setInt(2, 42);
    pst.setDate(3, /*...some date...*/);
    pst.execute();
    

    问号是占位符,其中准备好的陈述将放置值。即使参数是字符串,也不要在问号周围加上引号;这是在幕后处理的,也是使用准备好的陈述的部分原因。请注意,参数编号从1开始,而不是0。

    阅读SQL语法以及如何正确使用预准备语句; this site可能有用。