我忙于用Java重写Informix-4GL程序,而且我在从数据库中检索数据时遇到了一些麻烦。
目前我正在使用SQLite3进行测试,我正在从Windows命令行编译并执行我的代码(此时不使用任何IDE)。
我遇到的问题是我已经习惯使用Informix-4GL动态数据记录,如下所示:
dataArray dynamic array of record
data_id integer,
data_name char(15),
data_desc char(15)
end record
我可以随意填充,然后使用
检索数据(例如插入的第三行)display dataArray[3].data_id
我想知道在Java中做一些similair的推荐方法,是否可以将数据存储在Java等效的动态记录数组中,然后使用某种形式的标识符从中选择数据?
以下是我在Informix-4GL中如何使其更清晰
main
define
lv_string string, # general variables
lv_cnt integer,
lr_table record like table.*,
dataArray dynamic array of record # the values I am storing in array
data_id integer,
data_name char(15),
data_desc char(15)
end record
let lv_string = "select * from table ", # prepared statement 01
"where 1=1"
prepare data_prep from lv_string
declare data_curs cursor for data_prep
let lv_string = "select * from table02 ", # prepared statement 01
"where id = ?"
prepare data02_prep from lv_string
let lv_cnt = 0
foreach data_curs into lr_table.* # loop through sql return results
let lv_cnt = lv_cnt + 1
let dataArray[lv_cnt].data_id = lr_table.id # store variables
let dataArray[lv_cnt].data_name = lr_table.name
execute data02_prep using lr_table.id # store variables from
into dataArray[lv_cnt].data_desc # different table
end foreach
if dataArray.getLength() = 5 then # use the data I have stored
display "there are 5 rows in here"
end if
if dataArray.getLength() = 17 then # very flexible
display dataArray[5].data_id,
dataArray[9].data_name
dataArray[14].data_desc
end if
end main
这不是实际的程序,但我只是采用了我想在java中重新创建的功能。
这样做的好处是我可以查询数据库一次并关闭连接,我不需要在整个程序期间再次查询数据库。
答案 0 :(得分:1)
我认为在您的情况下,使用ArrayList要容易得多。示例
public class Sample {
List<Data> datas = new ArrayList<Data>();
datas.add(new Data("1", "2" ,"3"));
datas.add(new Data("4", "5" ,"6"));
datas.get(0); // should give you the first data
}
class Data {
Object id,name,desc;
Data(Object id, Object name, Object desc) {
this.id = id;
this.name = name;
this.desc = desc;
}
}
顺便说一句,我认为你对HashMap(你说被覆盖的那个)的问题是因为你没有覆盖equal和hashcode方法,因为这两个方法用于将对象放在HashMap中。
希望这对你有帮助:D
=============
假设你的行变量引用了ResultSet,那么你可以这样做。
public void doFill(ResultSet row) {
while(row.next()) {
datas.add(new Data(row.getObject("id"), row.getObject("name"), row.getObject("desc")));
}
}
答案 1 :(得分:0)
使用HashMap
。它基本上是一个字典,按键排列,...无论你想要什么,它都是一个键值存储,你可以选择你的密钥。 HashMap具有O(1)个操作(理论上)并禁止重复键。享受。