2011-08-05 16 views
0

データベースとの接続時に以下のコードで文字列照合が正しく行われていません。両方の値は同じですが、対応する操作は実行されません。前もって感謝します!で、ご返信用javaの文字列照合操作

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.sql.*; 
import javax.swing.JFrame; 
public class NewJFramefin extends javax.swing.JFrame implements ActionListener 
{ 

public NewJFramefin() 
{ 
    initComponents(); 
    add(jl1); 
    add(jf1); 
    jb1.setActionCommand("OK"); 
    jb1.addActionListener(this); 
    add(jb1); 
    jb2.setActionCommand("CANCEL"); 
    jb2.addActionListener(this); 
    add(jb2); 
    jb3.addActionListener(this); 
    add(jb3); 
} 

public void closewindow() 
{ 
    System.exit(1); 

} 
public void actionPerformed(ActionEvent e) 
{ 
     String find=jf1.getText(); 
     String ev=e.getActionCommand(); 
     String check; 
     String str="jdbc:odbc:dsn1"; 
     try 
     { 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      Connection con=DriverManager.getConnection(str); 
      Statement s=con.createStatement(); 
      s.execute("select * from Table1"); 
      ResultSet res=s.getResultSet(); 
      if(res!=null) 
      { 
       while(res.next()) 
       { 
        check=res.getString(1); 
        System.out.println("STRING FROM DB:"+check + find); 
        if(check==find) 
        { 
         System.out.println("MEANING:"+res.getString(2)); 
        } 
        if(ev.equalsIgnoreCase("OK") &&(find.equalsIgnoreCase(check))) 
        { 
         jf2.setText(res.getString(2)); 
         add(jf2); 

        } 
        else if(ev.equalsIgnoreCase("CANCEL")) 
        { 
         jf2.setText(" cancelled "); 
         add(jf2); 
         jf1.setText(" "); 
         add(jf1); 
        } 
        else if(ev.equalsIgnoreCase("EXIT")) 
        { 

         closewindow(); 
        } 

       } 
      } 


     }   
     catch(Exception ew) 
     { 

     } 
} 


public static void main(String args[]) 
{ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new NewJFramefin().setVisible(true); 
     } 
    }); 
} 
} 

おかげで上記のコードでは、正確な問題は、我々は、コード「jf1.setText(ヌル)」を含める必要がありそうでない、比較nはトリミングしなければならないということですfriends..theコンストラクタ

+4

文字列を比較するのに '=='を使うべきではなく、代わりに '.equals(..)'メソッドを使うべきです –

答えて

4

問題は

if(check==find) 

if(check.equals(find)) 

==は、Javaで文字列比較を行いませんする必要があり、おそらくです。オブジェクトが同一かどうかをチェックします(同じオブジェクト)

0

文字列インスタンスを==と比較しないでください。 string1.equals(String2)を使用してください。 ==は、両方の変数に同じ参照が保持されているかどうかをチェックします。両方の文字列に同じ文字が含まれているかどうかはチェックされません。

0

操作A == Bは、2つのオブジェクト参照が両方とも同じオブジェクトを指していることを識別することです。

操作A.equals(B)は、2つのオブジェクト参照の両方に同じ値が含まれていることを識別することです。

文字列は独立して作成されるため(一方は作成するコードで作成され、もう一方はJDBCレイヤーで構築されるため)、同じオブジェクトを参照することはできませんので、equals演算子を使用する必要があります。

0

Hunter McMillen氏によると、==を文字列の比較に使用しないでください。 2つの文字列に==を使用すると、同じ文字列オブジェクトである場合にのみtrueが返されます。一方、equals()メソッドは、2つのStringの内容が同じ場合はtrueを返します。