我似乎无法弄清楚为什么它一直给我这个: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 更新是 INSERT
、 UPDATE
或 DELETE
语句,它修改数据库中的行,但不返回任何行(而是返回您修改的行数(。
因此,您可以查询,也可以更新。
要查询,您使用 executeQuery
,然后返回一个ResultSet
。
要更新,请使用 executeUpdate
,然后返回一个int
。
对于executeQuery
,你传递一个SELECT
SQL 语句。
对于executeUpdate
,你传递一个INSERT
、UPDATE
或DELETE
SQL语句。
在代码中,您正在尝试执行 INSERT
SQL 语句,但您正在调用 executeQuery
。