2017-05-04 13 views
0

現在、JavaでJSPページをコーディングしています。私が抱えている問題は、文字列CNICCNICcと比較することができないということです。私は基本的に同じCNIC(社会保障番号)で2つ以上のエントリを持っていないと比較しています。私はコーディングでそれほど良くはないので、問題がどんなものであるかを親切に精緻化する。Javaの文字列とSQLデータベースの文字列を比較できません

String uname=request.getParameter("UName"); 
     String name=request.getParameter("Name"); 
     String age=request.getParameter("Age"); 
     String address=request.getParameter("Address"); 
     String CNIC=request.getParameter("CNIC"); 
     Class.forName("com.mysql.jdbc.Driver"); 
     Connection c=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql1","root", ""); 
     Statement s= c.createStatement(); 
     PreparedStatement ps=c.prepareStatement("insert into hitchhikerdetails(Uname,Name,Age,Address,CNIC) values(?,?,?,?,?)"); 

     ResultSet rs=s.executeQuery("select * from hitchhikerdetails"); 
     ps.setString(1, uname); 
     ps.setString(2, name); 
     ps.setString(3, age); 
     ps.setString(4, address); 
     ps.setString(5, CNIC); 
     String CNICc; 

     rs.beforeFirst(); 
     while(rs.next()) 
     {  
      CNICc=rs.getString(5); 
      //out.println(CNIC); 
      //UNamec=rs.getString(1); 
      if(CNIC.equals(CNICc)) 
      { 
       pageContext.forward("Hitchhiker-error.jsp"); 
      } 
      else 
      { 
       ps.executeUpdate(); 
       pageContext.forward("Hitchhiker-success-register.jsp"); 
      } 
     } 


    %> 
+0

あなたはどのような問題に直面していますか? –

+0

「CNIC」と「CNICc」を比較することはできません。 CNICcがDBからフェッチされている間、CNICはローカルストリングです。問題はコードの下部にあります。 whileループがどこにあるか。 –

+0

あなたが比較できないことを意味しますか? 何か問題がありますか? またはコードは正常に実行されていますが、CNICとCNICcは決して一致しません。結果は常にfalseです。 –

答えて

0

あなたが直面している問題は、select *が結果を返す可能性があり、そのうちの1つが一致する可能性があることです。

したがって、更新を1回実行し、残りの時間は作成します。

boolean isCNICFound = false; 
while(rs.next()) 
    {  


     CNICc=rs.getString(5); 
     //out.println(CNIC); 
     //UNamec=rs.getString(1) 
      System.out.println("From Result Set : " + CNICc + " -comparing this with : " + CNIC); 
      if(null != CNICc) { 
       if(CNIC.equals(CNICc)) { 
        isCNICFound = true; 
        break; 
       } 
      }   
     } 

if(isCNICFound){ 
pageContext.forward("Hitchhiker-error.jsp"); 
} else { 
ps.executeUpdate(); 
       pageContext.forward("Hitchhiker-success-register.jsp"); 
} 
+0

私はあなたのコードを試しました。 CNICとCNICcの文字列はまだ一致していません。私はDB用にWorkbenchを使用しています。私はまた、SQLコマンド 'Select * from CNIC'を試しました。ここでは、CNIC列だけを探すべきだと思っていましたが、aswelでは動作しませんでした。 –

+0

比較する値を出力し、結果セットから有効な列を取得しているかどうかを確認します。 –

+0

私は何か変わったものを見つけました。 'CNICc = rs.getString(5)'のために使用しているカラムのインデックス番号は、正しいカラム、例えば 'CNICc = rs.getString(6)'に対して一度インクリメントされる必要があります。それでも文字列は一致しています。私が問題と思うのは、whileループが実行されているときにDBの最初の一致が見つかった場合でも、それはページを転送しているということです。列の残りの部分をチェックしません。 –

0

Connection、StatementおよびResultSetを閉じる必要があります。これを行うには、以下のようにtry-with-resourcesを自動的に使用します。

次にSELECT *rs.getString(5)が間違った列を選ぶ可能性があります(どの列が列挙されるのかは分かりません)。 いずれかをrs.getString("CNIC")以上にするには、別のクエリを実行します。

また、エラーが発生しても正常に動作するように、文を区切ります。

forwardより後で、出力がブラウザに書き込まれなくなりました。すぐに繰り返さCNICを照会するには

try (Connection c = DriverManager.getConnection(
      "jdbc:mysql://localhost:3306/mysql1", "root", "")) { 

     try (Statement s = c.createStatement(); 
       ResultSet rs = s.executeQuery("select * from hitchhikerdetails")) { 

      while (rs.next()) { 
       String CNICc = rs.getString("CNIC"); 
       if (CNIC.equals(CNICc)) { 
        pageContext.forward("Hitchhiker-error.jsp"); 
        return; 
       } 
      } 
     } 

     try (PreparedStatement ps = c.prepareStatement(
       "insert into hitchhikerdetails(Uname,Name,Age,Address,CNIC)" 
       + " values(?,?,?,?,?)")) { 
      ps.setString(1, uname); 
      ps.setString(2, name); 
      ps.setString(3, age); 
      ps.setString(4, address); 
      ps.setString(5, CNIC); 
      ps.executeUpdate(); 
      pageContext.forward("Hitchhiker-success-register.jsp"); 
      return; 
     } 
    } 

 try (PreparedStatement s = c.prepareStatement(
       "select UName from hitchhikerdetails where CNIC = ?")) { 
      s.setString(1, CNIC); 
      try (ResultSet rs = s.executeQuery()) { 
       if (rs.next()) { 
        pageContext.forward("Hitchhiker-error.jsp"); 
        return; 
       } 
      } 
     } 
0

まあそれは私がそれを適切な値と比較するために取得するために1列のインデックスをインクリメントしなければならなかったが判明しました。 CNICc=rs.getstring(5)のように間違っている間違った列を指していました。これは、dbの設定値が同じインデックスであるためです。しかし、私は値を表示したいときに、増分されたインデックスを使用しなければなりませんでした。 like CNICc=rs.getstring(6)

+1

より良い 'CNICc = rs.getString(" CNIC ");'; '*'の列番号は不明です。 –