Resultset查询

发表时间:2017-05-11 16:51:21 浏览量( 16 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、ResultSet对象简介

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

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

二、示例讲解

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

// 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对象,代码如下:

  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

// 查询全部
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判断是否有数据即可。代码如下:

// 根据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方法中测试如下:

 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("没有这个用户");
    }
}

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