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

2025-05-29 0 58

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

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

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

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

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

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连接池

?

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();

}

}

}

四、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);

}

}

五、使用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命令并遍历结果集时不能查到内容的原因分析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对快网idc的支持!

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析 https://www.kuaiidc.com/113241.html

相关文章

发表评论
暂无评论