2017-02-09 3 views
1

У меня есть эти три таблицы:Как я могу хранить данные, полученные из двух таблиц в другую таблицу в Java/сервлет/JSP

  • users: хранит подробности пользователей, зарегистрированных на моем сайте.
  • events: хранится информация о событиях, которые проводятся на фестивале Technovision.
  • registered_users: хранит сведения о пользователях, зарегистрированных для события.

Когда кто-то нажимает на кнопку «Регистрация», он должен передать параметр user_id в сервлет по имени RegisterServlet через ссылку (якорный тег).

И RegisterServlet Я хочу, чтобы получить данные из таблицы users и events таблицы, так что я могу хранить объединенные столбцы данных в registered_users таблицы.

Я пробовал это сделать, но в некоторых случаях это трудно понять.

Если кто-то может помочь мне в этом сценарии, это было бы здорово.

<a href="/RegisterEvent?id=<%=Integer.parseInt(resultSet.getString("event_id")) %>">Register</a> 

Выше код (кнопка, где пользователь щелкает) Я использовал в JSP, чтобы передать event_id в сервлет, используя ссылку тега.

RegisterServlet.java

package com.event; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.*; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.sql.*; 
import java.io.*; 
import java.util.*; 
import javax.servlet.annotation.MultipartConfig; 
import javax.servlet.http.HttpSession; 
import javax.servlet.http.Part; 

public class RegisterEvent extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     response.setContentType("text/html;charset=UTF-8"); 
     PrintWriter out = response.getWriter(); 
     int i1; 

     HttpSession session = request.getSession(); 
     String username = (String) session.getAttribute("uname"); 

     String event_id = request.getParameter("id"); 

     String fname, lname, email, colgname, event_name; 
     int contact; 

     try { 

      //loading drivers for mysql 
      Class.forName("com.mysql.jdbc.Driver"); 

      //creating connection with the database 
      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/technovision", "root", "root"); 

      String sql1 = "SELECT * FROM `users` WHERE `username`=?"; 

      PreparedStatement ps = con.prepareStatement(sql1); 

      ps.setString(1, username); 

      ResultSet rs = ps.executeQuery(); 

      while (rs.next()) { 
       fname = rs.getString("fname"); 
       lname = rs.getString("lname"); 
       email = rs.getString("emailid"); 
       contact = rs.getInt("mobile"); 
       colgname = rs.getString("colgname"); 
      } 

      String sql2 = "SELECT event_name FROM events WHERE event_id=?"; 

      PreparedStatement ps1 = con.prepareStatement(sql2); 

      ps1.setInt(1, Integer.parseInt(event_id)); 

      ResultSet rs1 = ps1.executeQuery(); 

      while (rs1.next()) { 
       event_name = rs1.getString("event_name"); 
      } 

      String sql3 = "INSERT INTO registered_users(`fname`,`lname`,`email`,`contact`,`college_name`,`event_name`) values (?,?,?,?,?,?)"; 

      PreparedStatement ps3 = con.prepareStatement(sql3); 

      ps3.setString(1, fname); 
      ps3.setString(2, lname); 
      ps3.setString(3, email); 
      ps3.setInt(4, contact); 
      ps3.setString(5, colgname); 
      ps3.setString(6, event_name); 

      i1 = ps3.executeUpdate(); 

      if (i1 > 0) { 
       response.sendRedirect("register-success.jsp"); 
      } 

     } catch (Exception se) { 
      System.out.println(se); 
     } 

    } 
} 
+0

Что происходит с этим кодом, а не с вами, что ли? –

+0

Да, его не работает, показывая ошибку в «fname», возможно, не было инициализировано, я предполагаю, что мой запрос sql1 не запущен – raviloop

+2

Вам не кажется, что это соответствующая информация, которую вы должны включить в свой вопрос? BTW: Это действительно базовое знание Java: если вы инициализируете переменную только в 'while'-loop,' if'-statement или что-то еще, что условно выполняется, тогда компилятор даст вам ошибку, которая может не иметь переменную были инициализированы. В этом случае это также указывает на то, что вы забыли случай использования исключения, в котором пользователь не существует ... –

ответ

0

Вы получаете эту ошибку, потому что вы не inislase свой атрибут, так что вы должны использовать это:

String fname = "", lname = "", email = "", colgname = "", event_name = ""; 

Вместо этого:

String fname, lname, email, colgname, event_name; 

Потому что вы используете их в своем while(){...}, поэтому вы должны их инициализировать

+0

Я попробовал решение, которое вы мне дали, оно выполнено успешно, но таблица 'registered_users' хранит только имя_пользователя, остальное все детали остаются снятыми с таблицы пользователей. я думаю, я должен использовать 'user_id' в качестве моего основного ключа, я не добавил, что этот столбец считает, что мое« имя пользователя »уникально и может выступать в качестве первичного ключа. – raviloop

+0

ok @raviloop и дайте мне знать, что вы получаете, ваша проблема, которую вы просите, решена, это новая проблема :) –

+0

nope я не могу решить эту проблему, теперь мой сервлет 'RegisterEvent' не вызывается, когда нажал на кнопку «зарегистрироваться» (ссылка), я не могу понять, почему – raviloop

Смежные вопросы