2012-02-02 114 views
2

我有一個方法insert()插入一個值列表到用戶選擇的表中。PreparedStatement插入未知數量的值與未知類型

問題是,由於用戶可以選擇表格,該方法不知道要插入多少個值以及它們是哪種類型。我用一個循環來解決可變數量的值,該循環使用stringbuilder將正確數量的「?」 - 字符插入查詢的值部分。

我也有一個循環,將接收到的值分割成一個字符串數組,但我然後有一個問題,像字符串處理整數。我可以使用sql-syntax的一些技巧解決這個問題嗎,還是我需要獲取每種數據類型的數據類型信息?

如果我必須提取有關數據類型的信息,我該怎麼做? (最好是一個sql查詢,只返回類型,因爲我想直接在我的java代碼中使用結果)。

+0

這是有點骯髒,但:您是否嘗試過將所有內容都作爲SQL字符串插入?如果我沒有記錯,有些數據庫在給定數字列的字符串值時會自動將該字符串轉換爲適當的數字類型(但如果無法轉換,則會出現SQL錯誤)。 – Michael 2012-02-02 16:37:02

+1

我想你應該在用戶選擇表格時加載表格的元數據。這會讓你的生活變得更加輕鬆 – MozenRath 2012-02-02 16:41:19

回答

2

首先,我懷疑你在做什麼是錯誤的,或者肯定是次優的。

假設你堅持這是你想要去做的事情,你需要從你的表中檢索一行,然後在ResultSet上調用getMetadata()。

你最終會喜歡的東西:

rs.getMetaData()getColumnTypeName(INT列)

一旦你知道列的類型,你可以分析/淨化你的用戶輸入相應的數據。

+0

你的意思是說處理未知表格有一個正常/更好的方法嗎?使用元數據看起來很完美。 – keyser 2012-02-02 16:50:51

+0

不知道你的問題域很難說。雖然我確信其他人可能會不同意,但您試圖做的事情看起來很可能違反MVC原則。 – 2012-02-02 16:53:23