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
equalsメソッドを使用してください。 "NULL" .equals(test)などです。 – sagneta
文字列比較のために '=='の代わりに 'String.equalsIgnoreCase'を使うのが良いです – Pons
これは私のために働いていました。 **私はjavaで文字列の比較を理解していないことを知らなかった。**ありがとう! – Yaerox