2012-01-27 2 views
3

Murach의 Java Servlets 및 JSP 2nd Edition을 읽었습니다. 그는 .bat 파일을 통해 자동으로 설치되는 데이터베이스를 제공합니다.sql/java 이외에 무엇을 해야할지 모르겠다

나는 그의 예를 시험해 보았고 잘 동작합니다.

이제 데이터베이스를 사용하여 on을 만들려고하고 있는데 아무 일도 일어나지 않았습니다.

JSP : : 이미 많은 것들을 시도하고 나는 데이터베이스 아무것도에 검사 할 때 무슨 일이 일어나고

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 


import java.sql.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 


/** 
* 
* @author Camus 
*/ 
public class addToEmailList extends HttpServlet { 

    /** 
    * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. 
    * @param request servlet request 
    * @param response servlet response 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

      String firstName = request.getParameter("firstName"); 
      String lastName = request.getParameter("lastName"); 
      String emailAddress = request.getParameter("emailAddress"); 

      User user = new User(); 
      user.setFirstName(firstName); 
      user.setLastName(lastName); 
      user.setEmailAddress(emailAddress); 

      String query ="DELETE FROM user WHERE FirstName = 'Diogo'"; 

      try { 
       String dbURL="jdbc:mysql://localhost:3306/murach"; 
      String username ="root"; 
      String password = "sesame"; 
        Connection connection = DriverManager.getConnection(dbURL, username, password); 

        Statement statement = connection.createStatement(); 
        statement.executeUpdate(query); 
       connection.close(); 
      } 
      catch (Exception e) { 
       e.printStackTrace(); 
     } 


      String URL = "/result.jsp"; 
      RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(URL); 
      dispatcher.forward(request, response); 


    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> 
    /** 
    * Handles the HTTP <code>GET</code> method. 
    * @param request servlet request 
    * @param response servlet response 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    /** 
    * Handles the HTTP <code>POST</code> method. 
    * @param request servlet request 
    * @param response servlet response 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    /** 
    * Returns a short description of the servlet. 
    * @return a String containing servlet description 
    */ 
    @Override 
    public String getServletInfo() { 
     return "Short description"; 
    }// </editor-fold> 
} 

<%-- 
    Document : index 
    Created on : 27/01/2012, 9:20:02 AM 
    Author  : Camus 
--%> 

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Form</title> 
    </head> 
    <body> 
     <h1>Type your information here!</h1> 
     <form action="addToEmailList" method="get"> 
      <input type="text" name="firstName">First Name<br> 
      <input type="text" name="lastName"> Last Name<br> 
      <input type="text" name="emailAddress"> email 
      <input type="submit" value="Submit"> 
     </form> 
    </body> 
</html> 

서블릿 여기에 다음과 같은 코드입니다. 다른 쿼리를 시도했지만 다시 업데이트되지 않았습니다. 너희들 내가 뭘 잘못하고 있는지 실마리가 있니?

도와주세요. 나는 그것이 기본적인 실수가되어야한다고 생각하지만, 나는 배우면서 실제로 무슨 일이 일어나고 있는지 모른다.

미리 감사드립니다.

답변

4

왜 양식을 제출할 때 DELETE 쿼리를 사용하고 있는지 궁금합니다. 나는 이것이 INSERT가되어야한다고 생각한다.

한 가지 문제가 너무 많이 발생한다고 생각합니다. 한 번에 JSP, 서블릿 및 데이터베이스에 대해 배우고 있습니다. 너무 많은 일이 일어나고 있습니다.

컴퓨터 과학은 모두 분해에 관한 문제입니다. 복잡한 문제는 더 작고 관리하기 쉬운 것으로 분해하여 해결하십시오.

데이터베이스를 가져 오려면 서블릿이나 JSP가 필요하지 않습니다. 그 일을 먼저하십시오.

다음은 내가 권하고 싶습니다. Person 클래스부터 시작하십시오.

package model; 

public class Person { 
    private String firstName; 
    private String lastName; 
    private String email; 

// Add constructors, getters, equals, hashcode, etc. 
} 

그리고 지속성을위한 인터페이스로 시작 :

package persistence; 

public interface PersonDao { 
    List<Person> find(String lastName, String firstName); 
    List<Person> find(); 
    void save(Person p); 
    void update(Person p); 
    void delete(Person p); 
} 

가 그런 다음 DAO 인터페이스를 구현 :

package persistence; 

public class PersonDaoImpl implements PersonDao { 
    private Connection connection; 

    public PersonDaoImpl(Connection connection) { 
     this.connection = connection; 
    } 

    // Implement all the JDBC methods here. 
} 

이 같은 유틸리티 클래스 당신을 도울 수 있습니다. 그것을 사용하여 데이터베이스에 성공적으로 연결하고 일부 작업을 수행 할 수 있는지 확인하십시오.

package persistence; 

import java.sql.*; 
import java.util.*; 

/** 
* util.DatabaseUtils 
* User: Michael 
* Date: Aug 17, 2010 
* Time: 7:58:02 PM 
*/ 
public class DatabaseUtils 
{ 
    private static final String DEFAULT_DRIVER = "oracle.jdbc.driver.OracleDriver"; 
    private static final String DEFAULT_URL = "jdbc:oracle:thin:@host:1521:database"; 
    private static final String DEFAULT_USERNAME = "username"; 
    private static final String DEFAULT_PASSWORD = "password"; 
/* 
    private static final String DEFAULT_DRIVER = "org.postgresql.Driver"; 
    private static final String DEFAULT_URL = "jdbc:postgresql://localhost:5432/party"; 
    private static final String DEFAULT_USERNAME = "pgsuper"; 
    private static final String DEFAULT_PASSWORD = "pgsuper"; 
*/ 
/* 
    private static final String DEFAULT_DRIVER = "com.mysql.jdbc.Driver"; 
    private static final String DEFAULT_URL = "jdbc:mysql://localhost:3306/party"; 
    private static final String DEFAULT_USERNAME = "party"; 
    private static final String DEFAULT_PASSWORD = "party"; 
*/ 

    public static void main(String[] args) 
    { 
     long begTime = System.currentTimeMillis(); 

     String driver = ((args.length > 0) ? args[0] : DEFAULT_DRIVER); 
     String url = ((args.length > 1) ? args[1] : DEFAULT_URL); 
     String username = ((args.length > 2) ? args[2] : DEFAULT_USERNAME); 
     String password = ((args.length > 3) ? args[3] : DEFAULT_PASSWORD); 

     Connection connection = null; 

     try 
     { 
      connection = createConnection(driver, url, username, password); 
      DatabaseMetaData meta = connection.getMetaData(); 
      System.out.println(meta.getDatabaseProductName()); 
      System.out.println(meta.getDatabaseProductVersion()); 

      String sqlQuery = "SELECT PERSON_ID, FIRST_NAME, LAST_NAME FROM PERSON ORDER BY LAST_NAME"; 
      System.out.println("before insert: " + query(connection, sqlQuery, Collections.EMPTY_LIST)); 

      connection.setAutoCommit(false); 
      String sqlUpdate = "INSERT INTO PERSON(FIRST_NAME, LAST_NAME) VALUES(?,?)"; 
      List parameters = Arrays.asList("Foo", "Bar"); 
      int numRowsUpdated = update(connection, sqlUpdate, parameters); 
      connection.commit(); 

      System.out.println("# rows inserted: " + numRowsUpdated); 
      System.out.println("after insert: " + query(connection, sqlQuery, Collections.EMPTY_LIST)); 
     } 
     catch (Exception e) 
     { 
      rollback(connection); 
      e.printStackTrace(); 
     } 
     finally 
     { 
      close(connection); 
      long endTime = System.currentTimeMillis(); 
      System.out.println("wall time: " + (endTime - begTime) + " ms"); 
     } 
    } 

    public static Connection createConnection(String driver, String url, String username, String password) throws ClassNotFoundException, SQLException 
    { 
     Class.forName(driver); 

     if ((username == null) || (password == null) || (username.trim().length() == 0) || (password.trim().length() == 0)) 
     { 
      return DriverManager.getConnection(url); 
     } 
     else 
     { 
      return DriverManager.getConnection(url, username, password); 
     } 
    } 

    public static void close(Connection connection) 
    { 
     try 
     { 
      if (connection != null) 
      { 
       connection.close(); 
      } 
     } 
     catch (SQLException e) 
     { 
      e.printStackTrace(); 
     } 
    } 


    public static void close(Statement st) 
    { 
     try 
     { 
      if (st != null) 
      { 
       st.close(); 
      } 
     } 
     catch (SQLException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public static void close(ResultSet rs) 
    { 
     try 
     { 
      if (rs != null) 
      { 
       rs.close(); 
      } 
     } 
     catch (SQLException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public static void rollback(Connection connection) 
    { 
     try 
     { 
      if (connection != null) 
      { 
       connection.rollback(); 
      } 
     } 
     catch (SQLException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public static List<Map<String, Object>> map(ResultSet rs) throws SQLException 
    { 
     List<Map<String, Object>> results = new ArrayList<Map<String, Object>>(); 

     try 
     { 
      if (rs != null) 
      { 
       ResultSetMetaData meta = rs.getMetaData(); 
       int numColumns = meta.getColumnCount(); 
       while (rs.next()) 
       { 
        Map<String, Object> row = new HashMap<String, Object>(); 
        for (int i = 1; i <= numColumns; ++i) 
        { 
         String name = meta.getColumnName(i); 
         Object value = rs.getObject(i); 
         row.put(name, value); 
        } 
        results.add(row); 
       } 
      } 
     } 
     finally 
     { 
      close(rs); 
     } 

     return results; 
    } 

    public static List<Map<String, Object>> query(Connection connection, String sql, List<Object> parameters) throws SQLException 
    { 
     List<Map<String, Object>> results = null; 

     PreparedStatement ps = null; 
     ResultSet rs = null; 

     try 
     { 
      ps = connection.prepareStatement(sql); 

      int i = 0; 
      for (Object parameter : parameters) 
      { 
       ps.setObject(++i, parameter); 
      } 

      rs = ps.executeQuery(); 
      results = map(rs); 
     } 
     finally 
     { 
      close(rs); 
      close(ps); 
     } 

     return results; 
    } 

    public static int update(Connection connection, String sql, List<Object> parameters) throws SQLException 
    { 
     int numRowsUpdated = 0; 

     PreparedStatement ps = null; 

     try 
     { 
      ps = connection.prepareStatement(sql); 

      int i = 0; 
      for (Object parameter : parameters) 
      { 
       ps.setObject(++i, parameter); 
      } 

      numRowsUpdated = ps.executeUpdate(); 
     } 
     finally 
     { 
      close(ps); 
     } 

     return numRowsUpdated; 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 내가 말했듯이 나는 모든 것을 시도하고 있었다. 내 DB가 업데이트되는지 여부를 확인하는 가장 빠른 방법이기 때문에이 쿼리를 사용하고 있습니다. 처음에는 선택을 시도했지만 작동하지 않았습니다. – Camus

+0

다시 한번 감사드립니다. 하지만 내가 말했듯이 나는 초보자에 불과하다. 나는 인터페이스와 지속성이 무엇을 의미하지 않습니다. 감사합니다 – Camus

+0

학습 할 시간입니다. 지속성은 "데이터베이스 또는 파일 시스템에 저장하여 응용 프로그램이 실행되지 않아도 데이터를 사용할 수 있음"을 의미합니다. 그것은 실행 사이에 "지속"합니다. – duffymo

관련 문제