详述jdbc查询方法执行过程

代码

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 row(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/test", "root", "root");
			statement = connection.createStatement();
			resultSet = statement.executeQuery(sql);
			rowMapper.row(resultSet);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			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 row(ResultSet resultSet) {
				try {
					while (resultSet.next()) {
						String name = resultSet.getString("name");
						String address = resultSet.getString("address");
						System.out.print(name);
						System.out.print(address);
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		select("select name,address from student", new RowMapper());
	}
}

结果

nullnull

Navicat Premium 12

我们在这个MySQL图形化客户端管理工具上面建立MySQL,执行语句。
里面我们要用到的代码为:

use test;
create table student(
	id char(50),
	name char(40),
	user_name varchar(50),
	address varchar(85),
	password varchar(150)
 );

执行过程

因为要将判断语句从外部插入进去,所以,我们用接口和内部类实现这一功能。
1.我们再来看一下main方法中的代码如何执行。
执行select语句,传入select方法一个查询信息的语句,和一个对象。
2.跳到select方法。
(1)加载驱动类。使用Class.forName(“com.mysql.jdbc.Driver”);语句实现此功能。其中的com.mysql.jdbc.Driver可以找到Driver()复制过来。
(2)连接。使用connection = DriverManager.getConnection(“jdbc:mysql://127.0.0.1/test”, “root”, “root”);实现此功能,jdbc,意思是一种java API。MySQL点明我们是用的是MySQL执行的。127.0.0.1是本机,root是用户名,root是密码。不一定要和我的完全一样。
(3)创建语句。使用statement = connection.createStatement();语句实现。createStatement翻译过来就是创建语句嘛。
(4)执行语句。executeQuery()方法实现。这个方法被用来执行 select语句,但也只能执行查询语句,执行后返回代表查询结果的ResultSet对象。之后就要判断了,所以我们调用了row方法。传入resultSet。
3.进入内部类实现row方法 。resultSet.next() 就是本来内容是一条连续的有各自空间的长条。(看下图),在第一条内容上面有一个指针,这时候指针什么也不指,然而,当我们使用的时候,它会看一下他下面有没有内容,有内容的话就继续向下走,没有的话就停止了。我们用他的这个特性来判断语句是否执行完毕。在while内部,我们定义name和address,然后输出。由于运行时错误,我们使用try-catch来抛出。返回select方法,进行资源释放。即finally里的内容。因为要是先释放connection的话,由于statement还存在,所以无法释放成功。所以我们先释放statement,再释放connection。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值