JDBC入门到精通(上)
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情
1. 基本知识
- 概念
- JDBC: java data base Connection 数据库连接接口集合、接口、类 群,java提供一套标准,增删改查各大厂家的数据库
- 常见的数据库:MySQL Oralce DB2 MongDB
- JDBC本质
- 下载安装
实现JDBC接口的工具包需要在各大数据库官网进行下载,JDK包中是不包括的,下面是我使用的mysql 工具包,对应版本是mysql 5 的都可以使用,大家也可以去官网下载,具体教程自行度娘 !
链接:pan.baidu.com/s/1SnUBzK7h… 提取码:us4v
- 在IDEA 里面使用 jar包
第一步: 在src 同级处建一个目录directory,把jar包放进目录
第二步: IDEA 添加外部jar
第三步: 在jar包上点击右键 -> add as Library -> 选择级别
提示: 提供一个navicate 绿色版软件版,里面有注册机,需要的自行安装哦!
链接:pan.baidu.com/s/1_8l0IdwZ… 提取码:o0n1
2. 通过java程序操作数据库
基本步骤:
- 注册驱动
- 建立简介
- 获取数据库操作对象
- 执行sql语句
- 处理结果
- 释放资源
我们就以emp表进行演示
-
通过java实现增添员工的效果
- localhost : 默认为本地地址 也可以写成127.0.0.1 都是一样的效果
package jdbc;
import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCTest06 {
public static void main(String[] args) {
/*
* 1、注册驱动
* 2、获取连接
* 3、获取数据库操作对象
* 4、执行sql语句
* 5、处理结果
* 6、释放资源
* */
Statement sta = null;
Connection conn = null;
try {
DriverManager.registerDriver(new Driver());
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test810","root","123456");
sta = conn.createStatement();
String sql = "insert into empsss (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (2022,'TOM','MANAGER',9455,now(),2500,100,20)";
int count = sta.executeUpdate(sql);
System.out.println(count>0 ? "添加成功!":"添加失败!");
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
try {
if(sta !=null){
sta.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
if(conn !=null) {
conn.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
运行结果:
-
获取数据库的方式(以上面的例题为例)
- 注意:这里知识提及有这么写方法,这篇文章主要是以入门为主,后续的方法使用,将在之后的文章中展现
方式一 :
- 使用DriverManager 对数据库地址、账号、密码进行统一管理
DriverManager.registerDriver(new Driver());
conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/test810","root","123456");
sta = conn.createStatement();
方式二:(推荐)
- 通过映射的方式获取数据库,代码更加简介
// DriverManager.registerDriver(new Driver());
Class clazz = Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/test810","root","123456");
sta = conn.createStatement();
因为调用Class 类 的forName 会找到Driver包执行 Driver 字节码文件,在调用这个类的时候,会首先加载静态代码块里面的代码,恰好 DriverManager.registerDriver(new Driver()); 这行代码在静态代码块里面,所以我们不用再写重复的代码
方式三:(最终方式,推荐使用)
-
把相关信息都写到文件里面(数据库地址、账号、密码),通过集合找到配置文件信息
-
ResourceBundle的使用:注意事项
- 路径从src出发,再getBundle() 里面,路径不要再写src
- 读取文件一定要以properties结尾,只要写文件名,不需要写文件properties 后缀!、
- 通过 info.getString 方法获取对应的信息
ResourceBundle info = ResourceBundle.getBundle("dbinfo");
driver = info.getString("adsf");
url = info.getString("url");
user = info.getString("user");
pwd = info.getString("pwd");
-
最终形式的底层代码:
- 通过集合读取配置文件信息,路径是从module包开始的,移植性不强,使用起来也比较复炸
FileReader fr = new FileReader("day48/src/objinfo.txt");
Properties info = new Properties();
info.load(fr);
fr.close();
String objnames = info.getProperty("objname");
System.out.println(objnames);
String[] names = objnames.split(",");
for (String name : names) {
Class c = Class.forName(name);//触发类加载,类加载的时候会执行静态代码块
Object obj = c.newInstance();
System.out.println(obj);
}
\