2013-07-30 118 views
0

得到一個錯誤以下JSP代碼:簡單的JSP頁面沒有加載

<%@ page import ="java.sql.*" %> 
<%@ page import ="javax.sql.*" %> 
<% 
String user=request.getParameter("userid"); 
session.putValue("userid",user); 
String pwd=request.getParameter("pwd"); 
String fname=request.getParameter("fname"); 
String lname=request.getParameter("lname"); 
String email=request.getParameter("email"); 
Class.forName("com.mysql.jdbc.Driver"); 
java.sql.Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", 
"root","123"); 
Statement st= con.createStatement(); 
ResultSet rs; 
int i=st.executeUpdate("insert into users values ('"+user+"','"+pwd+"','"+fname+"', 
'"+lname+"','"+email+"')"); 


%> 

錯誤我得到的是如下:

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 15 in the jsp file: /db/reg.jsp 
String literal is not properly closed by a double-quote 
12: "root","123"); 
13: Statement st= con.createStatement(); 
14: ResultSet rs; 
15: int i=st.executeUpdate("insert into users values ('"+user+"','"+pwd+"','"+fname+"', 
16: '"+lname+"','"+email+"')"); 
17: 
18: 


Stacktrace: 
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102) 
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:331) 
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:469) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:378) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:353) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:340) 
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

我不知道是怎麼回事錯在這裏。我是jsp的新手,所以請幫助我一個簡單的解釋。端口號,用戶名密碼和其他一切正確的jsp文件。還有什麼我可以忽略的。請幫我糾正錯誤。

+2

我不認爲你已經展示了你的JSP的正確位,你已經顯示了一點,但是你的錯誤指的是一個選擇插入。 – Qwerky

+0

抱歉錯誤的代碼。現在檢查我已編輯它 –

+1

..另一件事。你說你正在學習JSP,所以我想指出在你的例子中有很多不好的東西,比如在JSP中做數據庫工作和SQL注入。 – Qwerky

回答

1

首先,don't use scriptlets in JSP file,您可以在Servlet或某些DAO類中擁有此邏輯。

接下來的事情,下面的線應該是一個單行:

java.sql.Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123"); 

即使把這個一行:

int i=st.executeUpdate("insert into users values ('"+user+"','"+pwd+"','"+fname+"','"+lname+"','"+email+"')"); 

更好地構建一個查詢字符串佔位符,並使用PreparedStatement和集每個值。它將阻止所有這些String格式問題以及從SQL Injection

String query = "insert into users values (?,?,?,?,?,?)"; 
PreparedStatement statement = connection.prepareStatement(query); 
statement.setString(user); 
............. 
............. 
int updateSuccessful = statement.executeUpdate(); 
+0

查詢語句中的問題是什麼? –

+0

看到我從http://www.9lessons.info/2008/09/jsp-login-page-to-connect-mysql-atabase.html, –

+0

得到這個例子,它似乎在那裏工作正常。我只想知道爲什麼現有的代碼無法正常工作 –

0

懷疑上String格式,試試這個:

java.sql.Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+ 
"test","root","123"); 
+0

試過,它不工作 –

0

必須包含字符串文字用雙引號 - >」我不能運行的代碼,但你的錯誤是在你的SQL語句。術語'插入用戶值'被解釋爲一個字符串。

+0

它應該被解釋爲一個字符串,應該嗎? –

+0

試試新白癡已經回答的提示。對不起,我不想冒犯。這只是他的暱稱。您可以更好地在佔位符中使用「準備好的語句」,並在稍後插入值。 –