2017-03-20 16 views
-1

nullable varchar2カラムを持つデータベーステーブルがあります。値は文字列として "NULL"です。結果セットを処理しようとすると、文字列 "NULL"が何も一致しないという問題に直面しています。Java Oracle - 結果がvarchar2 "NULL"と一致しません。String

私はOracle 11g XEデータベースとojdbc6.jarライブラリを使用しています。

私は間違っていますか?動作を再現するための例に続き


SQL:

CREATE TABLE jtest (
    ID NUMBER(3) PRIMARY KEY, 
    TEXT VARCHAR2(30) NULL 
); 
INSERT INTO jtest VALUES (1, 'Test1'); 
INSERT INTO jtest VALUES (2, 'NULL'); 

nullstring.java

public class nullstring { 

final static String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver"; 
final static String DB_URL  = "jdbc:oracle:thin:@myhost:1521:xe"; 
final static String DB_USER  = "myuser"; 
final static String DB_PASS  = "myuserpw"; 

public static void main(String[] args) throws ClassNotFoundException, SQLException, UnsupportedEncodingException { 
    Class.forName(JDBC_DRIVER); 

    Connection hDB = null; 
    hDB = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS); 

    String sCelldata = ""; 
    Statement oStatement = null; 

    oStatement = hDB.createStatement(); 
    ResultSet oResult = oStatement.executeQuery("SELECT id, text FROM jtest"); 

    while (oResult.next()) { 
     for (int i = 1 ; i < (oResult.getMetaData().getColumnCount() + 1); i++) { 
      String test = "NULL"; 
      if (test == "NULL") { 
       System.out.println(">> 1111111111111111111111111111111"); 
      } 
      if (oResult.getString(i) == "NULL") { 
       System.out.println(">> 2222222222222222222222222222222"); 
      } 
      sCelldata = URLDecoder.decode(oResult.getString(i), "UTF-8"); 
      if (sCelldata == "NULL") { 
       System.out.println(">> 3333333333333333333333333333333"); 
      } 

      System.out.println("> [" + i + "] " + sCelldata); 
      sCelldata = ""; 
     } 
    } 

    hDB.close(); 
} 
} 

出力:

>> 1111111111111111111111111111111 
> [1] 1 
>> 1111111111111111111111111111111 
> [2] Test1 
>> 1111111111111111111111111111111 
> [1] 2 
>> 1111111111111111111111111111111 
> [2] NULL 
>> 1111111111111111111111111111111 
+1

equalsメソッドを使用してください。 "NULL" .equals(test)などです。 – sagneta

+0

文字列比較のために '=='の代わりに 'String.equalsIgnoreCase'を使うのが良いです – Pons

+1

これは私のために働いていました。 **私はjavaで文字列の比較を理解していないことを知らなかった。**ありがとう! – Yaerox

答えて

-1

equalsを使用して文字列の比較を行う必要があります。現在、メモリの場所を比較しています。例:

String test = value_from_db; 
if (test == null || "null".equalsIgnoreCase(test)) { 
    System.out.println("test is null, or contains the value 'null'"); 
} 
+0

重複した質問は、それらを閉じて何度も何度も何度も何度も何度も何度も何度もやり直すことで処理する必要があります。 – Tom

関連する問題