第壹種:(推薦)
只需修改返回類型並設置
將return tmplist改為return tmplist . toto array();只需取出對象數組,需要強行轉換成HashMap;
//返回值是壹個數組
公共對象[]quyListBySqlAndParams(String query str,List params,int dno)拋出SQLException {
連接連接=空;
PreparedStatement pstmt = null
結果集rst = null
ResultSetMetaData rsmd = null
list tmplist = new ArrayList();
嘗試{
conn = mydatautil . getconnection(dno);
PS TMT = conn . prepare statement(query str);
//參數賦值
for(int I = 0;我& ltparams . size();i++){
string param = params . get(I)= = null?" ":params.get(i)。toString()。trim();
pstmt.setString(i+1,param);
}
rst = pstmt . execute query();
rsmd = rst . get metadata();
while (rst.next()) {
map tmp map = new HashMap();
for(int I = 1;我& lt= rsmd . getcolumncount();i++ ){
tmp map . put(rsmd . get column name(I),rst . getobject(I));
}
tmplist . add(tmp map);
}
}catch(異常e){
system . out . println(" pubgetstr "+e . tostring()+query str);
}最後{
myDataUtil.free(康涅狄格州rst、pstmt);
//在此調用toArray()方法返回數組。
返回tmplist . to array();
}
}
選項2:
原理是將結果集的光標定位到最後壹行,然後通過返回行號來確定記錄數,從而確定數組的長度。然後將光標回滾到beforefirst。
但是,壹定要註意,這樣做是有需要考慮的地方的。默認的ResultSet類型是TYPE_FORWARD_ONLY,並且只允許前進遊標,不允許後退指針。定義時,將默認結果集類型中的TYPE_FORWARD_ONLY更改為ResultSet。Type _ scroll _ insensitive,並將您的句子更改為。
pstmt = conn . prepare statement(query str,ResultSet。TYPE_SCROLL_INSENSITIVE,ResultSet。CONCUR _ READ _ ONLY);
//返回壹個數組
公共對象[]quyListBySqlAndParams(String query str,List params,int dno)拋出SQLException {
連接連接=空;
PreparedStatement pstmt = null
結果集rst = null
ResultSetMetaData rsmd = null
object[]tmpa arry;
嘗試{
conn = mydatautil . getconnection(dno);
//註意PSTMT = conn . prepare statement(query str,ResultSet。Type _ scroll _ insensitive,ResultSet。Concur _ read _ only)已在此處修改;
//參數賦值
for(int I = 0;我& ltparams . size();i++){
string param = params . get(I)= = null?" ":params.get(i)。toString()。trim();
pstmt.setString(i+1,param);
}
rst = pstmt . execute query();
rsmd = rst . get metadata();
//此處已修改。
rst . last();
int count = rst . getrow();
tmpAarry =新對象[計數];
rst . before first();
while (rst.next()) {
map tmp map = new HashMap();
int j = 0;
for(int I = 1;我& lt= rsmd . getcolumncount();i++ ){
tmp map . put(rsmd . get column name(I),rst . getobject(I));
}
tmp arry[j]= tmp map;
j++;
}
}catch(異常e){
system . out . println(" pubgetstr "+e . tostring()+query str);
}最後{
myDataUtil.free(康涅狄格州rst、pstmt);
//返回的是壹個數組。
返回tmpAarry
}
}
嗯,這兩種方法的結構是壹樣的。妳可以看到自己寫有多麻煩,還有很多意想不到的問題要考慮,比如滾動結果集。所以妳可以充分利用java api中提供的東西,它經得起考驗,非常方便。