【问题标题】:MySQL query not working in JavaMySQL查询在Java中不起作用
【发布时间】:2017-07-28 12:13:57
【问题描述】:
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 table (zone_id,位置) 价值观 ((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 (SQLException ex) {

    }

【问题讨论】:

  • 你有什么异常吗?
  • 你可以从一些 sql GUI 客户端执行 sqlInsertBeacon 吗?
  • 将“S”添加到 VALUE。价值观!!
  • 内部 SELECT 周围的 ' 是否有原因?
  • 您肯定遇到了异常,否则您的程序不会只是“停止”。

标签: java mysql jdbc


【解决方案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...

【讨论】:

  • 谢谢,但这不起作用,我编辑了我的问题以显示输出
【解决方案2】:

问题是因为子查询返回了多个结果,打印出堆栈跟踪有助于调试此错误。在子查询中使用 Limit 1 也解决了这个问题。

【讨论】:

    【解决方案3】:

    请按照以下语法使用查询:

    INSERT INTO table
    (column1, column2, ... )
    VALUES
    (expression1, expression2, ... ),
    (expression1, expression2, ... ),
    ...;
    

    您的表名用单引号括起来,它的 VALUES 不重视这些小事

    【讨论】:

    • ` 不是单引号
    • 那些不是“单引号”' 而是“反引号”`,一个 MySQL 特定引号而不是标准 SQL 的“双引号”"
    • 感谢您的建议,但这并没有成功
    【解决方案4】:

    正确的 INSERT INTO SELECT 语句如下所示:

    INSERT INTO table2
    SELECT * FROM table1
    WHERE condition;
    

    您可以使用PreparedStatement 在查询中设置参数。

    【讨论】:

    • OPs 问题中的选择是子选择
    • 所以,他的查询可以是这样的:INSERT INTO beacon(zone_id, location) SELECT id, Point(-121.9453802,37.3256131) FROM zone WHERE GeographicalID = '6311599';
    猜你喜欢
    • 2012-04-08
    • 2013-05-07
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2014-06-12
    • 1970-01-01
    相关资源
    最近更新 更多