import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
import org.junit.Test;
public class TestResuleSet {
@Test
public void testResultSet() throws Exception{
Connection con = null;
Statement state = null;
ResultSet rs= null;
try {
//1、获取Conection,建立数据库连接
con = getConnection3();
//2、获取statement
state = con.createStatement();
//3、创建SQL语句
String sql = "SELECT * FROM animal";
//4、调用executeQuery(String sql)方法获取ResultSet
rs = state.executeQuery(sql);
//5、处理ResultSet
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(id);
System.out.println(name);
System.out.println(age);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//6、关闭数据库
if(rs != null){
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(con != null){
try {
state.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(con != null){
con.close();
}
}
}
public Connection getConnection3() throws Exception{//获取数据库连接
String driverClass = null;
String url = null;
String user = null;
String password = null;
Properties properties = new Properties();
InputStream in = this.getClass().getClassLoader().getResourceAsStream("jdbc.properties");
properties.load(in);
driverClass = properties.getProperty("driver");
url = properties.getProperty("jdbcurl");
user = properties.getProperty("user");
password = properties.getProperty("password");
Class.forName(driverClass);
return DriverManager.getConnection(url, user, password);
}
}
//输出结果如下
// 1
// cat
// 3
// 2
// dog
// 5
通过ResultSet执行查询操作
在JAVA中,查询操作需要在建立了数据库连接后,获取Statement对象并且利用该对象的executeQuery(String sql)方法来返回一个对应的数据库的数据集(相当于将表返回),该数据集是ResultSet类型的,当得到了ResultSet对象后,就可以调用一系列方法来查询指定的某个元素,具体步骤如下:
1、获取数据库连接得到Connection对象
2、通过Connection对象获取Statement对象(调用Connection中的createStatement()方法)
3、调用Statement对象中的executeQuery(String sql)方法获取ResultSet类型的数据表
4、利用ResultSet对象的next()方法,该方法相当于表中的一个指针,初始时是指向表中第一行数据的上方,每调用一次该方法,就会判断下一行是否有值,如果有,指针向下移动指向下一行,并返回true,若没有,则返回false
5、若next()方法返回true,则意味着我们可以进行查询操作了,这时候可以调用ResultSet对象中的getInt()、getString()、getDate()等一系列getxxx()方法来获取表中next()所指的那一行的某一列数据,注意这些getxxx()方法是有参数的,参数可以是被查找的那一列的列名(即String类型),也可以是int型(即int型的值为某一列的序号)
6、和更新操作一样,在查询完后,应该依次按顺序关闭数据库,并且为了防止运行过程中出现异常而导致无法关闭数据库,关闭语句都应该在finally中执行,关闭顺序为 先关闭ResultSet对象,再关Statement对象,最后关Connection对象,用四个字来总结就是"先获后关"。
下面是具体的一个查询操作的例子:
首先在本地数据库中有样一个名为animal的表:
下面要做的就是对这个表中的数据进行查询,具体代码如下: