Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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 MySQL——字段列表中的未知列_Java_Mysql_Sql_Mariadb - Fatal编程技术网

Java MySQL——字段列表中的未知列

Java MySQL——字段列表中的未知列,java,mysql,sql,mariadb,Java,Mysql,Sql,Mariadb,我不明白为什么下面的更新在控制台中运行良好,但在我的Java代码中失败 MariaDB [testdb]> DESCRIBE datasift_geo; +-------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-----------------

我不明白为什么下面的更新在控制台中运行良好,但在我的Java代码中失败

MariaDB [testdb]> DESCRIBE datasift_geo;
+-------------+---------------------+------+-----+---------+-------+
| Field       | Type                | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| datasift_id | bigint(20) unsigned | NO   | PRI | NULL    |       |
| latitude    | decimal(17,14)      | YES  |     | NULL    |       |
| longitude   | decimal(17,14)      | YES  |     | NULL    |       |
| location    | varchar(100)        | YES  |     | NULL    |       |
| coord       | point               | YES  |     | NULL    |       |
+-------------+---------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

MariaDB [testdb]> SELECT * FROM datasift_geo;
+-------------+-------------------+-------------------+------------+-------+
| datasift_id | latitude          | longitude         | location   | coord |
+-------------+-------------------+-------------------+------------+-------+
|        1601 | 51.45713800000000 | -2.60802800000000 | Bristol UK | NULL  |
+-------------+-------------------+-------------------+------------+-------+

MariaDB [testdb]> UPDATE datasift_geo SET coord = GeomFromText('POINT(51.45713800000000 -2.60802800000000)');
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
================

@Test
public void testGeoCoord() throws SQLException {
    int id = 1601;
    float latitude = 51.45713806152344f;
    float longitude = -2.608027935028076f;
    String sql = "UPDATE `datasift_geo` SET `datasift_geo`.`coord` = GeomFromText('POINT(" + latitude + " " + longitude + ")') WHERE datasift_id = " + id;
    // get database connection, create a PreparedStatement, execute the UPDATE
}
======

执行更新的结果

java.sql.SQLSyntaxErrorException:未知列“datasift_geo.coord” 在“字段列表”中


根据您在JAVA代码中编写的SQL,您似乎在SQL中提供了
tableName.ColumnName
。您应该只提供列名

String sql = "UPDATE `datasift_geo` SET **`datasift_geo`.`coord`** = GeomFromText('POINT(" + latitude + " " + longitude + ")') WHERE datasift_id = " + id;
语法是:更新表\u名称集列\u名称
您的Java代码有:更新表\u名称集表\u名称。列\u名称--错误

也可以从异常中看到

因此,您的SQL in Jave代码应该如下所示:

String sql = "UPDATE `datasift_geo` SET `coord` = GeomFromText('POINT(" + latitude + " " + longitude + ")') WHERE datasift_id = " + id;

为什么不只是
coord
(就像您在控制台示例中所做的那样)?这是一个好问题。我尝试过很多排列,认为倒勾可能是问题所在,但都有相同的结果——未知列。我知道您已经检查了许多选项,但我们开发人员总是犯愚蠢的错误。我希望您正在连接到适当的主机和数据库。表可能存在,但列可能不存在。我现在觉得自己很愚蠢。与单元测试代码和控制台连接相比,我在Java代码中连接到了一个不同的数据库。当我切换到正确的数据库时,它按预期工作。请将您的评论作为答案提交,我将接受:)很高兴知道您的问题得到解决:)有时会发生:)谢谢您的回答。SQL字符串的System.out.prinltn返回“UPDATE datasift_geo SET coord=GeomFromText('POINT(51.457138-2.608028)),其中datasift_id=1601”--但这会继续抛出未知列名错误现在这很有趣。请仔细检查,万一列名有拼写错误。以下是我们开发人员有时会犯的一些愚蠢错误:):)