我需要每天更新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]);
}
答案 0 :(得分:3)
那里有三个主要问题:
您在使用引号的地方不使用引号。
我不知道任何使用INSERT ... SET
语句的数据库。
您对SQL注入攻击持开放态度。
强制性漫画#3:
相反:
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可能有用。