我正在使用 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/