详述JDBC查询方法执行过程

目标

定义一个查询方法,能够实现对不同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版权协议,转载请附上原文出处链接和本声明。