3 Stimmen

Java.sql.SQLException: [Microsoft][ODBC Microsoft Access-Treiber] Anzahl der Abfrageergebnisse und Zielfelder stimmen nicht überein.

Ich versuche, einen JAVA-Code zu erstellen, in dem der Code die Datenbank auf vorhandene Daten überprüft und wenn keine gefunden werden, werden die vom Benutzer eingegebenen Daten in die Datenbank eingefügt.

try {

        username1=request.getParameter("txt1");
        password1=request.getParameter("p1");
        nickname1=request.getParameter("nick_name1");
        email1=request.getParameter("email_1");
        phone_no1=request.getParameter("phone_no_1");
        date1=request.getParameter("date");
        month1=request.getParameter("month");
        year1=request.getParameter("year");
        school1=request.getParameter("school_1");
        class1=request.getParameter("class_1");
        section1=request.getParameter("section_1");

        // Benutzername1, Passwort1, Spitzname1, E-Mail1, Telefonnummer1 - sollten eindeutig sein //

        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        con=DriverManager.getConnection("jdbc:odbc:harshan_web");

        if (con != null)
        {

            st=con.createStatement();

           ResultSet rs=st.executeQuery("select * from account_registration where username='"+username1+"' or password='"+password1+"' or nickname='"+nickname1+"' or email='"+email1+"' or phone='"+phone_no1+"'");

                if (rs.next())
                {

                u1 = rs.getString("username");
                p1 = rs.getString("password");
                n1 = rs.getString("nickname");
                e1 = rs.getString("email");
                ph1 = rs.getString("phone");
                invalid_data = "";

            if (username1.equals(u1))
            { u2="Benutzername "; }
            else
            { u2=""; }
            if (password1.equals(p1))
            { p2="Passwort "; }
            else
            { p2=""; }
            if (nickname1.equals(n1))
            { n2="Spitzname "; }
            else
            { n2=""; }
            if (email1.equals(e1))
            { e2="E-Mail-ID "; }
            else
            { e2=""; }
            if (phone_no1.equals(ph1))
            { ph2="Telefonnummer "; }
            else
            { ph2=""; }

            invalid_data=""+u2+""+p2+""+n2+""+e2+""+ph2+" wurden bereits verwendet! Versuchen Sie es erneut.";
            response.sendRedirect("index.jsp?invalid_data="+invalid_data+""); 

            }                   
                else
                {

                st.executeUpdate("insert into account_registration values('"+username1+"','"+password1+"','"+nickname1+"','"+date1+"','"+month1+"','"+year1+"','"+school1+"','"+class1+"','"+section1+"','"+email1+"','"+phone_no1+"')");
                response.sendRedirect("reg_complete.html"); 

                }
        }

        else
        {                
            response.sendRedirect("error.html");                
        }

        /* TODO output your page here. You may use following sample code. */

    } catch (Exception e) {} 
      finally {            
        out.close();
    }

Es zeigt die Ausnahme wie folgt an.

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Treiber] Anzahl der Abfragewerte und Ziel-Feldern sind nicht gleich.

Ich weiß nicht, was das bedeutet. Liegt das Problem beim SQL-Statement oder bei JAVA?

Eigentlich habe ich ein AutoNumber-Feld in meiner Datenbank hinzugefügt. Wenn ich ein zusätzliches ,'' direkt vor der ersten schließenden Klammer im insert SQL-Statement hinzufüge, gibt es eine weitere Ausnahme, die sagt Feldtypfehler in SQL-Syntax. Ich denke hauptsächlich, dass der Fehler für dieses AutoNumber-Feld ist, weil das Feld keinen Wert außer dem enthalten kann, was von der Datenbank generiert wird.

1voto

Bill the Lizard Punkte 384619

Die Ausnahme, die Sie erhalten, scheint aufgrund Ihrer Einfügeanweisung zu sein:

st.executeUpdate("insert into account_registration values('"+username1+"','"+password1+"','"+nickname1+"','"+date1+"','"+month1+"','"+year1+"','"+school1+"','"+class1+"','"+section1+"','"+email1+"','"+phone_no1+"')");

Überprüfen Sie, ob Sie einzelne Anführungszeichen in einem der Datenfelder haben, die Sie in die Tabelle einfügen möchten, und escapen Sie sie, falls Sie dies tun. Dies könnte verwirren, wie Ihre Abfrage geparst wird.

0voto

dogrgaut Punkte 27

Fügen Sie einen Try-Catch-Block ein und erfassen Sie die Ausnahme, um zu bestätigen, ob es sich um rs.next handelt. Der Cursor muss eine Position vor dem letzten sein und(false) zurückgeben, wenn keine Daten vorhanden sind. Daher sollte dies sicher sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X