ResultSet:结果集对象,封装查询结果 查询查询查询
调用:ResultSet resultSet = stmt.executeQuery(sql);
其实sql语句中select*from 查询出来的就是结果集 ResultSet就是来封装查询结果的 我们做的就是从ResultSet中拿出来数据
小概念 有一个游标(像集合的索引) 一开始指向表的第一行的表头位置(此时不能取数据)
游标移动指向第一行 把每一列都给取出来
此时涉及两个方法next();方法 getXxx(参数);方法
* boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true
* getXxx(参数):获取数据 : 一次获取某一行某一列的数据
* Xxx:代表数据类型 如:
int getInt();返回int类型 , getInt();方法
String getString();此方法返回一个字符串 getString();方法
* 参数:
1. int:代表列的编号,从1开始 如: getString(1) 好比上表是获取id这一列 这个编号是从1开始 比较特殊
2. String:代表列名称。 如: getDouble("balance") 这个是get 列名称balance 得到balance这一列
注意代码里的
//执行sql这一步发生了变化
rs = stmt.executeQuery(sql); //这里rs就是已经获取道德数据集 其实我觉着就是呢个表
//处理数据
//0.1让游标向下移动一行
rs.next();
//0.2获取数据 //这里rs就是已经获取道德数据集 其实我觉着就是呢个表
int id = rs.getInt(1);
String name = rs.getString("name");
double balance = rs.getDouble(3);
System.out.println(id+"---"+name+"---"+balance);
package cn.itcast.jdbc;
import java.sql.*;
/*
DDL操作 创建表 但是一般不在这里面操作
*/
public class JdbcDemo06 {
public static void main(String[] args) {
Connection conn =null;
Statement stmt=null;
ResultSet rs=null;
try {
Class.forName("com.mysql.jdbc.Driver");
String sql = "select*from account";
conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
stmt = conn.createStatement();
//执行sql这一步发生了变化
rs = stmt.executeQuery(sql); //这里rs就是已经获取道德数据集 其实我觉着就是呢个表
//处理数据
//0.1让游标向下移动一行
rs.next();
//0.2获取数据 //这里rs就是已经获取道德数据集 其实我觉着就是呢个表
int id = rs.getInt(1);
String name = rs.getString("name");
double balance = rs.getDouble(3);
System.out.println(id+"---"+name+"---"+balance);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{ //释放资源 最后申请的先释放
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
上面代码的不能直接把表所有的内容都查了因为这里看不到表里面有几行数据
* 注意:正确代码使用步骤 正确的打开方式
* 使用步骤:
1. 游标向下移动一行
2. 判断是否有数据
3. 获取数据
有next();方法:
* boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true
这里用while循环 是正确的写法
package cn.itcast.jdbc;
import java.sql.*;
/*
DDL操作 创建表 但是一般不在这里面操作
*/
public class JdbcDemo07 {
public static void main(String[] args) {
Connection conn =null;
Statement stmt=null;
ResultSet rs=null;
try {
Class.forName("com.mysql.jdbc.Driver");
String sql = "select*from account";
conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
stmt = conn.createStatement();
//执行sql这一步发生了变化
rs = stmt.executeQuery(sql); //这里rs就是已经获取道德数据集 其实我觉着就是呢个表
//处理数据
//0.1让游标向下移动一行 获取第一行(表头下面一行的数据)
while(rs.next()){ //判断是否有数据 循环判断游标是否是最后一行末尾
//0.2获取数据 //这里rs就是已经获取道德数据集 其实我觉着就是呢个表
int id = rs.getInt(1);
String name = rs.getString("name");
double balance = rs.getDouble(3);
System.out.println(id+"---"+name+"---"+balance);}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{ //释放资源 最后申请的先释放
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
这里有两行数据直接全部都查询出来了