准备连接数据库基本信息的配置文件:
我要写把张数据库里的数据表的记录查出来,打印到控制台上:
/**
* ResultSet:结果集,封装了使用JDBC进行查询的结果。
* 查询到的结果就在这个里面;
*
* 基本的:结果集ResultSet怎么样来获取呢?
* 1.调用Statement对象的executeQuery(sql)可以得到结果集;
*
* 我得到这个结果集之后呢,我如何来处理这个结果集呢?
* 2.ResultSet 返回的实际上就是一张数据表,有一个指针指向数据表第一行的全面(也就是第一行的第一个列号)
* 可以调用next()方法检测下一行是否有效,若有效该方法返回true,且指针下移;
* 我们讲集合Iterator的时候,我们讲了一个hasNext()和next()方法吧,这里的这个next()就
* 相当于Iterator对象的hasNext()和next()方法的结合体,hasNext()方法是看下一个是否有效吧,
* 然后调next()方法往下移吧;
*
* 我往下移的话,我如何获取每一行、每一列的值?也就是说我这个时候已经往下移了,移完之后我指向这一行了,那我如何获取到这一行、这一列的值呢?
* 3.当指针定位到一行时,可以通过getXxx(index),或getXxx(columName)获取每一 列的值;例如getInt(1),如果这一行的第
* 一列是 int类型的话,就获取第一列的这个值,如getString("name")就是获取这一行列名是name的这一列的值;
*
* 4.ResultSet 当然也需要进行关闭;
*
*/
@Test
public void testResultSet(){
/**
* 获取ID=2的customers数据表的记录,并打印:
*/
//因为在finally里面我需要关闭资源,所以把这三个方在前面定义:
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
//1.获取Connection:
connection = JdbcTools.getConnection();
//2.获取Statement:
statement = connection.createStatement();
//3.准备SQL语句:
String sql = null;
//
sql = "SELECT id,name,email,birthday "+
//
"FROM customers WHERE id = 2";
sql = "SELECT id,name,email,birthday "+
"FROM customers";
//4.执行查询,得到ResultSet:
resultSet = statement.executeQuery(sql);
//5.处理ResultSet:
//我需要往下面移动:
while(resultSet.next()){
int id = resultSet.getInt(1);
String name = resultSet.getString(2);
String email = resultSet.getString(3);
Date birthday = resultSet.getDate(4);
//打印:
System.out.println("id=" + id +",name=" + name +",email=" + email + ",birthday=" + birthday);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//6.关闭数据库资源:
JdbcTools.release_2(resultSet, statement, connection);
}
}
工具类:
package com.zhou.jdbc;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
/**
* 版本1:后面这些方法还可以升级,比方说我们不能每次操作都获取一个数据库连接,比方说后面会学数据库连接池;
*
* 操作JDBC的工具类:其中封装了一些工具方法:
*
* 1.获取连接的方法;
*
* @author Administrator
*
*/
public class JdbcTools {
/**
* 1.获取连接的方法:这个方法在前面已经写过了,只是这个是工具方法,需要加上static: ---通过读取配置文件从数据库服务器获取一个连接;
*
* 用DriverManager来把之前那个通用的方法写一遍:
*
* @throws Exception
*/
public static Connection getConnection() throws Exception {
// 1.准备连接数据库的四个字符串:
// 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、jdbcUrl、driverClass四个字符串:
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String jdbcUrl = properties.getProperty("jdbcUrl");
String driverClass = properties.getProperty("dirver");
// 2.加载数据库驱动程序(实际上这一步应该叫:注册驱动,对应的Driver实现类中有注册驱动的静态代码块):
Class.forName(driverClass);
// 3.获取数据库的连接:
// Connection connection = DriverManager.getConnection(jdbcUrl, user,
// password);
// return connection;
return DriverManager.getConnection(jdbcUrl, user, password);
}
/**
* 2.关闭数据库资源的方法: 它关闭一个Statement,再关闭一个Connection:
*/
public static void release(Statement statement, Connection connection) {
if (statement != null) {
try {
statement.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
/**
* 3.关闭数据库资源的方法: 它关闭三个:ResultSet、Statement、Connection:
*/
public static void release_2(ResultSet resultSet ,Statement statement, Connection connection) {
if (resultSet != null) {
try {
resultSet.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (Exception e3) {
e3.printStackTrace();
}
}
}
}
本文出自 “IT技术JAVA” 博客,转载请与作者联系!