关于JDBC理解

要点1:理解JDBC是一个接口,一个规范,相当于JAVA程序和数据库之间的一道桥梁。

要点2:学会创建JDBC工具类

JDBC工具类的创建分为六步:
1.注册驱动
2.获取链接
3.获取数据库操作对象
4.执行sql语句
5.处理查询结果
6.释放资源

要点3:具体实现

第一步:注册驱动

DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());

这里需要说的是当mysql版本为5.0的时候是没有cj的。
说明:
1.参数中new的实例为下载的驱动。
2.数据库驱动:是jdbc这个接口与mysql连接的重要渠道,没有驱动不能连接数据库。
3.数据库驱动下载完毕之后需要导入。
例如:创建动态网页项目之后需要导入 WebContent 下的 WEB-INF 下的 lib 文件夹下。
4.代码需要被try catch包围。
这个是最直观,最能体现过程的注册驱动的方式。
而通过源码,我们发现Driver类中存在一个静态代码块,包含我们所需要引用的这个方法。所以我们一般会使用类加载方法来注册驱动,即

Class.forName(com.mysql.cj.jdbc.Driver);

第二步:获取连接
配置文件:也可直接在类中定义

url = jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
user = 数据库用户名
password = 数据库密码

连接方法

Connection conn = DriverManager.getConnection(url, user,password);

第三步:获取执行sql语句的对象

最初使用时

Statement stmt = conn.createStatement();

然而会出现特殊情况:即插入语句中可能会出现sql语句,比如 or、and等。

为了杜绝这种情况的出现,通常会使用预编译,我们在后面在详细说。

第四步:执行sql语句
在这之前我们需要先准备好我们需要执行的sql语句,即:

String sql = "select * from users";
//查询语句的执行
ResultSet rs = ps.executeQuery(sql);

String sql = "insert into users(userName,password,sex,email)values(?,?,?,?)";
//增删改语句的执行
executeUpdate(sql);

这里多出的概念为
ResultSet:结果集,来存放经过查询后的结果的集合。而这里需要注意,只有在查询过程中,才会用到它。

第五步:处理查询结果
这里需要引入两个方法:

//指向集合的光标下移
rs.next();
//得到光标指向处的数据,i为第几列,i也可表示列名。
rs.getString(i)

:列名并不是数据库中表的列名,而是查询结果集中表的列名

第六步:释放资源

因为在第二步中JVM的进程和数据库自建的通道打开了,所以我们在使用完资源之后一定要关闭。

			try {
					if(rs != null)
						rs.close();
				} catch (Exception e) {
					// TODO: handle exception
					e.printStackTrace();
				}
				try {
					if(ps != null)
						ps.close();
				} catch (SQLException e) {
					// TODO: handle exception
					e.printStackTrace();
				}
				try {
					if(conn != null)
						conn.close();
				} catch (SQLException e) {
					// TODO: handle exception
					e.printStackTrace();
				}

至此在JDBC中我们要进行的操作就结束了。但是需要注意的是,我们一般并不会在JDBC工具类中直接执行sql语句,而是在DAO类中执行。因此,预编译阶段也并不是在JDBC工具类中执行的,而是在DAO类中。之后会更新对于DAO类的理解。

这里附上自己的JDBCUtil的代码:

import java.sql.*;
import java.io.*;
import java.util.Properties;


public class JDBCUtil {
		private static String driver;
		private static String url;
		private static String user;
		private static String password;
	static {
		//初始化连接信息
		//加载配置文件
		//使用类加载器 查找jdbc配置文件 ,且转化为输入流对象
		InputStream in = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
		Properties  prop = new Properties();
		try {
			//加载系统文件  转化为 配置对象
			prop.load(in);
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("系统文件无法加载");
		}
		driver = prop.getProperty("driver");
		url = prop.getProperty("url");
		user = prop.getProperty("user");
		password = prop.getProperty("password");
		//注册驱动
		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			// TODO: handle exception
			e.printStackTrace();
			System.out.println("未加载成功");
		}
	}
	//获取连接
	public static Connection getConnection() {
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(url, user,password);
		} catch (SQLException e) {
			e.printStackTrace();
			System.err.println("连接获取失败");
		}
		return conn;
		
	}
	//释放资源
	public static void close(Connection conn,Statement ps,ResultSet rs) {
		//释放资源,从小到大。
				try {
					if(rs != null)
						rs.close();
				} catch (Exception e) {
					// TODO: handle exception
					e.printStackTrace();
				}
				try {
					if(ps != null)
						ps.close();
				} catch (SQLException e) {
					// TODO: handle exception
					e.printStackTrace();
				}
				try {
					if(conn != null)
						conn.close();
				} catch (SQLException e) {
					// TODO: handle exception
					e.printStackTrace();
				}
	}
	
}

这里涉及到加载配置文件的知识,但是并不会影响对思想的理解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值