«Первое соединение JSP приводит к тому, что второе соединение не работает после его завершения» - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь получить две данные (GenreID & GameID) из двух разных таблиц (жанр и игры) и вставить их в другую таблицу (games_genre). Однако после успешного добавления GenreID он закроет соединение с базой данных, даже если я создал еще одно новое соединение с базой данных.

Я попытался создать соединение 1 и соединение 2 с одной и той же базой данных. Connection1 используется для вставки GenreID, а connection2 используется для вставки GameID

<%@ page import="java.sql.*,java.util.*,java.text.*,java.text.SimpleDateFormat" %>
String gametitle = request.getParameter("gametitle");
String [] checkbox1 = request.getParameterValues("checkbox");

try {
   Class.forName("com.mysql.cj.jdbc.Driver");
   String connURL ="jdbc:mysql://localhost/assignment?user=root&password=root&serverTimezone=UTC"; 

   Connection conn = DriverManager.getConnection(connURL);
   Connection conn2 = DriverManager.getConnection(connURL);

   Statement stmt = conn.createStatement();   
   if (checkbox1!= null){
      for(String s: checkbox1){
       String sqlStr2 = "Select * FROM genre WHERE GenreName='" + s + "'";  
       ResultSet rs = stmt.executeQuery(sqlStr2);
       while(rs.next()){
          String genreid = rs.getString("GenreID");
          String sqlStr3 = "INSERT INTO games_genre(GenreID) VALUES ('" + genreid + "')";
          int j = stmt.executeUpdate(sqlStr3);  
          if (j>0) {
           out.println("Adding GenreID Successfully!");}
       }                
      }
   }
   conn.close();

   Statement stmt2 = conn2.createStatement();
   String sqlStr4 = "Select * FROM games WHERE GameTitle='" + gametitle +"'";
   ResultSet rs2 = stmt2.executeQuery(sqlStr4);
   if(rs2.next()){
      String gameid = rs2.getString("GameID");
      String sqlStr5 = "INSERT INTO games_genre(GameID) VALUES ('" + gameid + "')";
      int k = stmt2.executeUpdate(sqlStr5); 
      if (k>0) {
     out.println("Adding GameID Successfully!");            
      }
   }

   conn2.close();
} catch (Exception e) {
   out.println("Error :" + e);
}

Добавление игры успешно! Добавление GenreID успешно! Ошибка: java.sql.SQLException: операция не разрешена после закрытия ResultSet

1 Ответ

0 голосов
/ 18 мая 2019

Я не понимаю, почему вам нужно создать два Connection, так как вам нужен доступ к одному и тому же database. Итак, просто создайте несколько Statement для выполнения нескольких запросов, как показано ниже:

    Statement stmt=null;
    Statement stmt2=null;
       try {
               Class.forName("com.mysql.cj.jdbc.Driver");
               String connURL ="jdbc:mysql://localhost/assignment?user=root&password=root&serverTimezone=UTC"; 
               Connection conn = DriverManager.getConnection(connURL);
                 stmt = conn.createStatement();   
               if (checkbox1!= null){
                ....
               }
            <!--using same conn object -->
            stmt2 = conn.createStatement();
               String sqlStr4 = "Select * FROM games WHERE GameTitle='" + gametitle +"'";
           ResultSet rs2 = stmt2.executeQuery(sqlStr4);
           if(rs2.next()){
             ...
           }
      <!--finally close connection-->
         conn.close();  

     } catch (Exception e) {
   out.println("Error :" + e);
}

Примечание : также попробуйте использовать PreparedStatement для предотвращения от Sql Injection, поскольку объединение значений в строку запроса небезопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...