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)、查询记录:
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号