1、概念
- JDBC(Java Database Connectivity)是一种用于执行SQL语句的JavaAPI,可以为多种关系型数据库提供统一访问,他是由一组用Java语言编写的类和接口组成。
2、本质
- java官方提供的一套规范,用于帮助开发人员快速实现不同关系型数据的连接。
实际上就是SUN公司为了满足程序员便利,提供了很多供程序员使用来操作数据库的接口,而这些接口的具体实现则在每个数据库公司去单独实现。使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。
如果没有JDBC,java程序调用数据库需要实现每个数据库的不同方法。 采用JDBC后:
3、入门程序流程
- 导入jar包
- 注册驱动 (告诉java程序,即将连接的是哪个品牌的数据库)
- 获取数据库连接 (表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级,使用完之后一定要关闭)
- 获取执行者对象 (专门执行sql语句的对象)
- 执行sql语句并返回结果
- 处理结果 (只有上一步执行的是select语句,才会处理数据)
- 释放资源 (java和数据库是进程间的通信)
4、连接
4.1 注册驱动
由 Driver接口实现:
具体代码实现:
下面这段代码写在了 Driver类的静态代码块中了,只需要让类加载即可以执行静态代码块,因此可以通过反射机制进行类的加载,即上面代码。 不需要返回值,只需要他的类加载动作。
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
4.2 URL
- url: 统一资源定位符(网络中某个资源的绝对路径)
- URL包括: 协议 IP PORT 资源名
- http:// 通信协议 182.61.200.7 IP地址 80 端口号 index.html 服务器上的某个资源名
5、代码实现
5.1 实现DML语句(增 删 改)
没有返回结果集,stat调用的是 executeUpdate 方法,返回的结果是对数据的进行DML操作的记录条数。count==1则表示对一条数据进行DML操作,返回3则是处理记录条数为3。
package com.java;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcDemo {
public static void main(String[] args) throws Exception {
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/mytest1","root","root");
Statement stat = con.createStatement();
String sql = "insert into user(id,name,age) values (20,'aaa',20)";
int count = stat.executeUpdate(sql);
if(count==1){
System.out.println("保存成功");
}
stat.close();
con.close();
}
}
5.2 实现DQL语句 (查询语句)
执行的是 executeQuery 方法,返回的是处理集,然后对处理集进行遍历,则可以列出数据。
package com.java;
import java.sql.*;
public class Jdbcselect {
public static void main(String[] args) {
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mytest1","root","root");
stat = conn.createStatement();
String sql = "select * from user";
rs = stat.executeQuery(sql);
while (rs.next()){
String id = rs.getString("id");
String name = rs.getString("name");
String age = rs.getString("age");
System.out.println(id+" "+name+" "+age);
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stat!=null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
5.3 优质方法—配置文集存放字符串
在对应的src下创建一个配置文件jdbc.properties其中的内容如下:
className=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mytest1
user=root
password=root
使用配置文件的好处:
- 实现了代码和数据的分离,如果需要修改配置信息,直接在配置文件中修改,不需要深入代码 ,解耦。
- 如果修改了配置信息,省去重新编译的过程。
- 编写的java程序在部署到服务器上时,需要打包。如果java代码修改过,就需要重新打包。使用配置文件的方式,如果配置信息修改,并没有导致代码的修改。所以不需要重写打包。
Properties properties = new Properties();
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
properties.load(is);
String className = properties.getProperty("className");
String url = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password");
Class.forName(className);
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
|