Java MySQL——字段列表中的未知列
我不明白为什么下面的更新在控制台中运行良好,但在我的Java代码中失败Java MySQL——字段列表中的未知列,java,mysql,sql,mariadb,Java,Mysql,Sql,Mariadb,我不明白为什么下面的更新在控制台中运行良好,但在我的Java代码中失败 MariaDB [testdb]> DESCRIBE datasift_geo; +-------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-----------------
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”--但这会继续抛出未知列名错误现在这很有趣。请仔细检查,万一列名有拼写错误。以下是我们开发人员有时会犯的一些愚蠢错误:):)