2014-11-12 2 views
0

Я создал форму jsp и сервлет, чтобы заполнить базу данных в mysql с помощью tomcat, но когда я нажимаю кнопку «Отправить» для передачи значений в базу данных, она показывает сообщение о том, что были затронуты 0 строк в таблице. В журнале сервера отображается исключение нулевого указателя. Я добавил MySQL JDBC драйвер, а также JSTL 1.2.2 в библиотеки. Я создал два исключенных класса java для установления соединения db и выполнения запросов.Не удается заполнить базу данных через сервлет

Вот код servelet:

public class SubmitUser extends HttpServlet { 

private DbUpdate dbup = new DbUpdate(); 


protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 

    String profession = request.getParameter("profession"); 
    String features = request.getParameter("features"); 

    String sql = "INSERT INTO test values('profession','features')"; 
    int i = dbup.insertValues(sql); 

Вот файл DbUpdate.java, который содержит выполнение запроса

public class DbUpdate { 

    private Statement st; 
    private int i; 
    private Connection c; 

    private DbConnection dbcon = new DbConnection(); 


    public int insertValues(String sql){ 
     try { 
      c = dbcon.connectDB(); 

      Statement st = c.createStatement(); 
      System.out.println("connected"); 
      i = st.executeUpdate(sql); 
     } catch (SQLException ex) { 
      Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     return i; 
    } 

    public static void main (String[] args){ 
     //DbConnection dbcon =new DbConnection(); 
     //dbcon.connectDB(); 
     DbUpdate dbup = new DbUpdate(); 


    } 

} 

Наконец файл DbConnection.java который установить соединение

public class DbConnection { 

    private String driver = "com.mysql.jdbc.Driver"; 
    private String url = "jdbc:mysql://localhost:3306/online_feedback"; 
    private Connection con = null; 
    private Statement st; 
    //private int i; 


    public Connection connectDB(){ 
     try { 
      Class.forName(driver); 
      Connection con = DriverManager.getConnection(url, "root", ""); 
      System.out.println("Conn obj :::" + con); 
     } catch (ClassNotFoundException ex) { 
      Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (SQLException ex) { 
      Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     return con; 
    } 


    public static void main (String []args){ 

     DbConnection db = new DbConnection(); 
     db.connectDB(); 
    } 

} 

Я не могу понять, что пошло не так

Заранее спасибо

Это то, что я получаю в Servlet войти

SEVERE: Servlet.service() for servlet [SubmitUser] in context with path [/Feedback] threw exception 
 
java.lang.NullPointerException 
 
\t at feedback.DbUpdate.insertValues(DbUpdate.java:32) 
 
\t at feedback.SubmitUser.processRequest(SubmitUser.java:76) 
 
\t at feedback.SubmitUser.doGet(SubmitUser.java:120) 
 
\t at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
 
\t at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
 
\t at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
 
\t at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
 
\t at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
 
\t at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
 
\t at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
 
\t at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
 
\t at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
 
\t at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
 
\t at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
 
\t at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
 
\t at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 
 
\t at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
 
\t at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
 
\t at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
 
\t at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
 
\t at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
 
\t at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
 
\t at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
 
\t at java.lang.Thread.run(Thread.java:745)

+0

SQL-запрос вы написали неправильно. – sumanta

+0

Пожалуйста, покажите NullPointerException stacktrace. – Jason

+0

Вам не нужен 'public static void main()' в каждом классе. Поскольку они не исполняются. – gprathour

ответ

0

Я буду считать, что у вас есть какие-то дубликат ключа проверки. Ваш запрос должен реально использовать параметры связывания, но ваш SQL может быть исправлен, как

// String sql = "INSERT INTO test values('profession','features')"; 
String sql = "INSERT INTO test values('" + profession + "','" 
    + features + "')"; 

На данный момент вы вставляете константы профессии и особенностью.

PreparedStatement С, это может выглядеть как

public int insertValues(String profession, String features) { 
    String sql = "INSERT INTO test values(?, ?)"; 
    Connection conn; 
    PreparedStatement ps; 
    try { 
     conn = dbcon.connectDB(); 

     ps = conn.prepareStatement(sql); 
     ps.setString(1, profession); 
     ps.setString(2, features); 
     return ps.executeUpdate(); 
    } catch (SQLException ex) { 
     Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, 
       null, ex); 
    } finally { 
     if (ps != null) { 
      try { 
       ps.close(); 
      } catch (Exception ignored) { 
      } 
     } 
     if (conn != null) { 
      try { 
       conn.close(); 
      } catch (Exception ignored) { 
      } 
     } 
    } 
    return 0; 
} 
+0

sql был определенно странным, но не вызвал бы NullPointerException, что является основной причиной этой проблемы. – Jason

+0

Я пробовал его с использованием подготовленных операторов и всех других соответствующих изменений, но все же я получаю ошибку http 500 с исключением null-указателя :( – userSu

+0

@Suchini. Тогда ваше соединение, вероятно, «пусто». Посмотрите, как вы подключаетесь. –

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