JavaWeb笔记之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

  1. oracle

驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1521
example:jdbc:oracle:thin:@localhost :1521:orcl

  1. mysql

驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认3306
example:jdbc:mysql://localhost:3306/mydatabase

  1. 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. 数据库的连接步骤

  1. 加载驱动//com.MySQL.jdbc.Driver
  2. 获取连接 Connection对象
  3. 获取用于向数据库发送SQL的Statement对象
  4. 执行sql,获取数据,解析数据
  5. 关闭连接,释放资源

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. 使用数据源(推荐这种方法)

  1. 配置数据源
<?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>
  1. 使用数据源
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)、查询记录:

posted on   JAVA开发区  阅读(19)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示