目标
定义一个查询方法,能够实现对不同SQL语句做对应的结果
思路
如果在main方法中直接使用getString()方法获取resultSet中存放的数据,由于调用select方法最后会释放resultSet、statement、connection的空间,因此main方法中的resultSet此时为空。
那么想到我们可以在释放空间前实现table信息的传递,而这样就需要利用多态来实现最终在main方法里获取table信息的目的。
我们可以通过创建特定接口和内部实现类来产生多态。
步骤
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
interface IRowMapper{//创建接口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");//4、加载驱动
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");//5、创建链接
statement = connection.createStatement();//6、创建语句
resultSet = statement.executeQuery(sql);//7、执行语句
rowMapper.rowMapper(resultSet);//8、上转型对象表面调用接口的抽象方法实则调用main方法中内部类中重写过的方法
} catch (Exception e) {
e.printStackTrace();
}finally {//10、释放资源
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (resultSet != null) {
try {
resultSet.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{//创建内部类RowMapper并实现接口IRowMapper
@Override
public void rowMapper(ResultSet resultSet) {
try {
while(resultSet.next()) {//9、获取table中的数据
String id = resultSet.getString("id");
System.out.println(id);
String address = resultSet.getString("address");
System.out.println(address);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
String sql = "select * from student";//1、首先获取操作语句
IRowMapper rowMapper = new RowMapper();//2、创建上转型对象方便调用内部类中重写过的rowMapper()方法(用于在回收空间前得到table中的数据)
select(sql,rowMapper);//3、调用selec方法,传递sql语句和rowMapper上转型对象
}
}1.我们首先在main方法中获取SQL操作语句
String sql = "select * from student";2.然后我们创建上转型对象rowMapper
IRowMapper rowMapper = new RowMapper();3.接着我们调用select方法,传入SQL语句字符串地址和RowMapper实现类创建的rowMapper对象的地址
select(sql,rowMapper);4.加载驱动
5.获取链接
6.创建语句
7.执行语句
8.处理结果:此处上转型对象表面调用接口的抽象方法实则调用main方法中内部类中重写过的方法
rowMapper.rowMapper(resultSet);9.遍历结果,获取resultSet中的数据
try {
while(resultSet.next()) {//9、获取table中的数据
String id = resultSet.getString("id");
System.out.println(id);
String address = resultSet.getString("address");
System.out.println(address);
}
} catch (Exception e) {
e.printStackTrace();
}10.释放资源
版权声明:本文为weixin_43457668原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。