операция сопоставления строк в Java - PullRequest
0 голосов
/ 05 августа 2011

Соответствие строк не выполняется должным образом в приведенном ниже коде при подключении к базе данных. Оба значения одинаковы, но соответствующие операции не выполняются. Может кто-нибудь помочь мне исправить это? Заранее спасибо!

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

спасибо за ваш ответ, друзья. Точная проблема в приведенном выше коде заключается в том, что мы должны обрезать n по сравнению, иначе следует включить код " jf1.setText (null); " в конструкторе.

Ответы [ 4 ]

4 голосов
/ 05 августа 2011

Проблема, вероятно,

if(check==find)

должна быть

if(check.equals(find))

== не выполняет сравнение строк в Java;проверяет идентичность объектов (один и тот же объект)

0 голосов
/ 05 августа 2011

Как сказал Хантер МакМиллен, вы не должны использовать == для сравнения строк.Использование == в двух строках вернет true, только если они являются одним и тем же объектом String.С другой стороны, метод equals() вернет true, если две строки имеют одинаковое содержимое.

0 голосов
/ 05 августа 2011

Операция A == B состоит в том, чтобы идентифицировать, что две ссылки на объекты указывают на один и тот же объект.

Операция A.equals(B) состоит в том, чтобы идентифицировать, что обе ссылки на объекты содержат одно и то же значение.

Поскольку ваши строки создаются независимо (одна создается в коде, который вы пишете, а другая создается на уровне JDBC), они не могут ссылаться на идентичные объекты, вам нужно использовать оператор равенства.

0 голосов
/ 05 августа 2011

Никогда не сравнивайте экземпляры String с ==. Используйте string1.equals(String2). == проверяет, содержат ли обе переменные одну и ту же ссылку, а не если обе строки содержат одинаковые символы.

...