2016-03-08 69 views
0

我需要使用JSP創建登錄,所以我需要使用mysql-connector-java如何使用jsp連接mysql-connector-driver

我插入的文件的jar:mysql-connector-java-5.1.38-bin.jarWEB-INF/lib目錄

,我使用此代碼到JSP文件:

<%@ 
     page import="java.sql.*" 
    %> 

<% 
    String DRIVER = "com.mysql.jdbc.Driver"; 
    String URL_mioDB = "jdbc:mysql://localhost:3306/ditta"; 

    try 
    { 
     Class.forName(DRIVER); 
    } 
    catch (ClassNotFoundException e) 
    { 
     System.err.println("Driver not found" + e); 
    } 

    Connection connessione = null; 
    try 
    { 
     // apro la connesione verso il database. 
     connessione = DriverManager.getConnection(URL_mioDB,"root",""); 
    } 
    catch (Exception e) 
    { 
     System.err.println("Error during connection with db : " + e); 
    } 

    String mail="",pass="",send="",query=""; 

    try 
    { 
     mail=request.getParameter("email"); 
     pass=request.getParameter("password"); 
     send=request.getParameter("send"); 

     out.println("<FORM name='F1' method='post' action='login.jsp'>"); 
      out.println("Email: <INPUT type='text' name='email' value='' placeholder='[email protected]'><BR><BR>"); 
      out.println("Password: <INPUT type='password' name='password' value=''><BR><BR>"); 
      out.println("<INPUT type='submit' name='send' value='Invia'>&nbsp;&nbsp;&nbsp;&nbsp;<INPUT type='reset' name='reset' value='Reset'>"); 
     out.println("</FORM>"); 
    } 
    catch (Exception e) 
    { 
     System.err.println(e); 
    } 

    if(send!=null && mail!="" && pass!="") 
    { 
     query="SELECT * FROM dipendenti WHERE email="+ mail + " AND password=" + pass + ""; 

     Statement statement = connessione.createStatement(); 
     ResultSet resultSet = statement.executeQuery(query); 
     ResultSetMetaData rsmd = resultSet.getMetaData(); 

     for(int i=0;i<=rsmd.getColumnCount();i++) 
     { 
      out.println(resultSet.getString(i)); 
      } 
    } 

%> 

之後,當我點擊發送按鈕頁面給我這個錯誤:

errors image

+0

不管怎樣,你必須粘貼錯誤(「...發生處理JSP頁面的異常...」)不應該是您得到的唯一錯誤消息。嘗試搜索日誌以獲取更具體的消息。 –

回答

0

這裏猜測有點...

我想這可能是關於如何將參數值傳遞給查詢。因此,如果郵件是「[email protected]」,密碼爲「是」,那麼你的查詢結束是:

SELECT * FROM dipendenti WHERE [email protected] AND password=a 

這不是一個正確的SQL。你錯過了引號/撇號。我想嘗試達到這樣的查詢:

SELECT * FROM dipendenti WHERE email='[email protected]' AND password='a' 

這就需要你如何定義

query=... 

與此同時一個簡單的變化,我知道這是不是你問這裏,但我強烈建議你應該閱讀約SQL Injection on Wikipedia。你在這裏做的不是接受用戶輸入到你的後端程序並最終進入數據庫的正確方式。

對於這種非常具體的用例JDBC(和數據庫)編制報表的概念: http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

所以,你會用類似的東西開始:

// not tested 
    query="SELECT * FROM dipendenti WHERE email=? AND password=?"; 
    PreparedStatement statement = connessione.prepareStatement(query); 

    statement.setString(1, mail); 
    statement.setString(2, pass); 

    ResultSet resultSet = statement.executeQuery();