3

コードが既存のデータについてデータベースをチェックし、何も見つからない場合は、ユーザーが入力したデータがデータベースに挿入される Java コードを作成しようとしています。

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");

        // username1, password1, nickname1, email1, phone_no1 - should be unique //

        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="Username "; }
            else
            { u2=""; }
            if (password1.equals(p1))
            { p2="Password "; }
            else
            { p2=""; }
            if (nickname1.equals(n1))
            { n2="Nickname "; }
            else
            { n2=""; }
            if (email1.equals(e1))
            { e2="Email-ID "; }
            else
            { e2=""; }
            if (phone_no1.equals(ph1))
            { ph2="Phone-Number "; }
            else
            { ph2=""; }

            invalid_data=""+u2+""+p2+""+n2+""+e2+""+ph2+" has/have already been used! Try Again.";
            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();
    }

次のように例外を示します。

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] クエリ値の数と宛先フィールドが同じではありません。

それが何を意味するのかわかりません。SQL文やJAVAの問題でしょうか?

実際、データベースにオートナンバー型フィールドを追加しました。挿入,''SQL ステートメントの最初の閉じ括弧の直前にエクストラを追加すると、 SQL Syntax の Field Type errorという別の例外が発生します。データベースによって生成されたもの以外の値をフィールドに含めることはできないため、エラーはそのオートナンバー型フィールドにあると主に考えています。

4

2 に答える 2

1

あなたが得ている例外は、insert ステートメントが原因のようです:

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

テーブルに挿入しようとしているデータ フィールドに一重引用符が含まれているかどうかを確認し、含まれている場合はエスケープします。これは、クエリの解析方法を混乱させる可能性があります。

于 2013-10-14T16:58:56.690 に答える
0

try catch ブロックを導入し、例外を取得して確認します。それが rs.next の場合、カーソルは最後の 1 つ前にある必要があり、データがない場合は false を返すため、安全なはずです。

于 2013-10-14T16:15:01.477 に答える