22、Resultset查询

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度

学习过程:

一、ResultSet对象简介

使用JDBC查询的结果存放在ResultSet对象的一系列行中,ResultSet对象的最初位置在行首,ResultSet.next()方法用来在行间移动,ResultSet.getXXX()方法用来取得字段的内容,

每次执行 SQL 语句时,都会用新的结果重写结果集,当相关的 Statement 关闭时,ResultSet对象会自动关闭,当然我们也可以收到关闭ResultSet。

二、示例讲解

前面的几个链接数据库的步骤都是一样的,只是现在需要执行是查询,所以statement使用的方法是executeQuery方法。比如现在我们需要打印所有的用户的信息,其实现代码如下:

扫描二维码关注公众号,回复: 4044506 查看本文章

1

2

3

4

5

6

7

8

9

10

11

// 4、执行sql

String sql = "select user_id  ,user_name from tb_user";

// 结果集

ResultSet rs = statement.executeQuery(sql);

// next 判断有没有下一行,rs指向下一行的位置

while (rs.next()) {

System.out.println(rs.getInt("user_id")+":"+rs.getString("user_name"));

}

rs.close();

statement.close();

connection.close();

这样打印数据,对于真正的项目来说是没有任何意义的,一般我们需要把数据库的数据封装成为对象,然后返回给系统使用,这里我们可以为当前这张表设计一个与之对应的javaBean对象,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

  public class User {

     

    private int userId;

    private String userName;

    public int getUserId() {

        return userId;

    }

    public void setUserId(int userId) {

        this.userId = userId;

    }

    public String getUserName() {

        return userName;

    }

    public void setUserName(String userName) {

        this.userName = userName;

    }

}

修改上面的查询全部用户的代码,把查询得到的所有的数据封装到一个List

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

// 查询全部

public List getAllUser() {

    List users = new ArrayList();

    try {

        // 1、通过反射加载驱动。

        Class.forName("com.mysql.jdbc.Driver");

        // 2、通过驱动管理类建立一个连接 不同数据url写法是不同 ip端口 数据

        Connection connection = DriverManager.getConnection(

        "jdbc:mysql://192.168.11.144/first?useUnicode=true&characterEncoding=utf8""root""123456");

        // 3、通过Connect建立Statement

        Statement statement = connection.createStatement();

        // 4、执行sql

        String sql = "select user_id  ,user_name from tb_user";

        // 结果集

        ResultSet rs = statement.executeQuery(sql);

        // next 判断有没有下一行,rs指向下一行的位置

        while (rs.next()) {

            // System.out.println(rs.getInt("user_id")+":"+rs.getString("user_name"));

            User user = new User();

            user.setUserId(rs.getInt("user_id"));

            user.setUserName(rs.getString("user_name"));

            users.add(user);

        }

        //

        rs.close();

        statement.close();

        connection.close();            

    catch (ClassNotFoundException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    catch (SQLException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    }

    return users;

}

再举一个常用的例子,就是根据用户的id查询一个用户的详细信息,由于只是返回一行数据,所以方法设计就只返回一个对象。同时也不需要使用while循环了,只需要使用if判断是否有数据即可。代码如下:

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

// 根据id进行查询

public User queryById(int uid) {

    User user = null;

    // 1、通过反射加载驱动。

    try {

        Class.forName("com.mysql.jdbc.Driver");

        // 2、通过驱动管理类建立一个连接 不同数据url写法是不同 ip端口 数据

        Connection connection = DriverManager.getConnection(

        "jdbc:mysql://192.168.11.144/first?useUnicode=true&characterEncoding=utf8","root""123456");

        // 3、通过Connect建立Statement

        Statement statement = connection.createStatement();

        // 4、执行sql

        String sql = "select user_id  ,user_name from tb_user where user_id=" + uid;

        ResultSet rs=statement.executeQuery(sql);

        if(rs.next()){

            user=new User();

            user.setUserId(rs.getInt("user_id"));

            user.setUserName(rs.getString("user_name"));

        }

    catch (ClassNotFoundException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    catch (SQLException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    }

    return user;

}

在main方法中测试如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

 public static void main(String[] args) {

    UserDao userDao = new UserDao();

    // userDao.addUser("郭富城");

    // userDao.delUser(5);

    // userDao.updateUser(6, "曾志伟");

    //List<User> users = userDao.getAllUser();

    User user=userDao.queryById(5);

    if(user!=null){

        System.out.println(user.getUserName());

    }else{

        System.out.println("没有这个用户");

    }

}

下面大家可以为表,添加一个新的密码字段,尝试自己写一个登录的方法。

猜你喜欢

转载自blog.csdn.net/liubao616311/article/details/83990178
22
今日推荐