MySQL查询无法在Java中运行

时间:2017-07-28 12:13:58

标签: java mysql jdbc

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) {

    }

4 个答案:

答案 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在查询中设置参数。