我从MYSQL服务器收到此错误:
您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在''0'= 0,'1'= 0,'2'= 0,'3'= 0,'4'= 0,'5附近使用正确的语法'= 0,'6'= 0,'7'= 0,'8'= 0,'在第1行
以下是有关更新声明的代码:
PreparedStatement getLocations = con.prepareStatement(sql);
ResultSet adjacentSpots = getLocations.executeQuery();
if (adjacentSpots.next()){
int freqAti;
int total_freq = adjacentSpots.getInt("total_freq");
newfreqs[0] += total_freq;
for (int i = 0; i < freqs.length-1; i++) {
freqAti = adjacentSpots.getInt(""+i);
newfreqs[i+1] += freqAti;
}
sql = "update _frequent_routes set total_freq = " + newfreqs[0];
for (int i = 1; i < freqs.length; i++) {
int iAdjusted = i-1;
sql += ", '" + iAdjusted + "' = " + newfreqs[i];
}
sql += " where device_id= '" + deviceID + "' and intersection1= '" +
intersectionName1 + "' and intersection2='" + intersectionName2 + "'";
PreparedStatement updateSpots = con.prepareStatement(sql);
updateSpots.executeUpdate();
}
一个例子是:
update _frequent_routes set total_freq = 2,0 = 0,1 = 0,2 = 0,3 = 0,4 = 0,5 = 0,6 = 0,7 = 0,8 = 0,9 = 0, 10 = 0,11 = 0,12 = 0,13 = 0,14 = 0,15 = 2,16 = 0,17 = 0,18 = 0,19 = 0,20 = 0,21 = 0,22 = 0,23 = 0其中device_id ='some string'和intersection1 ='some string'和intersection2 ='some string'
我确信在匹配数据表中列的名称和类型时没有错误。任何人都可以在我的更新语句中发现语法错误吗?
答案 0 :(得分:0)
如果您的列名确实是示例中显示的数字 - 那么这可能是您的问题的根源。 Mysql列名不能仅由数字组成,除非您使用反引号(`)来引用它们。
标识符可以以数字开头,但除非引用可能不仅仅由数字组成。
因此,如果您只是将单引号切换到此行sql += ", '" + iAdjusted + "' = " + newfreqs[i];
上的反引号,那么您应该很高兴...
答案 1 :(得分:0)
之前的回答是:
来自the docs :(参见[此处] [1]。)
标识符可以以数字开头,但除非引用可能不仅仅由数字组成。
事实上,MYSQL实际上不允许在查询中使用仅数字标识符。只要我在查询中指定了这些标识符,无论是否引用,都会出现语法错误。但是,如果我没有指定列名,例如在INSERT语句中,我可以说,&#34;插入_frequent_routes值(某些值,某些值,&#39;某些字符串&#39; ; ...)&#34;它会写入数据库而不会导致任何错误。
因此,一个简单的解决方案是将这些仅数字字段的名称更改为非数字字段。在这种情况下,我可以这样做:
更新_frequent_routes set total_freq = 94,slot0 = 4,slot1 = 2,slot2 = 6,slot3 = 2,slot4 = 6,slot5 = 4,slot6 = 6,slot7 = 6,slot8 = 8,slot9 = 2, slot10 = 0,slot11 = 2,slot12 = 0,slot13 = 8,slot14 = 0,slot15 = 4,slot16 = 4,slot17 = 4,slot18 = 2,slot19 = 0,slot20 = 4,slot21 = 4,slot22 = 6,slot23 = 10其中device_id =&#39;某些字符串&#39;和intersection1 =&#39;某些字符串&#39;和intersection2 =&#39;某些字符串&#39;
并相应更改字段的名称。