我在寫包裝數據庫SELECT語句的方法,它接收SQL查詢並運行它。結果收集在Object[][]
。數據庫中的每個單元格可能是整數或字符串。如何保存不同類型的集合?
我有返回數組的問題。這是Object[][]
,所以我鬆散的類型。
public Object[][] select(String query) {
Object[][] result = new Object[cursor.getCount()][cursor.getColumnCount()];
Cursor cursor = db.rawQuery(query, null);
//Iterate over cursor (rows)
do {
//Iterate over columns (cells with data of different type)
for(int columnIndex = 0; columnIndex < cursor.getColumnCount(); columnIndex++) {
int type = cursor.getType(columnIndex);
//assume, that there are only two types - String or Integer (actualy there are 3 more types)
if(type == Cursor.FIELD_TYPE_INTEGER) {
result[cursor.getPosition()][columnIndex] = cursor.getInt(columnIndex);
}
else if(type == Cursor.FIELD_TYPE_STRING) {
result[cursor.getPosition()][columnIndex] = cursor.getString(columnIndex);
}
}
} while (cursor.moveToNext());
return result;
}
我不想鬆散類型。例如。想要能夠這樣做(僞代碼):
//pseudocode:
result = select("SELECT age, name FROM people")
print("Hello, " + result[0][0] + ". In ten years you'll be ")
print(result[0][0] + 10)
//Prints: Hello, John. In ten years you'll be 56
每本關於Java的書都說,我不能擁有不同類型的數組。很明顯。
但是我應該如何從數據庫中保存所有的整數和字符串?我試圖使用集合和泛型,但沒有運氣 - 新的Java。
還試圖用某種結果值持有者:
private class Result {
private Class type;
private Object value;
...
public ??? get() { //??? - int or string - here I have some problems :)
return this.type.cast(this.value);
}
//do NOT want to have these:
public int getInt() { return (int) value; }
public int getString() { return (String) value; }
}
方法select(...)
在這種情況下返回Result[][]
。
回答我自己: 瞭解,我正在嘗試在Java中編寫代碼,就像我在php中所做的那樣。使用強類型時,我無法做出直接的方法,返回所有類型而不顯式投射。
畢竟我決定創建通用數據對象並將它們填充到選擇中。
但是db單元值仍然是'Object'。 – Oroboros102 2012-08-08 19:24:34
使用提供的結果更新瞭解決方案。 – davidmontoyago 2012-08-08 19:35:13
我該如何處理'Result' getter?保持db結果,因爲'Object'不是問題。一個問題是不使用'if'或'result.getInt()'''result.getString()'來使用它。 – Oroboros102 2012-08-08 19:37:39