private static void show1() {
StringEQTest.ListArr listArr = new StringEQTest.ListArr()
List<String>names = listArr.names
for (int i = 0i <names.size()i++) {
System.out.println(names.get(i))
}
List<Integer>ages = listArr.ages
for (int i = 0i <ages.size()i++) {
System.out.println(ages.get(i))
}
}
public static class ListArr {
List<String>names = new ArrayList<String>()
List<Integer>ages = new ArrayList<Integer>()
public ListArr() {
names.add("names1")
names.add("names2")
names.add("names3")
ages.add(50)
ages.add(40)
ages.add(30)
ages.add(88)
}
public List<String>getNames() {
return names
}
public void setNames(List<String>names) {
this.names = names
}
public List<Integer>getAges() {
return ages
}
public void setAges(List<Integer>ages) {
this.ages = ages
}
}
结果:
names1
names2
names3
50
40
30
88
-------------------------------------------------------------------------------
方法二、将List包装到Map集合内,取出的时候需要进行类型转换
private static void show2() {
Map<String, Object>lists = getLists()
List<String>names = (List<String>) lists.get("names")
for (int i = 0i <names.size()i++) {
System.out.println(names.get(i))
}
List<Integer>ages = (List<Integer>) lists.get("ages")
for (int i = 0i <ages.size()i++) {
System.out.println(ages.get(i))
}
}
public static Map<String, Object>getLists() {
List<String>names = new ArrayList<String>()
List<Integer>ages = new ArrayList<Integer>()
names.add("names1")
names.add("names2")
names.add("names3")
ages.add(50)
ages.add(40)
ages.add(30)
ages.add(88)
Map<String, Object>map = new HashMap<String, Object>()
map.put("names", names)
map.put("ages", ages)
return map
}
结果:
names1
names2
names3
50
40
30
88
答案是肯定的!
public class Demo01<E> {private List<E> list = new ArrayList<E>()
public List<E> store(E[] arr){
list = Arrays.asList(arr)
return list
}
public static void main(String[] args) {
Demo01<String> d = new Demo01<>()
String animals[] = {"Cat","Dog","Pig","Monkey"}
List<String> list = d.store(animals)
for (String string : list) {
System.out.print(string + "\t")
}
}
}
两种方案:第一种:(推荐使用这种)
只要修改返回类型,并把
return tmplist改成return tmplist.totoArray()就行了 取出的是Object数组,需要强制转换成HashMap;
//返回值是数组
public Object[] quyListBySqlAndParams(String querystr, List params,int dno) throws SQLException {
Connection conn = null
PreparedStatement pstmt = null
ResultSet rst = null
ResultSetMetaData rsmd = null
List tmplist=new ArrayList()
try{
conn = myDataUtil.getConnection(dno)
pstmt = conn.prepareStatement(querystr)
//参数赋值
for(int i=0i<params.size()i++){
String param = params.get(i)==null?"":params.get(i).toString().trim()
pstmt.setString(i+1,param)
}
rst = pstmt.executeQuery()
rsmd = rst.getMetaData()
while (rst.next()) {
Map tmpmap = new HashMap()
for ( int i = 1i <= rsmd.getColumnCount()i++ ){
tmpmap.put(rsmd.getColumnName(i), rst.getObject(i))
}
tmplist.add(tmpmap)
}
}catch(Exception e){
System.out.println("pubgetstr"+e.toString()+querystr)
}finally{
myDataUtil.free(rst,pstmt,conn)
//这里调用toArray()方法返回数组
return tmplist.toArray()
}
}
。
方案二:
原理就是将结果集的游标定位到最后一行,然后通过返回行号确定记录数,从而确定数组的长度。然后再将游标回退到beforefirst
但是一定要注意 这么做有个地方要考虑, 默认的ResultSet类型是TYPE_FORWARD_ONLY,只向前的游标,不允许指针回退在定义时要将默认的ResultSet类型里的TYPE_FORWARD_ONLY改成ResultSet.TYPE_SCROLL_INSENSITIVE,把你那句改成这个
pstmt = conn.prepareStatement(querystr, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)
//返回数组
public Object[] quyListBySqlAndParams(String querystr, List params,int dno) throws SQLException {
Connection conn = null
PreparedStatement pstmt = null
ResultSet rst = null
ResultSetMetaData rsmd = null
Object[] tmpAarry
try{
conn = myDataUtil.getConnection(dno)
//注意 这里做了修改 pstmt=conn.prepareStatement(querystr,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)
//参数赋值
for(int i=0i<params.size()i++){
String param = params.get(i)==null?"":params.get(i).toString().trim()
pstmt.setString(i+1,param)
}
rst = pstmt.executeQuery()
rsmd = rst.getMetaData()
// 这里做了修改
rst.last()
int count = rst.getRow()
tmpAarry = new Object[count]
rst.beforeFirst()
while (rst.next()) {
Map tmpmap = new HashMap()
int j = 0
for ( int i = 1i <= rsmd.getColumnCount()i++ ){
tmpmap.put(rsmd.getColumnName(i), rst.getObject(i))
}
tmpAarry[j]=tmpmap
j++
}
}catch(Exception e){
System.out.println("pubgetstr"+e.toString()+querystr)
}finally{
myDataUtil.free(rst,pstmt,conn)
// 返回的是个数组
return tmpAarry
}
}
好了,这两种方法的结构是一样的,看是你也看到了,自己写有多麻烦,还要考虑很多意想不到的问题,比如那个滚动结果集。所以能用java api中提供的最好用,那都是经得住考验的,而且方便的很。