2014-10-09 94 views
0

我正在編寫一個與Oracle數據庫接口的Java Web應用程序。我使用PreparedStatements,因爲Hibernate會讓事情變得複雜。Oracle JDBC PreparedStatement忽略尾部空格

由於正在寫入數據庫的程序中存在一個錯誤,因此我需要搜索的字段具有寫入該值的尾隨空格。我用引號包圍了這個值來演示空格。

"testFTP_receipt521  " 

當我做的SQLDeveloper選擇查詢,我能得到一個結果,當我運行:

...and yfs_organization.ORGANIZATION_KEY='testFTP_receipt521'; 

(無空格)

然而,當我使用PreparedStatement,我沒有得到任何結果當我嘗試:

...and yfs_organization.ORGANIZATION_KEY=?"); 
preparedStatement.setString(1, "testFTP_receipt521"); 

(無空格)

,當我嘗試:

...and yfs_organization.ORGANIZATION_KEY=?"); 
preparedStatement.setString(1, "testFTP_receipt521  "); 

(含空格)

有沒有我可以爲這個結果與一個PreparedStatement查詢任何方式,或者我應該嘗試其他的方法呢?

感謝您的幫助。

+0

希望它可以幫助我沒想到這一點,但是可能返回testFTP_receipt521_test,除了結果我想。 – user1472409 2014-10-09 15:59:44

+0

你可以試試'TRIM(yfs_organization.ORGANIZATION_KEY)=?'。 – OldCurmudgeon 2014-10-09 16:02:33

回答

0

也許你可以使用它像這樣...

...and yfs_organization.ORGANIZATION_KEY like '%testFTP_receipt521%'; 

這種方式將返回所有reg其中包含「testFTP_receipt521」獨立的空白。

,我在你的代碼看到這部分

...and yfs_organization.ORGANIZATION_KEY=?"); 
preparedStatement.setString(1, "testFTP_receipt521"); 

我的東西,這是正確的方式

...and yfs_organization.ORGANIZATION_KEY='?'"); 

你需要把各地的標準報價Antoher事情

1

由於寫入數據庫的程序中存在缺陷,因此我需要對字段CH對於已經尾隨所述的情況下空間

也許,如果你的Oracle版本是足夠近,可以考慮增加一個virtual column含有正確值的表?

ALTER TABLE yfs_organization ADD (
    ORGANIZATION_KEY_FIXED VARCHAR(80) 
    GENERATED ALWAYS AS (TRIM(ORGANIZATION_KEY)) VIRTUAL 
); 
在你的代碼

然後,唯一的變化是使用ORGANIZATION_KEY_FIXED查詢DB:

SELECT ID,ORGANIZATION_KEY_FIXED 
    FROM yfs_organization 
    WHERE ORGANIZATION_KEY_FIXED='testFTP_receipt521' 

(試試http://sqlfiddle.com/#!4/8251d/1

這可能避免散在你們應用需要解決該錯誤的代碼。一旦它得到修復,可能會緩解過渡。

作爲一個額外的好處,如果您也需要,可以在虛擬列上添加索引。

0

如果您有修改查詢的能力,您可以TRIM(...)列值並執行比較。例如:?

...和TRIM(yfs_organization.ORGANIZATION_KEY)=「);