在SQL-Database中插入Resultset的int值

时间:2018-05-16 13:37:56

标签: java mysql sql jdbc

我正在使用MySQL-Server而我正在尝试从另一个表中选择一个ID并将该ID插入表中但它并不是一直都在工作。

代码:

public void submit() throws Exception {

    Connection connection = getConnection();

    Statement stmt = connection.createStatement();
    Statement stmt1 = connection.createStatement();

    ResultSet asset_id = stmt.executeQuery("SELECT id FROM cars.asset_type WHERE asset_type.name =" + "'" + sellables.getValue()+ "'");

    while (asset_id.next()) {
        System.out.println(asset_id.getInt("id"));
    }

    double value = parseDouble(purchased.getText());
    System.out.println(value);

    LocalDate localDate = purchased_at.getValue();

    String insert = "INSERT INTO asset (type_id, purchase_price, purchased_at) VALUES ('"+ asset_id + "','" + value +"','" + localDate +"')";
    stmt1.executeUpdate(insert);
}

我一直收到同样的错误消息。

Caused by: java.sql.SQLException: Incorrect integer value: 'com.mysql.cj.jdbc.result.ResultSetImpl@1779d92' for column 'type_id' at row 1

1 个答案:

答案 0 :(得分:2)

在您的情况下进行两次客户端/服务器往返是没有价值的,所以改为使用单个语句:

INSERT INTO asset (type_id, purchase_price, purchased_at)
SELECT id, ?, ?
FROM cars.asset_type 
WHERE asset_type.name = ?

如果您确实只想插入SELECT查询中的最后一个ID(因为您正在迭代SELECT结果并丢弃所有其他ID),请改用此查询:

INSERT INTO asset (type_id, purchase_price, purchased_at)
SELECT id, ?, ?
FROM cars.asset_type 
WHERE asset_type.name = ?
ORDER BY id DESC -- I guess? Specify your preferred ordering here
LIMIT 1

或者围绕它的JDBC代码:

try (PreparedStatement s = connection.prepareStatement(
    "INSERT INTO asset (type_id, purchase_price, purchased_at) " +
    "SELECT id, ?, ? " +
    "FROM cars.asset_type " +
    "WHERE asset_type.name = ?")) {

    s.setDouble(1, parseDouble(purchased.getText()));
    s.setDate(2, Date.valueOf(purchased_at.getValue()));
    s.setString(3, sellables.getValue());
}

这是使用PreparedStatement,这会阻止SQL injection和语法错误,例如你得到的错误。在这一点上,我真的建议你阅读这些主题!