JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析

网友投稿 347 2023-03-04


JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析

javaWEB dbutils执行sql命令并遍历结果集时不能查到内容的原因及处理方法如下所示:

遍历结果集时只遍历bean对象才会只输出第一行那种内容(第一行是输出了UserEntity类实例化的对象),所以这里需要 re.getRepoTableName() 才能通过对象调用相对应的内容

这样一来,就可以取到值了

PS:JavaWeb之DBUtils详细介绍如下所示:

一、什么是DBUtils及作用

DBUtils是apache公司写的。DBUtils是java编程中的数据库操作实用工具,小巧简单实用。

DBUtils封装了对JDBC的操作,简化了JDBC操作。可以少写代码。

1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;

2.对于数据表的写操作,也变得很简单(只需写sql语句)

3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象

二、DBUtils的三个核心对象

2.1、QueryRunner类

QueryRunner中提供对sql语句操作的API.它主要有三个方法:query() 用于执行select,update() 用于执行insert update delete,batch() 批处理。等下下面的会详细的介绍这几种方法的用法。

2.2、ResultSetHandler接口

用于定义select操作后,怎样封装结果集.它总共有9个常用的实现类,下面我会详细的为大家介绍怎么去使用。

2.3、DbUtils类

它就是一个工具类,定义了关闭资源与事务处理的方法

三、怎么去使用DBUtils框架

3.1、使用步骤

导入相对应的jar包

创建QueryRunner对象

使用query方法执行select语句

使用ResultSetHandler封装结果集

使用DbUtils类释放资源

3.2、实例

注:本人使用的是C3P0连接池

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import org.apache.commons.dbutils.QueryRunner;

import org.apache.commons.dbutils.ResultSetHandler;

import org.apache.commons.dbutils.handlers.BeanListHandler;

import org.junit.Test;

import com.jxlg.domain.User;

public class TestSelect {

@Test

public void testSelect(){

//创建一个QueryRunner对象

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

try {

// new ResultSetHandler>告诉我们如何封装结果集

List list = qr.query("select * from user", new ResultSetHandler>(){

@Override

//query语句执行select语句后,结果一返回值的形式传递过来

public List handle(ResultSet rs) throws SQLException {

List list = new ArrayList();

while(rs.next()){

User u = new User();

u.setId(rs.getInt(1));

u.setUsername(rs.getString(2));

u.setPassword(rs.getString(3));

u.setEmail(rs.getString(4));

u.setBirthday(rs.getDate(5));

list.add(u);

}

return list;

}

});

for (User user : list) {

System.out.println(user);

}

} catch (SQLException e) {

e.printStackTrace();

}

}

@Test

public void testSelect2(){

//创建一个QueryRunner对象

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

try {

//执行sql语句,返回结果

List list = qr.query("select * from user where id=? and username=?", new BeanListHandler(User.class),1,"tom");

for (User user : list) {

System.out.println(user);

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

四、DBUtils三个核心对象详解

4.1、QueryRunner对象

4.1.1、构造函数

new QueryRunner(); 它的事务可以手动控制。

也就是说此对象调用的方法(如:query、update、batch)参数中要有Connection对象。

new QueryRunner(DataSource ds); 它的事务是自动控制的。一个sql一个事务。

此对象调用的方法(如:query、update、batrch)参数中无需Connection对象。

4.1.2、常用方法

4.2、ResultSetHandler接口

4.2.1、它有9个结果处理器

ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]

      ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中

      ColumnListHandler:取某一列的数据。封装到List中。

      KeyedHandler:取多条记录,每一条记录封装到一个Map中,再把这个Map封装到另外一个Map中,key为指定的字段值。

      MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中

      MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List中

      ScalarHandler:适合取单行单列数据

      BeanHandler

      BeanListHandler

4.2.2、实例

import static org.junit.Assert.*;

import java.sql.SQLException;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import org.apache.commons.dbutils.QueryRunner;

import org.apache.commons.dbutils.handlers.ArrayHandler;

import org.apache.commons.dbutils.handlers.ArrayListHandler;

import org.apache.commons.dbutils.handlers.BeanHandler;

import org.apache.commons.dbutils.handlers.ColumnListHandler;

import org.apache.commons.dbutils.handlers.KeyedHandler;

import org.apache.commons.dbutils.handlers.MapHandler;

import org.apache.commons.dbutils.handlers.MapListHandler;

import org.apache.commons.dbutils.handlers.ScalarHandler;

import org.junit.Test;

import com.jxlg.domain.User;

public class TestResultSetHandler {

@Test

public void test1() {

//ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

try {

Object[] o = qr.query("select * from user where id=?", new ArrayHandler(),5);

for (Object object : o) {

System.out.println(object);

}

} catch (SQLException e) {

e.printStackTrace();

}

}

@Test

public void test2() throws SQLException {

//ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

List list = qr.query("select * from user", new ArrayListHandler());

for (Object[] objects : list) {

for (Object object : objects) {

System.out.println(object);

}

System.out.println("----------------------");

}

}

@Test

public void test3() throws SQLException {

//ColumnListHandler:取某一列的数据。封装到List中

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

List list = qr.query("select username,password from user ", new ColumnListHandler(1));

for (Object object : list) {

System.out.println(object);

}

}

@Test

public void test4() throws SQLException {

//KeyedHandler:取多条记录,每一条记录封装到一个Map中,

//再把这个Map封装到另外一个Map中,key为指定的字段值。

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

//大的Map的key是表中的某列数据,小的Map的key是表的列名,所以大的map的key用的是Object类型,小的是String。

Map> map = qr.query("select * from user", new KeyedHandler(1));

for (Map.Entry> m : map.entrySet()) {

System.out.println(m);//就是id至,因为设置了“1”.

for (Map.Entry mm : m.getValue().entrySet()) {

System.out.println(mm);//取出小map中的key和value

}

System.out.println("--------------------");

}

}

@Test

public void test5() throws SQLException {

//MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

Map map = qr.query("select * from user", new MapHandler());

for (Map.Entry m : map.entrySet()) {

System.out.println(m.getKey()+"\t"+m.getValue());

//默认取第一行数据,需要去其它行用where加条件

}

}

@Test

public void test6() throws SQLException {

//MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List中

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

List> list = qr.query("select * from user", new MapListHandler());

for (Map map : list) {

for (Map.Entry m : map.entrySet()) {

System.out.println(m);

}

System.out.println("-----------");

}

}

@Test

public void test7() throws SQLException {

//ScalarHandler:适合取单行单列数据

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

Object o = qr.query("select * from user", new ScalarHandler(2));

System.out.println(o);

}

@Test

public void test8() throws SQLException {

//BeanHandler:适合取单行单列数据

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

User user = qr.query("select * from user", new BeanHandler(User.class));

System.out.println(user);

}

}

五、使用DBUtils做一个增删改查的例子

import static org.junit.Assert.*;

import java.sql.SQLException;

import java.util.Date;

import javax.crypto.spec.OAEPParameterSpec;

import org.apache.commons.dbutils.QueryRunner;

import org.junit.Test;

public class TestInCURD {

@Test

public void testInsert() {

//创建一个QueryRunner对象

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

try {

qr.update("insert into user (username,password,email,birthday)values(?,?,?,?)", "guapi","4646","guapi@163.com",new Date());

} catch (SQLException e) {

e.printStackTrace();

}

}

@Test

public void testUpdate() {

//创建一个QueryRunner对象

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

try {

qr.update("update user set username=?,password=? where id=4 ", "meizimeizi","520520");

} catch (SQLException e) {

e.printStackTrace();

}

}

@Test

public void testDelete() {

//创建一个QueryRunner对象

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

try {

qr.update("delete from user where id=? ",4);

} catch (SQLException e) {

e.printStackTrace();

}

}

@Test

public void testBatch() {

//创建一个QueryRunner对象

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());

try {

Object[][] params = new Object[10][]; //高维代表执行多少次sql语句

for(int i =0;i

params[i] =new Object[]{"guapi"+i,"4646","guapi@163.com",new Date()};

}

qr.batch("insert into user (username,password,email,birthday)values(?,?,?,?)", params );

} catch (SQLException e) {

e.printStackTrace();

}

}

}

总结

以上所述是给大家介绍的JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们的支持!

params[i] =new Object[]{"guapi"+i,"4646","guapi@163.com",new Date()};

}

qr.batch("insert into user (username,password,email,birthday)values(?,?,?,?)", params );

} catch (SQLException e) {

e.printStackTrace();

}

}

}

总结

以上所述是给大家介绍的JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:swing jtextArea滚动条和文字缩放效果
下一篇:swing重绘按钮为任意形状图案的方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~