2017-03-20 26 views
-1

我得到一個具有可爲空的varchar2列的數據庫表。值爲字符串「NULL」。當試圖處理結果集時,我遇到了字符串「NULL」不匹配任何內容的問題。Java Oracle - 結果不匹配varchar2「NULL」字符串

我使用的是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

@sagneta這對我有用。 **我不知道我沒有理解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