JDBC 插入语句错误



我似乎无法弄清楚为什么它一直给我这个:executeQuery方法不能用于更新。我的代码的工作方式是它从 5 个 jTextFields 中获取文本,然后转换为字符串双精度值和整数值。这些值将发送到将粘贴在下面的方法。问题是sql语句无法正常工作,至少我认为这就是问题所在。列也是正确的。

try{
    String host = "jdbc:derby://localhost:1527/Comics";
    String uName = "Brenton";
    String uPass = "password";
    Connection con = DriverManager.getConnection(host, uName, uPass);
    Statement stat = con.createStatement();
    String sql = "INSERT INTO LIBRARY(TITLE, ISSUE, PRICE, PUBLISHER, YEAR_ISSUED)" + "VALUES( '" + title + "', " + issue + ", " + price + ", '" + publisher + "', " + year + ")";
    ResultSet rs = stat.executeQuery(sql);
    }
    catch(SQLException err){
        System.out.println(err.getMessage());
    }

您的直接错误(我认为(是您的插入语句在列名的末尾和 VALUES 关键字的开头之间没有空格。 但是,如果您使用预准备语句,所有这些都可以避免:

String sql = "INSERT INTO LIBRARY(TITLE, ISSUE, PRICE, PUBLISHER, YEAR_ISSUED) VALUES(?, ?, ?, ?, ?)";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, title);
ps.setString(2, issue);
ps.setDouble(3, price);
ps.setString(4, publisher);
ps.setYear(5, year);

请注意此方法的几个明显优点。 首先,您可以将插入查询编写为单个字符串,不进行串联。 这有助于避免您在使用空格时所犯的错误。 其次,语句正确执行转义字符串值(和任何其他值(的工作。

">

executeQuery方法不能用于更新"是什么意思,如下所示:

某些 SQL 语句用于查询。SQL 查询通常是一个SELECT语句,它从数据库中返回一组行,您可以使用 JDBC ResultSet 处理这些行。

SQL 更新是 INSERTUPDATEDELETE 语句,它修改数据库中的行,但不返回任何行(而是返回您修改的行(。

因此,您可以查询,也可以更新。

要查询,您使用 executeQuery ,然后返回一个ResultSet

要更新,请使用 executeUpdate ,然后返回一个int

对于executeQuery,你传递一个SELECT SQL 语句。

对于executeUpdate,你传递一个INSERTUPDATEDELETE SQL语句。

在代码中,您正在尝试执行 INSERT SQL 语句,但您正在调用 executeQuery

最新更新