2013-07-30 7 views
0

Obtenir une erreur pour le code jsp suivant:JSP simple page ne se charge pas

<%@ 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+"')"); 


%> 

L'erreur am S'y rendre est la suivante:

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) 

Je ne sais pas ce qui va mal ici. Je suis nouveau à jsp alors s'il vous plaît aidez-moi avec une explication simple. Le numéro de port, le mot de passe du nom d'utilisateur et tout le reste correct pour le fichier jsp. Y a-t-il autre chose que je néglige? Aidez-moi s'il vous plaît à rectifier l'erreur.

+2

Je ne pense pas que vous ayez montré le bon bit de votre JSP Vous avez montré un peu qui fait un select, mais votre erreur se réfère à un – Qwerky

+0

désolé mauvais code vérifier maintenant je l'ai édité –

+1

.. et autre chose. Vous dites que vous êtes en train d'apprendre JSP, donc je voudrais souligner qu'il y a beaucoup de mauvaises choses dans votre exemple, comme faire de la DB dans le JSP, et injecter du SQL. – Qwerky

Répondre

1

Tout d'abord, don't use scriptlets in JSP file, vous pouvez avoir cette logique dans Servlet ou dans une classe DAO.

chose suivante, la ligne suivante devrait être une seule ligne:

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

Même mettre cela en une seule ligne:

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

mieux construire une chaîne de requête avec des espaces réservés et utiliser PreparedStatement et ensemble chaque valeur. Il permettra d'éviter toutes ces questions de formatage de chaîne ainsi que de SQL Injection.

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

quel est le problème dans l'énoncé de la requête? –

+0

voir que j'ai obtenu cet exemple de http://www.9lessons.info/2008/09/jsp-login-page-to-connect-mysql-atabase.html, –

+0

il semble que ça marche bien là-bas. Je veux juste savoir pourquoi le code existant ne fonctionne pas –

0

Soupçonnant sur String mise en forme, essayez ceci:

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

essayé, il ne fonctionne pas –

0

Vous devez inclure la chaîne littérale avec des guillemets doubles -> » Je ne peux pas exécuter le code, mais votre erreur est dans votre instruction SQL.. Le terme 'insérer dans les valeurs utilisateur' est interprété comme une chaîne

+0

il devrait être interprété comme une chaîne, devrait-il? –

+0

Essayez l'indice que The New Idiot a répondu. Désolé, je ne veux pas être offensant. C'est juste son pseudo. Vous pouvez mieux utiliser les 'instructions préparées' avec des espaces réservés et insérer les valeurs ultérieurement. –