2014-09-29 105 views
1

我不明白爲什麼下面的更新工作正常,在控制檯中,但在我的Java代碼MySQL的 - 在字段列表未知列

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 
} 

======

執行UPDATE

java.sql中的結果.SQLSyntaxErrorException:未知列「datasift_geo.coord」 在「字段列表」

+2

爲什麼不只是'coord'(就像你在控制檯檢查中那樣)? – 2014-09-29 12:53:02

+0

這是一個很好的問題。我已經嘗試了任何數量的置換,認爲反引號可能是問題,但都有相同的結果 - 未知列。 – 2014-09-29 13:01:12

+0

我知道你已經檢查了很多選項,但我們的開發人員總是犯下愚蠢的錯誤。我希望你連接到正確的主機和數據庫。它可能存在表格而不是列。 – 2014-09-29 13:29:53

回答

1

從中你已經寫在Java代碼中的SQL,它似乎您提供tableName.ColumnName,在SQL。你應該只提供列名。

字符串SQL = 「UPDATE SET datasift_geodatasift_geocoord = GeomFromText( '點(」 +緯度+ 「」 +經度+ 「)'),其中datasift_id =」 + ID;

語法是:UPDATE TABLE_NAME SET COLUMN_NAME
Java代碼有:UPDATE TABLE_NAME SET TABLE_NAME.COLUMN_NAME - 錯誤

此外,它可以從異常中可以看出

所以,你在Jave Code中的SQL應該如下:

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

+0

(縮進4空格是代碼的標記。) – 2014-09-29 13:15:51

+0

感謝您的答案。 SQL字符串的System.out.prinltn返回「UPDATE datasift_geo SET coord = GeomFromText('POINT(51.457138 -2.608028)')WHERE datasift_id = 1601」 - 但這會繼續拋出未知列名稱錯誤 – 2014-09-29 13:20:19

+0

現在這很有趣。請仔細檢查,以防萬一,列名稱出現拼寫錯誤。這些是一些愚蠢的錯誤,我們開發者做了一些事情:) :) – abhijitcaps 2014-09-29 13:42:02

相關問題