我似乎无法弄清楚为什么它一直给我这个:executeQuery方法不能用于更新。我的代码的工作方式是从5个jTextFields中获取文本,然后转换为字符串double和int值。这些值将发送到将粘贴在下面的方法。问题是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());
}
答案 0 :(得分:1)
您的即时错误(我认为)是您的insert语句在列名末尾与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);
注意这种方法有几个明显的优点。首先,您可以将插入查询编写为单个字符串,而不进行连接。这有助于避免您使用空格所犯的错误。其次,语句执行正确转义字符串值(和任何其他值)的工作。
答案 1 :(得分:0)
什么" 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
。