2016-08-01 4 views
-1

Warum ist diese Abfrage rs=st.executeQuery(query); nicht ausgeführt, um eine Tabelle aus der Datenbank auszuwählen?Warum diese Anweisung rs = st.executeQuery (query); excuting nicht?

String gender = request.getParameter("gender"); 
    if (gender != null) { 
    String table = gender.equals("teacher") ? "teacher2" : "student"; 

    String query ="select username,password from "+table+" where username='"+name+"' AND password='"+abc+"'"; 

    rs=st.executeQuery(query); //Why This statement having error 
    } 

Mysql Abfrage für diese Tabelle enter image description here ich denke, diese Abfrage falsch ist

"select username,password from "+table+" where username='"+name+"' AND password='"+abc+"'"; 

Ich habe zwei Tabellen eine für den Lehrer ist und man ist für Studenten beide haben alle dieselben Spalten mit gleichen Daten Art.

Wie kann ich Tabelle aus MySQL-Datenbank auswählen, um Anmeldung zu erhalten. Ich habe zwei Tabellen, eine ist für Schüler und eine ist für Lehrer, wenn Benutzer wählen Lehrer, Radio-Taste und geben Sie Benutzername und Passwort, wenn Benutzer Benutzername und Passwort gleich mysql Datenbank Benutzername und Passwort wird er Login-Fall für Studenten ist, wenn er Schüler wählen Radio aber und geben Sie Benutzername und Passwort ein, wenn Benutzername, Passwort gleich Studententabelle von MySQL-Benutzernamen, Passwort er wird Login erhalten.

Warum diese Abfrage keine Tabelle

enter image description here kommenden

rs=st.executeQuery(query);

Bild Fehler wählen ausgeführt wird // Fehler

index.jsp

<form method="GET " action="statement.jsp" autocomplete="on"> 

<input id="username" name="username" required="required" type="text" placeholder="Username"/> 
<input id="password" name="password" required="required" type="password" placeholder="Password" /> 

<input type="radio" name="gender" value="teacher" checked/> Teacher 
<input type="radio" name="gender" value="Student"/>Student 

<input type="submit" value="Login" /> 
</form> 

statement.jsp

<%@page import="java.sql.DriverManager"%> 
<%@page import="java.sql.ResultSet"%> 
<%@page import="com.mysql.jdbc.Statement"%> 
<%@page import="com.mysql.jdbc.Connection"%> 
<%@page import=" java.sql.SQLException" %> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 

<%@include file="db conn.jsp" %> 
<% 
String name=request.getParameter("username"); 
String abc=request.getParameter("password");  

String gender = request.getParameter("gender"); 

if (gender != null) { 
String table = gender.equals("teacher") ? "teacher2" : "student"; 

String query ="select username,password from "+table+" where username='"+name+"' AND password='"+abc+"'"; 

    rs=st.executeQuery(query); //Why This statement having error 
    } 
    if(rs.next()) 
    { 
    response.sendRedirect("main.jsp"); 
    } 
    else 
    { 
    response.sendRedirect("index.jsp"); 
    } 
    %> 

db conn.jsp // Für die Datenbankverbindung

<%@page import="com.mysql.jdbc.Connection"%> 
    <%@page import="com.mysql.jdbc.Statement"%> 
    <%@page import="java.sql.ResultSet"%> 
    <%@page import="java.sql.DriverManager"%> 
    <%@page contentType="text/html" pageEncoding="UTF-8"%> 
    <!DOCTYPE html> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>JSP Page</title> 
    </head> 
    <body> 
    <h1>Hello World!</h1> 

    <%@ page import ="java.sql.*" %> 
    <% 
    Connection c1 = null; 
    Statement st = null; 
    ResultSet rs = null; 

    Class.forName("com.mysql.jdbc.Driver"); 
    c1 = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/teacher","root", "abcde"); 
    { 
    System.out.println("Couldn't find the driver!"); 
    System.out.println("Couldn't connect: print out a stack trace and exit."); 
    System.out.println("We got an exception while creating a statement:" + "that probably means we're no longer connected."); 

    st = (Statement) c1.createStatement(); 
    System.out.println("Statement Created Successfully"); 
    { 
    System.out.println("We got an exception while creating a statement:" + "that probably means we're no longer connected."); 
    } 
    if (c1!= null) { 
    System. out.println("Hooray! We connected to the database!"); 
    } else { 
    System.out.println("We should never get here."); 
    }} 
    %> 

Fehler

HTTP Status 500 - 
type Exception report 
message 
description The server encountered an internal error() that prevented it from fulfilling this request. 
exception 

org.apache.jasper.JasperException: Exception in JSP: /statement.jsp:29 

26: String table = gender.equals("teacher") ? "teacher2" : "student"; 
27: // replace dots with your values 
28:  String query ="select * from " +table+ "where username='"+name+"' AND password='"+abc+"'"; 
29:  st.executeQuery(query); 
30:  

Stacktrace:

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

Warum diese Abfrage nicht eine Tabelle aus MySQL-Datenbank auswählt. Ich habe zwei Tabellen in MySQL, eine ist Student und andere ist Lehrer2 beide haben die gleiche Spalte mit dem gleichen Datentyp. Wenn der Benutzer den Radioknopf des Schülers anwählt, dann würde der Benutzername und das Passwort des Schülertabellen angezeigt werden, wenn Benutzer Lehrer, Radioknopf, dann Lehrer2 Benutzername und Passwort wählen würde, um eine Anmeldung

+1

Es scheint, als würden Sie Leerzeichen um die Schlüsselwörter herum vermissen. –

+0

Bitte verwenden Sie eine vorbereitete Aussage. Erleichtert das Lesen und Ausführen des Codes ... –

+0

Das ist offensichtlich kein SQL-Problem. Überprüfen Sie Ihre 'table'- und' query'-Variablen vor der Ausführung. BTW: Es ist schön, Geschlechter als "Lehrer" und "Student" zu haben –

Antwort

1

in Ihren String-Verkettungen zu bekommen, haben Sie vergessen Leerzeichen am Ende von einigen worde wie

'from'+ table //'fromteacher2' 

eine gute Art und Weise zu setzen diese in Abfragen geschehen zu verhindern, ist PreparedStatements zu verwenden. Es empfiehlt sich, sie im Umgang mit Variablen zu verwenden.Sie können PreparedStatements wie folgen verwenden:

import java.sql.PreparedStatement; 
public class Foo(){ 
    public static void main(String[] args) { 
     //see code above, skipping initialisation 
     pst = con.prepareStatement("SELECT username,password FROM ? where username= ? AND password= ?"); 
     pst.setString(1, table); 
     pst.setString(1, username); 
     pst.setString(1, abc); 
     pst.executeQuery(); 
    } 
} 

Abschluss, die Sie gerade in Ihrem sqlquery einen einfachen Syntaxfehler aufweisen, die durch das Hinzufügen der Räume gelöst werden kann, oder durch die Verwendung (es gute Praxis ist, tut es einfach) PreparedStatements

+0

Was wird der JSP-Code meines Codes sein, wo ich falsch bin? Ich denke, in SQL-Abfrage ist falsch und hier 'rs = st.executeQuery (Abfrage);' im falschen –

+0

der Fehler ist, wo Sie Ihre Stiche zusammenfügen. Sie haben "from" + table, was zu "fromteacher2" führt. Sie müssen "from" + table eingeben, so dass Sie Leerzeichen zwischen Ihren Wörtern haben. Besser ist es, das PreparedStatement zu verwenden, das ich in meinem Beispiel einsetze. Sie können es einfach kopieren anstatt in die Reihen 28 und 29 (was ist die Hauptfunktion im letzten Codeteil von meiner Antwort) – miThom

+0

in Ihrem Bild haben Sie anderen Code als Sie hier einfügen, also werde ich einen anderen Blick auf den Code bekommen, den du hier hast – miThom

Verwandte Themen