String sqlInsertBeacon = "INSERT INTO `beacon` (zone_id, location) VALUE ('(SELECT id FROM zone WHERE GeographicalID = '" + geometry3 + "')', Point(" + x_coordinate + "," + y_coordinate + "))";
System.out.println("The SQL query is: " + sqlInsertBeacon); // Echo for debugging
int countInserted3 = stmt.executeUpdate(sqlInsertBeacon);
System.out.println(countInserted3 + " records inserted.\n");
当我运行上面的代码时,构建成功但程序在到达执行行时停止。我正在使用此SQL查询输入数据到mysql数据库。我不确定我的查询中的错误在哪里?任何人都可以提出替代方法或发现错误吗?
程序的输出是这样的,因为你可以看到程序,在第二行之后停止运行:
SQL查询是:INSERT INTO表 (zone_id,位置) VALUES ((SELECT id FROM zone WHERE GeographicalID ='6311599'),Point(-121.9453802,37.3256131)) ; 建立成功(总时间:6秒)
有关其他信息,请参阅:
stmt,就像这样创建:
try (
// Step 1: Allocate a database 'Connection' object
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/adhwere2?useSSL=false", "root", "your_new_password"); // MySQL
// Step 2: Allocate a 'Statement' object in the Connection
Statement stmt = conn.createStatement();) {
并且catch异常是:
} catch (SQLException ex) {
}
答案 0 :(得分:1)
尝试这样的事情:
String sqlInsertBeacon = "INSERT INTO `beacon` (zone_id, location)" +
" VALUES ( (SELECT id FROM zone WHERE GeographicalID = '" + geometry3 + "'), Point(" +
x_coordinate + "," + y_coordinate + "))";
刚刚删除内部SELECT
的撇号,并将VALUE
替换为VALUES
...
答案 1 :(得分:1)
问题是因为子查询返回了多个结果,并且打印出堆栈跟踪有助于调试此错误。在子查询中使用限制1也解决了这个问题。
答案 2 :(得分:0)
请根据以下语法使用查询:
INSERT INTO table
(column1, column2, ... )
VALUES
(expression1, expression2, ... ),
(expression1, expression2, ... ),
...;
你的表名是单引号,其VALUES并不重视这些小事
答案 3 :(得分:0)
正确的INSERT INTO SELECT语句如下所示:
INSERT INTO table2
SELECT * FROM table1
WHERE condition;
您可以使用PreparedStatement
在查询中设置参数。