package com.itheima.jdbc;
import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* JDBC API 详情:Result
*/
public class JDBCDemo5_ResultSet {
// 定义一个测试方法
/**
* 执行DQL 查询语句
* @throws Exception
*/
@Test
public void testResultSet() throws Exception{
// 1. 注册驱动
// Class.forName("com.mysql.jdbc.Driver"); // mysql5之后的驱动jar包,的注册驱动,可以不写了
// 2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化,(简化,就是端口号和ip不写)
// 这里的127.0.0.1 可以写成localhost 不想要红色警告可以设置参数后面的键值对(前面加问号)
// useSSL=false (Java的键值对是 键=值 这里不能有空格
String url = "jdbc:mysql:///db1?useSSL=false"; // db1 是数据库名
String userName = "root";
String passWord = "123456";
Connection connection = DriverManager.getConnection(url, userName, passWord);
// 定义sql
String sql = "select * from account";
// 4. 获取statement对象 执行sql的对象
Statement stmt = connection.createStatement();
// 5. 执行sql
ResultSet rs = stmt.executeQuery(sql);
// 6. 处理结果,遍历rs中的所有数据 (将他查询到的数据都遍历出来)
// // 6.1 next() 方法 光标向下移动一行,并且判断当前行是否为有效行(判断当前行是否有数据)
// // 有数据返回true, 没数据返回false
// while (rs.next()){ // 有数据执行
// // 6.2 获取数据,getXXX()
// int id = rs.getInt(1);// 获取第1列的的int类型的值
// String name = rs.getString(2); // 获取第二列的String类型
// double money = rs.getDouble(3); // 获取第三列的Double类型的数据
// // 每次读一行,然后将该行每列的数据打印出来
// System.out.println(id);
// System.out.println(name);
// System.out.println(money);
// System.out.println("=====================");
// }
// 6.1 next() 方法 光标向下移动一行,并且判断当前行是否为有效行(判断当前行是否有数据)
// 有数据返回true, 没数据返回false
while (rs.next()){ // 有数据执行
// 6.2 获取数据,getXXX()
int id = rs.getInt("id");// 获取第一行第一列为id字段的的int类型的值
String name = rs.getString("name"); // 获取第二列的String类型
double money = rs.getDouble("money"); // 获取第三列的Double类型的数据
// 每次读一行,然后将该行每列的数据打印出来
System.out.println(id);
System.out.println(name);
System.out.println(money);
System.out.println("=====================");
}
// 释放资源
rs.close();
connection.close();
}
}
案例:
包名pojo一般是用来存储Java实体类的(User,account)
package com.itheima.jdbc;
import com.itheima.pojo.Account;
import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
/**
* JDBC API 详情:Result
*/
public class JDBCDemo5_ResultSet {
// 定义一个测试方法
/**
* 执行DQL 查询语句
* @throws Exception
*/
@Test
public void testResultSet() throws Exception{
// 1. 注册驱动
// Class.forName("com.mysql.jdbc.Driver"); // mysql5之后的驱动jar包,的注册驱动,可以不写了
// 2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化,(简化,就是端口号和ip不写)
// 这里的127.0.0.1 可以写成localhost 不想要红色警告可以设置参数后面的键值对(前面加问号)
// useSSL=false (Java的键值对是 键=值 这里不能有空格
String url = "jdbc:mysql:///db1?useSSL=false"; // db1 是数据库名
String userName = "root";
String passWord = "123456";
Connection connection = DriverManager.getConnection(url, userName, passWord);
// 定义sql
String sql = "select * from account";
// 4. 获取statement对象 执行sql的对象
Statement stmt = connection.createStatement();
// 5. 执行sql
ResultSet rs = stmt.executeQuery(sql);
// 6. 处理结果,遍历rs中的所有数据 (将他查询到的数据都遍历出来)
// // 6.1 next() 方法 光标向下移动一行,并且判断当前行是否为有效行(判断当前行是否有数据)
// // 有数据返回true, 没数据返回false
// while (rs.next()){ // 有数据执行
// // 6.2 获取数据,getXXX()
// int id = rs.getInt(1);// 获取第1列的的int类型的值
// String name = rs.getString(2); // 获取第二列的String类型
// double money = rs.getDouble(3); // 获取第三列的Double类型的数据
// // 每次读一行,然后将该行每列的数据打印出来
// System.out.println(id);
// System.out.println(name);
// System.out.println(money);
// System.out.println("=====================");
// }
// 6.1 next() 方法 光标向下移动一行,并且判断当前行是否为有效行(判断当前行是否有数据)
// 有数据返回true, 没数据返回false
while (rs.next()){ // 有数据执行
// 6.2 获取数据,getXXX()
int id = rs.getInt("id");// 获取第一行第一列为id字段的的int类型的值
String name = rs.getString("name"); // 获取第二列的String类型
double money = rs.getDouble("money"); // 获取第三列的Double类型的数据
// 每次读一行,然后将该行每列的数据打印出来
System.out.println(id);
System.out.println(name);
System.out.println(money);
System.out.println("=====================");
}
// 释放资源
rs.close();
connection.close();
}
// 定义一个测试方法
/**
* 查询account账户表数据,封装成Account对象中,并且存储到ArrayList集合中去
* 1. 定义实体类Account
* 2. 查询数据,封装到Account对象中去
* 3. 将Account对象存入到ArrayList集合中去
*
*
* @throws Exception
*/
@Test
public void testResultSet2() throws Exception{
// 1. 注册驱动
// Class.forName("com.mysql.jdbc.Driver"); // mysql5之后的驱动jar包,的注册驱动,可以不写了
// 2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化,(简化,就是端口号和ip不写)
// 这里的127.0.0.1 可以写成localhost 不想要红色警告可以设置参数后面的键值对(前面加问号)
// useSSL=false (Java的键值对是 键=值 这里不能有空格
String url = "jdbc:mysql:///db1?useSSL=false"; // db1 是数据库名
String userName = "root";
String passWord = "123456";
Connection connection = DriverManager.getConnection(url, userName, passWord);
// 定义sql
String sql = "select * from account";
// 4. 获取statement对象 执行sql的对象
Statement stmt = connection.createStatement();
// 5. 执行sql
ResultSet rs = stmt.executeQuery(sql);
// 创建集合(集合的泛型是Account类)因为要存储Account类创建的对象
List<Account> list = new ArrayList<>();
// 6.1 next() 方法 光标向下移动一行,并且判断当前行是否为有效行(判断当前行是否有数据)
// 有数据返回true, 没数据返回false
while (rs.next()){ // 有数据执行
Account account = new Account();
// 6.2 获取数据,getXXX()
int id = rs.getInt("id");// 获取第一行第一列为id字段的的int类型的值
String name = rs.getString("name"); // 获取第二列的String类型
double money = rs.getDouble("money"); // 获取第三列的字段为money的Double类型的数据
// 将每次遍历得到的值,赋值给account类中的成员中去(使用set方法)
account.setId(id);
account.setName(name);
account.setMoney(money);
// 将每次赋值后,将该对象存入到集合中去
list.add(account);
}
// 查看集合里面有没有数据
System.out.println(list);
// 释放资源
rs.close();
connection.close();
}
}
定义一个账户类
package com.itheima.pojo;
public class Account {
private int id;
private String name;
private double money;
public Account() {
}
public Account(int id, String name, double money) {
this.id = id;
this.name = name;
this.money = money;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
@Override
public String toString() {
return "Account{" +
"id=" + id +
", name='" + name + '\'' +
", money=" + money +
'}';
}
}