gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 30 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

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

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

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

  。

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

ps:javaweb之dbutils详细介绍如下所示:

  。

1、什么是dbutils及作用 。

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

  dbutils封装了对jdbc的操作,简化了jdbc操作。可以少写代码.

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

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

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

2、dbutils的三个核心对象 。

  2.1、queryrunner类 。

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

  2.2、resultsethandler接口 。

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

  2.3、dbutils类 。

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

3、怎么去使用dbutils框架 。

  3.1、使用步骤 。

    导入相对应的jar包 。

    创建queryrunner对象 。

      使用query方法执行select语句 。

      使用resultsethandler封装结果集 。

      使用dbutils类释放资源 。

  3.2、实例 。

    注:本人使用的是c3p0连接池 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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<user>>告诉我们如何封装结果集
   list<user> list = qr.query( "select * from user" , new resultsethandler<list<user>>(){
   @override
   //query语句执行select语句后,结果一返回值的形式传递过来
   public list<user> handle(resultset rs) throws sqlexception {
    list<user> list = new arraylist<user>();
    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<user> list = qr.query( "select * from user where id=? and username=?" , new beanlisthandler<user>(user. class ), 1 , "tom" );
   for (user user : list) {
   system.out.println(user);
   }
  } catch (sqlexception e) {
   e.printstacktrace();
  }
  }
}

4、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、常用方法  。

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

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

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

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

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

  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、实例        。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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<object[]> 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<object> 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<object, map<string, object>> map = qr.query( "select * from user" , new keyedhandler( 1 ));
  for (map.entry<object, map<string,object>> m : map.entryset()) {
   system.out.println(m); //就是id至,因为设置了“1”.
   for (map.entry<string, object> 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<string, object> map = qr.query( "select * from user" , new maphandler());
  for (map.entry<string, object> 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<map<string, object>> list = qr.query( "select * from user" , new maplisthandler());
  for (map<string, object> map : list) {
   for (map.entry<string, object> 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>(user. class ));
  system.out.println(user);
  }
}

5、使用dbutils做一个增删改查的例子   。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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.length;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命令并遍历结果集时不能查到内容的原因分析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我的支持! 。

原文链接:http://www.cnblogs.com/kinome/archive/2017/12/22/8085588.html 。

最后此篇关于JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析的文章就讲到这里了,如果你想了解更多关于JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com