原理:
ResultSet:结果集合,封装了使用JDBC进行查询的结果
1. 调用Statement对象的
2. ResultSet返回的实际就是一张数据表,有一个指针指向数据表的第一行的前面,可以调用next()方法检测下一行是否有效
若有效该方法返回true,且指针下移,相当于Iterator对象的hasNext()和next()方法的结合体
3. 当指针定位到一行时,可以调用getXXX(index)或者getXXX(columName)获取每一列的值,
4. ResultSet当然也需要关闭。
package com.atguigu.jdbc;
import java.beans.Statement;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import org.junit.Test;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Driver;
public class JDBCSelect {
/**
* ResultSet:结果集合,封装了使用JDBC进行查询的结果
* 1. 调用Statement对象的
* 2. ResultSet返回的实际就是一张数据表,有一个指针指向数据表的第一行的前面,可以调用next()方法检测下一行是否有效
* 若有效该方法返回true,且指针下移,相当于Iterator对象的hasNext()和next()方法的结合体
* 3. 当指针定位到一行时,可以调用getXXX(index)或者getXXX(columName)获取每一列的值,
* 4. ResultSet当然也需要关闭。
* @throws SQLException
* @throws IOException
* @throws ClassNotFoundException
*/
@Test
public void testResultSet() throws SQLException, ClassNotFoundException, IOException {
//获取customers数据表的记录,并打印
Connection conn = null;
java.sql.Statement statement = null;
ResultSet rs = null;
try {
//1. 获取Connection
conn = JDBCTools.getConnection();
//2. 获取Statement
statement = conn.createStatement();
//3. 准备SQL
String sql = "SELECT * FROM customers";
//4. 执行查询,得到ResultSet
rs = ((java.sql.Statement) statement).executeQuery(sql);
//5. 处理ResultSet
while(rs.next()) {
int id = rs.getInt(1);
String name = rs.getString(2);
String email = rs.getString(3);
Date birth = rs.getDate(4);
System.out.println(id);
System.out.println(name);
System.out.println(email);
System.out.println(birth);
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//6. 关闭数据库资源
JDBCTools.release(rs, statement, conn);
}
}
}
JDBCTools工具类也提供给大家吧:
package com.atguigu.jdbc;
import java.beans.Statement;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import com.mysql.jdbc.Connection;
/**
* 手写操作JDBC的工具类,封装了一些工具方法
* Version 1
*/
public class JDBCTools {
/**
* 1. 获取连接的方法
* 通过读取配置文件从数据库服务器获取一个连接
* @return
* @throws Exception
*/
public static Connection getConnection() throws IOException, ClassNotFoundException, SQLException {
//1.准备连接数据库的4个字符串
//1).创建Properties对象
Properties properties = new Properties();
//2).获取jdbc.properties对应的输入流
InputStream in = JDBCTools.class.getClassLoader().getResourceAsStream("jdbc.properties");
//3).加载2)对应的输入流
properties.load(in);
//4)具体决定user,password等4个字符串
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String jdbcUrl = properties.getProperty("jdbcUrl");
String driver = properties.getProperty("driver");
//2.加载数据库驱动程序(对应Driver 实现类中有注册驱动的静态代码块)
Class.forName(driver);
//3.通过DriverManager的getConnection()方法获取数据库连接
return (Connection) DriverManager.getConnection(jdbcUrl, user, password);
}
/**
* 关闭Statement和Connection
* @param statement
* @param conn
*/
public static void release(ResultSet rs, java.sql.Statement statement, Connection conn) {
//关闭ResultSet对象
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//关闭Statement对象
if(statement != null) {
try {
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//关闭conn对象
if(conn != null) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
查询结果: