java第二个sql语句不工作

标签 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 上的数据就会正确插入。

谁能告诉我我做错了什么?

最佳答案

你有几处错误:

  • 插入数据必须用 executeUpdate() 而不是 executeQuery() 来完成
  • 你应该了解prepared statements如果您的参数包含必须转义的引号等字符,这将避免 SQL 注入(inject)攻击和不正确的查询。
  • 您不应该像现在这样忽略 SQLExceptions,因为它们包含有助于识别问题的错误消息。不要捕获那些异常。如果您捕获到它们,则抛出一个运行时异常来包裹它们。

关于java第二个sql语句不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12997483/

相关文章:

java - java 属性文件中的 "\"是什么意思?

java - 获取二维数组的行数和列数而不对其进行迭代

java - RUNNABLE 线程 - 它移动了吗?

sql - 如何正确构造此 sql 查询?

ruby-on-rails - 在 Cucumber 中的每一步之前自动切换 PostgreSQL 架构 - "BeforeStep"?

java - [Java]在循环内声明多维数组

java - 验证所需参数的可能性?

spring - PostgresQL + Spring JPA : org. postgresql.util.PSQLException:错误:无法将类型 bytea 转换为没有时区的时间戳

postgresql - 为什么在我的测试中 PostgreSQL 9.2 比 9.1 慢?

database - Django 自定义唯一在一起约束