目标:定义一个查询方法,能够实现对不同SQL语句做对应的结果
用此方法的目的是写好一个select查询方法,在使用不同的SQL语句时,直接重写接口里的方法再调用Select方法即可,也叫封装
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");//d、加载驱动类
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");//e、获取连接
statement = connection.createStatement();//f、创建语句
resultSet= statement.executeQuery(sql);//g、执行语句
rowMapper.rowMapper(resultSet);//h、处理结果,因为rowMapper变量存的是IRowMapper接口实现类对象,所以程序运行时调用该对象中的rowMapper方法
} catch (Exception e) {
e.printStackTrace();
}finally {//k、释放资源
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();
}
}
}
}//l select方法执行完毕,执行过程回到main方法
public static void main(String[] args) {
class RowMapper implements IRowMapper{
@Override
public void rowMapper(ResultSet resultSet) {
try {
while(resultSet.next()) {//i 遍历结果
String id = resultSet.getString("id");
String address = resultSet.getString("address");
System.out.println(id);
System.out.println(address);
}
} catch (Exception e) {
e.printStackTrace();
}
}//j 内部类中rowMapper执行完毕,则执行流程再次回到select方法
}
String sql = "select * from student";//a、sql存的是字符串地址
IRowMapper rowMapper = new RowMapper();//b、上转型对象,rowMapper存的是对象地址
select(sql,rowMapper);//c、开始调用select方法,执行过程切换到select方法,传入sql语句字符串地址,和IRowMapper实现类创建的对象的地址
}//m 以为这main方法结束,整个程序结束
}