2013-11-26 51 views
1

我需要檢查在將數據實際插入表之前,該值是否具有適當的大小以插入特定列的表中。如何在將數據插入到sql for DB2中的表之前對列的值進行大小驗證?

例如,

想,我有一個表 'MyTable的' 在DB2 SMALLINT類型的列 'MYSMALLINT',

如果我嘗試插入值,

insert into MyTable(MYSMALLINT) values(12222222222222222222222222222225552); 

在執行上述查詢後,我會得到以下錯誤:

消息:數字文字「122222222222222222222222222 22225552「因爲其值超出範圍而無效。

在這裏,我需要插入數據到表中的Java/JDBC用於與任何數據類型的列之前檢查的值大小(CHAR,VARCHAR,INT,BIGINT,TINYINT,DOUBLE,FLOAT, DECIMAL,REAL,...)。

+0

爲什麼不試着插入,如果有異常,相應地處理它? – Linger

+0

如果我正在執行批處理操作,它會在第100條記錄的第99條記錄時失敗,需要將該數據回滾到正確的位置,所以我不希望插入/回滾支持的開銷 –

+0

@Manikanta_AC您不需要回滾這樣的例外。如果提交,則記錄1-98將被提交,並且記錄99根本不存在。 –

回答

2

你可以用PreparedStatement做到這一點:

PreparedStatement statement = connection.prepareStatement("insert into MyTable(MYSMALLINT) values(?);" 
for(Integer value:values){ 
    try{ 
     statement.setInt(1,value); 
     statement.addBatch(); 
    }catch(SQLException e){ 
     System.err.println("Invalid value: " + e.getMessage()); 
     throw e; 
    } 
} 
statement.executeBatch(); 
+0

當然,這是正確的答案。但是,請您分享我的意見嗎? –

0

您可以在觸發驗證前值,如果它是有效的滿足您的要求。您可以使用UDF驗證值的方式,這樣您就可以在觸發器之外對其進行測試。

0

爲什麼不直接將列映射到正確的Java基元。

Smallint相當於Java中的「short」,所以如果將主變量定義爲short,編譯器將在編譯時檢測到任何錯誤。

insert into MyTable(MYSMALLINT) values(12222222222222222222222222222225552S); 

會被你的java編譯器吐出來。

相關問題