package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
interface IQ {
void a(ResultSet r);
}
public class Select {
public static void select(String sql, IQ ia) {
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);// 执行语句
ia.a(resultSet);
} catch (Exception e) {
e.printStackTrace();
} finally {// 释放资源
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 Mapper implements IQ {
public void a(ResultSet r) {
try {
while (r.next()) {
String id = r.getString("id");
System.out.println(id);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
select("select * from student", new Mapper());
}
}
创建接口是为了方便在main方法里定义一个实现类去实现目标:定义一个查询方法,能够实现对不同SQL语句做对应的结果
ResultSet是结果集,子类Mapper继承接口IQ,重写方法a(ResultSet r),在这里实现SQL数据库中相关信息的查询输出。同时捕获异常。下面调用Select类中select方法,先定义好三个全局变量,
Class.forName("com.mysql.jdbc.Driver");// 加载驱动
是首先要进行的,先写lass.来引出forName()方法,
下滑找到Driver关键字右键copy Qualified name粘贴带括号中,下一步:
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");// 创建链接
建立连接,jdbc架包对应MySQL,地址,数据库名,密码,密码。下一步:
statement = connection.createStatement();// 创建语句
创建出来要填写的面板,接下来:调用select方法时
resultSet = statement.executeQuery(sql);// 执行语句
ia.a(resultSet);
表面是调用的接口里得方法,其实是接口IQ的实现类ia里的重写的方法a(ResultSet r),因为下面对应传入参数是sql语句字符串地址和new Mapper()-->接口的实现类创建的对象的地址, 现在执重写的方法,之后回到上面释放资源,select方法结束回到main方法终结。下面是老师的代码:
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 {
//详述JDBC查询方法执行过程
//目标:定义一个查询方法,能够实现对不同SQL语句做对应的结果
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方法结束,整个程序结束
}