package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
interface IRowMapper{
void rowMapper(ResultSet resultSet);
}
public class Select {
public static void select(String sql,IRowMapper rowMapper) {
Connection connection = null;
Statement statement = null;
ResultSet resultSet= null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");
statement = connection.createStatement();
resultSet= statement.executeQuery(sql);
rowMapper.rowMapper(resultSet);
} catch (Exception e) {
e.printStackTrace();
}finally {
if (resultSet!=null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement!=null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection!=null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
class RowMapper implements IRowMapper{
@Override
public void rowMapper(ResultSet resultSet) {
try {
while(resultSet.next()) {
String id = resultSet.getString("id");
String address = resultSet.getString("address");
System.out.println(id);
System.out.println(address);
}
} catch (Exception e) {
e.printStackTrace();
}
} }
String sql = "select * from student";
IRowMapper rowMapper = new RowMapper();
select(sql,rowMapper);
}
}
为了实现定义一个查询方法,能够实现对不同SQL语句做对应的结果,我们首先定义一个IRowMapper接口,接口中定义了rowMapper方法,参数为resultSet的集合,定义了查询(select)方法。
程序从main方法开始:
1、String sql = "select * from student";//第一个参数为(String类型)字符串类型sql参数,sql存的是字符串地址。
2、IRowMapper rowMapper = new RowMapper();//上转型对象,RowMapper是接口的实现类,rowMapper存的是对象地址
3、select(sql,rowMapper);//开始调用select方法,执行过程切换到select方法,传入sql语句字符串地址,和IRowMapper实现类创建的对象的地址
4、进入方法之后首先对全局变量进行赋值,均为null;
5、Class.forName("com.mysql.jdbc.Driver");//加载驱动类,引用jar包中驱动driver包;
6、connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");//获取连接,类名,数据库类型,地址,本地接口,数据库名称,用户名,密码;
7、statement = connection.createStatement();//创建语句
8、resultSet= statement.executeQuery(sql);//执行语句,查询sql语句
9、 rowMapper.rowMapper(resultSet);//处理结果,rowMapper对象调用rowMapper方法,看似调用接口的方法,实际已经重写,调用的是rowMapper对象的方法,因为rowMapper变量存的是IRowMapper接口实现类对象,所以程序运行时调用该对象中的rowMapper方法
10、while(resultSet.next()) {//i到rowMapper重写的方法里面,遍历结果(指针从头开始下移进行遍历)
11、内部类中rowMapper执行完毕,则执行流程再次回到select方法
12、finally {//释放资源,如果存在对象,不为空,将语句进行关闭
13、调用的select方法执行完毕,执行过程回到main方法
14、最后main方法结束,整个程序结束