JDBC插入语句错误

时间:2018-03-12 09:53:51

标签: sql jdbc derby

我似乎无法弄清楚为什么它一直给我这个: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());

    }

2 个答案:

答案 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更新是INSERTUPDATEDELETE语句,它会修改数据库中的行,但不会将任何行返回给您(而是返回您修改过的数量行。

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

要进行查询,请使用executeQuery,然后返回ResultSet

要进行更新,请使用executeUpdate,然后返回int

对于executeQuery,您传递SELECT SQL语句。

对于executeUpdate,您传递INSERTUPDATEDELETE SQL语句。

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