如何将SQL查询结果存放到数组里面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将SQL查询结果存放到数组里面相关的知识,希望对你有一定的参考价值。

参考技术A 假设mysql中test数据库中有个表式score,有数据,我只取第一列的数据出来:
public void mysqlConnection()
try
Class.forName("com.mysql.jdbc.Driver").newInstance();//数据库驱动
String url = "jdbc:mysql://localhost:3306/test";//数据库链接地址
String user = "root";//用户名
String password = "";//密码
Connection conn = DriverManager.getConnection(url, user, password);//建立connection
Statement stmt = conn.createStatement();
conn.setAutoCommit(false);// 更改jdbc事务的默认提交方式
String sql = "select * from score";//查询语句
ResultSet rs = stmt.executeQuery(sql);//得到结果集
conn.commit();//事务提交
conn.setAutoCommit(true);// 更改jdbc事务的默认提交方式
List<String> list=new ArrayList<String>();//创建取结果的列表,之所以使用列表,不用数组,因为现在还不知道结果有多少,不能确定数组长度,所有先用list接收,然后转为数组
while (rs.next()) //如果有数据,取第一列添加如list
list.add(rs.getString(1));

if(list != null && list.size()>0)//如果list中存入了数据,转化为数组
String[] arr=new String[list.size()];//创建一个和list长度一样的数组
for(int i=0;i<list.size();i++)
arr[i]=list.get(i);//数组赋值了。

//输出数组
for(int i=0;i<arr.length;i++)
System.out.println(arr[i]);



catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();

本回答被提问者采纳

怎么把数据库查询的结果保存到map中

resultSet =query(sql);
Map<String, Object> result= new HashMap<String, Object>();
result.put(sql,?);//问号里要怎么写?

1、首先初始化一个map,然后按照代码依次打印Map的数据。

2、执行结果如下,可见打印结果并不是按插入顺序打印的。

3、将代码修改为LinkedHashMap,遍历LinkedHashMap。

4、打印结果为按Map插入顺序打印,可见LinkedHashMap中的数据是有序的,排序方式按照插入顺序。

5、最后将代码修改为new TreeMap,然后遍历TreeMap。

6、打印结果为自然顺序,即按字符串中的字母和数字的大小来排序,可见treeMap中的数据是有序的,按key的大小来排序。

参考技术A 在java中把数据库查询的结果保存到map中:
实现:获得ResultSet rs 时可以转化为ResultSetMetaData对象。
ResultSetMetaData可用于获取关于 ResultSet 对象中列的类型和属性信息的对象。
举例说明如下:
//获得ResultSetMetaData对象
ResultSetMetaData rsmd=rs.getMetaData();
//获得返回此 ResultSet 对象中的列数
int count = rsmd.getColumnCount();
while(rs.next())
Map map=new HashMap();
for(int i=1;i<count;i++)
//获取指定列的表目录名称
String label=rsmd.getColumnLabel(i);
//以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值
Object object= rs.getObject(i);
//把数据库中的字段名和值对应为一个map对象中的一个键值对
map.put(label.toLowerCase(), object);

把每条对象封装成的map对象放进list中
list.add(map);

就此就可以把任意resultet通过这个方法生成list对象。
参考技术B 你好,刚才那个问题我帮你回答了,看来你还是没有理解我说的意思。
resultSet有一系列的getString().getInt()等方法,可以将结果集中的数据取出来,然后包装成对象,在放入map中就好了。你是用的hibernate还是jdbc?追问

jdbc

追答

while(resultSet,hasNext())
//依次取出查询的数据,如你的那句select name from user ;就这样写:
//String name = resultSet.getString(1) ;
map.put(sql,name) ;

追问

如果是select * from user ;可能含有很多不同的字段,那要怎么写?是要map.put所有的字段吗?是一个key可以对应多个value吗?不好意思,麻烦了

追答

如果是select * from user 那么 就要使用
String 字段1 = resultSet,getXXX(1) ;
String 字段2 = resultSet,getXXX(2) ;
String 字段3= resultSet,getXXX(3) ;
然后将字段封装成一个对象 在放入map中

追问

这样的话是不是就要知道查询的表的结构,如果不知道,又或者要查的表的字段不同,是不是用map就不方便了?将字段封装成一个对象 在放入map中,这要怎么做?再次麻烦。

追答

其实你的假设是不成立的,如果按照你说的那样,说明你的设计有问题,数据库的设计是很重要的,不存在你说的不清楚表的结构。在java中,与数据库表对应的类叫实体类,这些类的属性正与字段有这对应关系,就是用来封装查询结果的,看来这块你还需要加强啦。

本回答被提问者采纳

以上是关于如何将SQL查询结果存放到数组里面的主要内容,如果未能解决你的问题,请参考以下文章

jsp 中如何将sql查询结果以数组形式显示出来

PHP如何将SQL查询结果转为多维数组,并按查询行输出

shell将sql查询结果存放到excel中

sql server怎么导出查询结果为脚本

如何在 C# Asp.net 中将 SELECT sql 查询结果保存在数组中

sql中引用一个表的查询结果作为条件来查询另一个表如何实现?