JDBC访问数据库
概述
本篇博文中主要探讨以下内容:
- JDBC的体系结构
- JDBC的API
- JDBC的连接数据库步骤
- 数据源的配置和使用
- DAO设计模式
1. JDBC的体系结构
- JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的Java
API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。 - JDBC API定义了一系列操作数据库的接口和具体类,接口由具体的数据库公司来实现.
JDBC的基本功能:
1.建立与数据库的连接
2.发送SQL语句
3.处理数据库操作结果
2. JDBC的API
2.1Connection 接口
通过调用DriverManager类的静态方法getConnection()或数据源(DataSource)对象的getConnection()都可以连接(Connection)对象。
2.2 DriverManager类
DriverManager类是JDBC的管理层,作用于应用程序和驱动程序之间,即上图的JDBC驱动程序管理器
这个类的作用就是去跟踪可用的驱动程序,让这个数据库和驱动程序之间能建立连接。
两个静态方法
public staitc Connection getConnection(String dburl);
public static Connection getConnection(String dburl,String user,String password);
//dburl指的是JDBC的URL,user表示数据库用户名,password表示口令,密码。
数据库URL
三种常见的数据库url
- oracle
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1521
example:jdbc:oracle:thin:@localhost :1521:orcl
- mysql
驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认3306
example:jdbc:mysql://localhost:3306/mydatabase
- SQL Server
驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://<machine_name><:port>;DatabaseName=
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1433
example:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbname
2.3 Statement接口
对数据库数据一系列的操作依赖于SQL语句,而Statement接口是用来执行SQL语句的,Statement对象需要通过Connection类里面的createStatement()方法进行创建
Statement接口: 用于执行静态的sql语句
1)int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML)
2)ResultSet executeQuery(String sql) :执行的静态的查询sql语句(DQL)
PreparedStatement接口(Statement接口的子接口):用于执行预编译sql语句(更推荐使用)
1) int executeUpdate() : 执行预编译的更新sql语句(DDL,DML)
2)ResultSet executeQuery() : 执行预编译的查询sql语句(DQL)
2.4 Result接口
ResultSet接口:用于封装查询出来的数据
1)boolean next() : 将光标移动到下一行
2)getXX() : 获取列的值
3. 数据库的连接步骤
- 加载驱动//com.MySQL.jdbc.Driver
- 获取连接 Connection对象
- 获取用于向数据库发送SQL的Statement对象
- 执行sql,获取数据,解析数据
- 关闭连接,释放资源
1.加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");//加载MySQL驱动
Class.forName("oracle.jdbc.driver.OracleDirver");//加载Oracle驱动
2.建立连接对象
String dburl = "jdbc:mysql://localhost:3306/mydatabase?useSSL=true";
Connection conn = DriverManager.getConnection(url,"root","123456");
3.创建语句对象
Statement stmt = conn.createStatement();
//创建预编译的PreparedStatemen对象(推荐)
String sql = "select * from products";
PreparedStatement pstmt = dbconn.prepareStatement(sql);
4.执行SQL语句并处理结果
String sql = "select * from products";
Statement stmt = conn.createStatement();
ResultSet rst = stmt.executeQuery(sql);
while(rst.next()){
out.print(rst.getString(1)+"\t");
}
5.关闭建立的对象
使用close()关闭Connection对象、Statement对象、ResultSet对象。
4. 使用数据源(推荐这种方法)
- 配置数据源
<?xml version="1.0" encoding="utf-8"?>
<Context reloadable="true" >
<Resource
name="jdbc/mydatabase" --数据源名
type="javax.sql.DataSource" --指定资源的类型
driverClassName="com.mysql.jdbc.Driver" --使用的JDBC驱动程序的完整类名
url="jdbc:mysql://localhost:3306/BookDB?autoReconnect=true"
username="root" --数据库用户名
password="123456" --数据库用户密码
maxActive="100"
maxIdle="30" --连接池中可空闲的连接数
maxWait="10000"
/>
</Context>
- 使用数据源
Context context = new InitialContext();
DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/mydatabase");
5.DAO设计模式:
5.1、DAO简介:
DAO设计模式是属于J2EE数据层的操作,使用DAO设计模式可以简化大量代码,增强程序的可移植性。
5.2、DAO各部分详解:
DAO设计模式包括以下5个主要部分:
(1)、数据库连接类;
数据库连接类的主要功能是连接数据库并获得连接对象,以及关闭数据库。通过数据库连接类可以大大的简化开发,在需要进行数据库连接时,只需常见该类的实例,并调用其中的方法就可以获得数据库连接对象和关闭数据库,不必再进行重复操作。例:
Package com.javaweb.dao1
Import java.sql.*;
Public class DataBaseConnection{
Private final String DBDRIVER = “com.mysql.jdbc.Driver”;
Private final String DBURL = “jdbc:mysql://localhost:3306/javaweb”;
Private final String DBUSER = “root””;
Private final String DBPASSWORD = “585762”;
Private Connection conn = null;
Public DataBaseConnection(){
Try{
Class.forName(DBDRIVER);
This.conn =
DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
}catch(Exception e){
System.out.println(“加载数据库驱动失败!”);
}
}
Public Connection getConnection(){
Return conn;
}
Public void close(){
Try{
Conn.close();
}catch(){
System.out.println(“数据库连接关闭失败!”);
}
}
}
(2)、VO类:
VO类是一个包含属性和表中字段完全对应的类,并在该类中提供setter和getter方法来设置并获取该类中的属性。例:
Package com.javaweb.dao1
Public classs User{
Private int userid;
Private String username;
Private String password;
Public int getUserid(){
Return userid;
}
Public void setUserid(int userid){
Return userid;
}
Public String getUsername(){
Return username;
}
Public void setUsername(String username){
Return username;
}
Public String getUserpassword(){
Return userpassword;
}
Public void setUserid(String userpassword){
Return userpassword;
}
}
(3)、DAO接口:
DAO接口中定义了所有的用户操作,如添加记录、删除记录及查询记录等。不过因为是借口,所以仅仅是定义,需要子类实现。例:
Package com.javaweb.dao1;
Import java.util.*;
Public class UserDAO{
public void insert(User user)throw Exception;
Public void update(User user)throw Exception;
Public void delete(int userid)throw Exception;
Public User queryById(int userid)throw Exception;
Public List queryAll()throw Exception;
}
(4)、DAO实现类:
DAO实现类实现了DAO接口,并实现了接口中定义的所有方法。
(5)、DAO工厂类:
在没有DAO工厂类的情况下,必须通过创建DAO实现类的实例才能完成数据库操作。这时就必须知道具体的子类,对于后期的修改非常不方便。
使用DAO工厂类,可以比较方便地对代码进行管理,而且可以很好地解决后期修改的问题,通过该DAO工厂类的一个静态方法来获取DAO实现类实例。这时如果要替换DAO实现类,只需要修改该Dao工厂类中的方法代码,而不必邀修改所有的操作数据库代码。例:
Package com.javaweb.dao1;
Public class DAOFactory{
Public static UserDAO getUserDAOInstance(){
Return new UserDAOImpl();
}
}
3、使用DAO完成数据库操作:
(1)、添加记录:
(2)、更新记录:
(3)、删除记录:
(4)、查询记录:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现