Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用update语句时出现MySQL错误:“;您的SQL语法有错误…”;_Java_Mysql_Sql - Fatal编程技术网

Java 使用update语句时出现MySQL错误:“;您的SQL语法有错误…”;

Java 使用update语句时出现MySQL错误:“;您的SQL语法有错误…”;,java,mysql,sql,Java,Mysql,Sql,我从MYSQL服务器收到此错误: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“0”=0、“1”=0、“2”=0、“3”=0、“4”=0、“5”=0、“6”=0、“7”=0、“8”=0”附近使用的正确语法 以下是有关update语句的代码: PreparedStatement getLocations = con.prepareStatement(sql); ResultSet adjacentSpots = getLocations.executeQuery();

我从MYSQL服务器收到此错误:

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“0”=0、“1”=0、“2”=0、“3”=0、“4”=0、“5”=0、“6”=0、“7”=0、“8”=0”附近使用的正确语法

以下是有关update语句的代码:

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();
}
PreparedStatement getLocations=con.PreparedStatement(sql);
ResultSet adjacentSpots=getLocations.executeQuery();
if(adjacentSpots.next()){
国际频率;
int total_freq=邻接点.getInt(“total_freq”);
新频率[0]+=总频率;
对于(int i=0;i
例如:

更新频繁路由集合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,其中设备id='some string'和intersection1='some string'和intersection2='some string'


我相信在匹配数据表中列的名称和类型时不会出错。有人能在我的update语句中发现语法错误吗?

如果您的列名确实是示例中显示的数字,那么这可能是问题的根源。Mysql列名不能完全由数字组成,除非使用倒勾(`)来引用它们

发件人:(另请参阅。)

标识符可以以数字开头,但除非引用,否则不能仅由数字组成


因此,如果您只是在这一行将单引号切换为反勾号,“
sql+=”,“+iAdjusted+”=“+newfreqs[i]你应该准备好去…

前面的答案是:

发件人:(请参见[此处][1]

标识符可以以数字开头,但除非引用,否则不能仅由数字组成

事实上,MYSQL似乎根本不允许在查询中使用纯数字标识符。只要我在查询中指定这些标识符,就会有语法错误,不管它是否被引用。但是,如果我不指定列名,例如在INSERT语句中,我可以说,“INSERT into _frequency_routes values(一些值,一些值,'一些字符串'…)”,它将写入数据库而不会导致任何错误

因此,一个简单的解决方案是将这些仅数字字段的名称更改为仅非数字字段。在这种情况下,我可以:

更新频繁路由集合total\u 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,slot21=4,slot22=6,slot23=10,其中设备id='some string'和intersection1='some string'和intersection2='some string'


并相应地更改字段的名称。

有人能在我的update语句中发现语法错误吗?不,这取决于你如何通过慢慢地减少代码来发现你的输入错误,即在执行sql查询之前进行一次.display查询。你忘记了最重要的一条信息——查询本身。@Squirrel对此我很抱歉:/我提供了一个查询示例now@DawidFerenczy对不起!我举了一个例子,它似乎是不允许的,即使它被引用。我以前试过这个,它给了我同样的错误。实际上,我决定将这些列的名称改为以char开头。现在它解决了问题!