Обычно мы отделяем логику базы данных от сервлета.Потому что ваш код будет сложнее поддерживать, если у вас много сервлетов (вы должны снова и снова переписывать соединения с базой данных для каждого сервлета).Это также не рекомендуется с точки зрения безопасности.Среди других причин ...
Вот что вы можете сделать, чтобы упростить задачу.Создайте другой класс, который вы будете использовать только для соединений с базой данных, и всякий раз, когда вы захотите что-то сделать с вашей базой данных, вы можете вызывать этот класс (который я покажу вам, как это сделать ниже):
public class DBConnection {
private static String url = null;
private static Connection conn = null;
public static Connection getConnection(){
try{
Class.forName("com.mysql.jdbc.Driver");
url = "jdbc:mysql://localhost:3306/e_manager";
conn = DriverManager.getConnection(url,"root","2timeLearning!");
} catch (Exception e) {
System.out.println(e);
}
return conn;
}
}
Есть еще одна полезная вещь, которую нужно знать, которая называется Model-View-Controller (MVC) ... Это способ разделить ваше программное обеспечение на три взаимосвязанные части, опять же, одна из причин состоит в том, чтобы сделать егопроще в управлении.В вашем виде настройки вы можете просматривать ваши представления как страницы jsps / html, контроллеры - это ваши сервлеты, а ваши модели - то, что вы используете для взаимодействия между ними.
Давайте создадим модель для обработки как ваших событий, так и ваших смен (но на самом деле нечто подобное должно быть отдельным)
Итак, давайте создадим еще один класс, здесь я назову его EventsAndShifts
.В этом классе мы будем обрабатывать различные операции с базой данных.Обычно мы создаем другой класс для соединений с базой данных EventsAndShifts (что называется Шаблон доступа к данным , для краткости DAO), но в этом примере мы просто сделаем это в том же классе.
public class EventsAndShifts{
//i noticed you wanted to insert the event id for a shift, you can't do it the way you wanted to, you have to do it like this (this method will return an int)
public int setEventInfo(String title, String description, String start, String end, String guestNo){
int eventID = 0; //initialize
//get connection from our DBConneciton class we created earlier
try(Connection conn= DBConnection.getConnection()){
//returning the generated keys lets us get the row id of what we insert
PreparedStatement pst = conn.prepareStatement("INSERT INTO event(title, description, start, end, guest_no) VALUES(?, ?, ?, ?, ?);", Statement.RETURN_GENERATED_KEYS);
pst.setString(1, title);
pst.setString(2, description);
pst.setString(3, start);
pst.setString(4, end);
pst.setInt(5, Integer.parseInt(guestNo));
pst.executeUpdate();
//now get the eventID
ResultSet rs = pst.getGeneratedKeys();
while (rs.next()) {
eventID = rs.getInt(1); //get the id of the inserted event
}
} catch (SQLException e) {
e.printStackTrace();
}
//we don't need to close our db connection because the try statement does it for us
return eventID; //return the eventID
}
public void setShiftInfo(int eventID, String ss, String es, String pos){
//get connection from our DBConneciton class we created earlier
try(Connection conn= DBConnection.getConnection()){
PreparedStatement pst = conn.prepareStatement("INSERT INTO shift(event_id, start, end, positions)VALUES(?, ?, ?, ?);");
pst.setInt(1, eventID);
pst.setString(2, ss);
pst.setString(3, es);
pst.setInt(4, Integer.parseInt(pos));
pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Теперь у нас есть все эти настройки, давайте сделаем немного магии:
@Override
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
//get our parameters
String title = request.getParameter("title");
String description = request.getParameter("description");
String start = request.getParameter("start");
String end = request.getParameter("end");
String guest_no = request.getParameter("guest_no");
String ss = request.getParameter("startshift");
String es = request.getParameter("endshift");
String pos = request.getParameter("positions");
EventsAndShifts eas = new EventsAndShifts(); //instantiate our EventsAndShifts class
//insert into event table and return eventID
int eventID = eas.setEventInfo(title,description,start,end,guest_no);
//use eventID and insert into event table shift table
eas.setShiftInfo(eventID,ss,es,pos);
//all done
response.sendRedirect("/viewEvents.jsp");
}
Надеюсь, это поможет вам лучше понять, как собрать все это вместе, дайте мне знать, если что-то не такне работает или если у вас есть вопросы.