java第二个sql语句不能正常工作

时间:2012-10-21 11:42:40

标签: java postgresql

我正在使用postgresql,并且在将数据插入两个不同的表时遇到一个问题。

我们的想法是插入一些数据tableamizades,然后在tablenotify中插入一些数据。基本上是朋友请求,并且存在与该请求相关联的通知。

我有这段代码:

01    @Override
02    public void AddFriends(int userMakesRequest, int userReceivesRequest, boolean TrueOrFalse, boolean TrueOrFalse2) {
03        String notificacao, userMakesRequestName;
04        Connection connection = null;
05        Statement stmt = null;
06        ResultSet rs = null;
07
08        try {
09            Class.forName("org.postgresql.Driver");
10
11            connection = DriverManager.getConnection("jdbc:postgresql:"
12                    + "//localhost:5432/projecto", "postgres", "admin");
13
14            stmt = connection.createStatement();
15            try {
16
17                stmt.executeQuery("INSERT INTO tableamizades (iduser1,iduser2,amigoaceite1,amigoaceite2) VALUES ( "
18                        + userMakesRequest + " , '" + userReceivesRequest + "' , '" + TrueOrFalse + "' , '"
19                        + TrueOrFalse2 + "');");
20                try {
21
22
23                    rs = stmt.executeQuery("SELECT username FROM utilizadores WHERE iduser = '" + userMakesRequest + "';");
24                    rs.next();
25                    userMakesRequestName = rs.getString("username");
26
27                    notificacao = " O utilizador " + userMakesRequestName + " fez-lhe um pedido de amizade";
28
29                    stmt.executeQuery("INSERT INTO tablenotify (iduser,notificacao) VALUES ( " + userReceivesRequest + " , '" + notificacao + "');");
30                    rs.close();
31
32                } catch (SQLException e) {
33                }
34
35            } catch (SQLException e) {
36            }
37            stmt.close();
38
39            connection.close();
40
41        } catch (Exception e) {
42            e.printStackTrace(System.out);
43        } finally {
44            try {
45                connection.close();
46            } catch (Exception e) {
47                e.printStackTrace(System.out);
48            }
49        }

如果我执行此操作,则会在tableamizades上插入数据,但不会在tablenotify上插入数据。我可以看到在tablenotify上插入数据的代码没问题,因为如果我注释掉第15行到第19行以及第35行和第36行,tablenotify上的数据就会被正确插入。

有人能告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:3)

你有几个错误:

  • 插入数据必须使用executeUpdate(),而不是executeQuery()
  • 如果您的参数包含必须转义的引号等字符,您应该了解prepared statements可以避免SQL注入攻击和错误查询。
  • 您不应该忽略SQLExceptions,因为它们包含有助于识别问题的错误消息。不要抓住那些例外。如果你捕获它们,则抛出一个包装它们的运行时异常。