一:JDBC简介

1.什么是JDBC
JDBC指Java数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接Java编程语言和广泛的数据库;从根本上来说,JDBC是一种规范,它提供了一套完整的接口,允许便携式访问到底层数据库
JDBC API 库包含下面提到的每个任务,都是与数据库相关的常用用法。

制作到数据库的连接
创建 SQL 或 MySQL 语句
执行 SQL 或 MySQL 查询数据库
查看和修改所产生的记录

2.JDBC架构
JDBC的API支持两层和三层处理模式进行数据库访问,但一般的JDBC架构由两层处理模式组成:
JDBC API: 提供了应用程序对 JDBC 管理器的连接。
JDBC Driver API: 提供了 JDBC 管理器对驱动程序连接。

常见的JDBC组件
DriverManager:这个类管理一系列数据库驱动程序
Driver: 这个接口处理与数据库服务器的通信
Connection: 此接口具有接触数据库的所有方法
Statement: 使用创建于这个接口的对象将SQL语句提交到数据库。
ResultSet: 在你使用语句对象执行SQL查询后

二:JDBC SQL语法

在上次的文章中详细地写了SQL各种语法,此处不在赘述

三:JDBC驱动类型

1.类型1:JDBC-ODBC 桥驱动程序
在类型1驱动程序中,一个 JDBC 桥接器是用来访问安装在每个客户机上的 ODBC 驱动程序
2.类型2:JDBC-Native API
在类型2驱动程序中,JDBC API调用转换成原生的 C/C++ API调用,这对于数据库来说具有唯一性。这些驱动程序通常由数据库供应商提供,并和 JDBC-ODBC 桥驱动程序同样的方式使用。该供应商的驱动程序必须安装在每台客户机上。
3.类型3:JDBC-Net纯Java
在类型3驱动程序中,一般用三层方法来访问数据库
4.类型4:100%纯Java
在类型4驱动程序中,一个纯粹的基于 Java 的驱动程序通过 socket 连接与供应商的数据库进行通信。这是可用于数据库的最高性能的驱动程序,并且通常由供应商自身提供。

四:JDBC连接数据库

步骤:
1.导入JDBC包
在你的Java代码中,用import语句添加你所需的类

import java.sql.* ;  // for standard JDBC programs
import java.math.* ; // for BigDecimal and BigInteger 

2.注册JDBC驱动程序
这一步会导致JVM加载所需的驱动程序到内存中执行,因此它可以实现你的JDBC请求
注册方法:
(1)Class.forName()

try {            
   Class.forName("oracle.jdbc.driver.OracleDriver"
);
}
catch(ClassNotFoundException ex) {
   System.out.println("Error: unable to load driver class!");
   System.exit(1);
}

(2)方法2:DriverManager.registerDriver()

try {
   Driver myDriver = new oracle.jdbc.driver.OracleDriver();
   DriverManager.registerDriver( myDriver );
}
catch(ClassNotFoundException ex) {
   System.out.println("Error: unable to load driver class!");
   System.exit(1);
}

3.数据库URL制定
这是用来创建格式正确的地址指向你想要连接的数据库
三个加载 DriverManager.getConnection() 方法:
1>getConnection(String url)
2>getConnection(String url,Properties prop)
3>getConnection(String url,String user,String password)
4.创建连接对象
最后,代码调用 DriverManager对象的 getConnection()方法来建立实际的数据库连接
例如:

String JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String URL = "jdbc:sqlserver://数据库地址;DatabaseName=数据库名;
String USER = "username";
String PASS = "password"
Connection conn = DriverManager.getConnection(URL, USER, PASS);

5.Statement 对象
Statement:可以正常访问数据库,适用于运行静态 SQL 语句。Statement 接口不接受参数。
(1)创建Statement
使用Connection对象的 createStatement()方法创建一个

Statement stmt = null;
try {
   stmt = conn.createStatement(     );
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}

创建了一个Statement对象之后,你可以用它的三个执行方法的任一方法来执行SQL语句
1>boolean execute(String SQL) : 如果 ResultSet 对象可以被检索,则返回的布尔值为 true ,否则返回 false 。当你需要使用真正的动态 SQL 时,可以使用这个方法来执行 SQL DDL 语句
2>int executeUpdate(String SQL) : 返回执行 SQL 语句影响的行的数目。使用该方法来执行 SQL 语句,是希望得到一些受影响的行的数目,例如,INSERT,UPDATE 或 DELETE 语句
3>ResultSet executeQuery(String SQL) : 返回一个 ResultSet 对象。当你希望得到一个结果集时使用该方法,就像你使用一个 SELECT 语句
!!关闭 Statement 对象

Statement stmt = null;
try {
   stmt = conn.createStatement( );
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   stmt.close();
}

6.connection对象
Connection是JDBC中的一个接口,它代表着与数据库的物理连接。它允许您与数据库建立通信,发送SQL语句,并获取查询结果
Connection对象还支持事务管理。事务是一组SQL操作,要么全部成功,要么全部失败。通过Connection对象,您可以开启、提交或回滚事务。
在使用Connection对象时,还需要注意以下几个重要的事项:
1>连接泄漏:务必确保每个获取的连接最终都被关闭,以避免连接泄漏
2>线程安全:Connection对象通常不是线程安全的,因此应该在单个线程中使用,并确保每个线程都有自己的连接
3>连接池配置:如果使用连接池,要仔细配置连接池的参数,以满足应用程序的性能需求
4>异常处理:要具备良好的异常处理机制,以处理与数据库连接和操作相关的异常情况
5>事务管理:了解事务的概念和使用方法,以确保数据库操作的一致性和完整性
7.数据库查询操作
SQL语句从数据库查询中获取数据,并将数据返回到结果集中。SELECT语句是一种标准的方法,它从一个数据库中选择行记录,并显示在一个结果集中。 java.sql.ResultSet接口表示一个数据库查询的结果集
一个 ResultSet对象控制一个光标指向当前行的结果集
查询遍历

import java.sql.*;
public class JDBC{
    public static void main(String[] args) throws ClassNotFoundException,SQLException{
        String JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        String URL = "jdbc:sqlserver://数据库地址;DatabaseName=数据库名;
        String USER = "username";
        String PASS = "password"
        Connection conn = DriverManager.getConnection(URL, USER, PASS);
        Class.forName(JDBC_DRIVER);
        Connection connection = DriverManager.getConnection(URL,USEA,PASS);
        Statement stmt = connection.createStatement();
        ResultSet rs = stmt,executeQuery("SELECT * FROM 数据库名);
        while(rs.nest()){
            Integer id = rs.getInt(1);
            String USER = rs.getString("USER");
            String PASS = rs.getString("PASS");
            System.out.println(id +"-" +USER+"-"+PASS;
        }
    }
}

(1)Statement对象
Statement对象用于向数据库发送SQL语句,数据库的增删改查通过这个对象来完成(向数据库中发送指令)
查询方法:
ResultSet executeQuery(String sql)
statement.executeUpdate():执行更新(包括增删改,返回变化的行数)
8.释放数据库资源

try{
    rs.close();
    stmt.close();
}catch (Exeception e){
    e.printStackTrace();
}finally{
    if(connection != null){
    try{
        connection.close();
    } catch(Exception ex){
    }
  }
}

五:JDBC执行语句

1.JDBC执行INSERT语句

String sql= "insert into employee(eno,ename) values(?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,10);
pstmt.setString(2,"张三");
//executeUpdate方法返回记录数
int cnt = pstmt.executeUpdate(); 
//cnt=1
System.out.println("数据新增成功");

2.JDBC执行UPDATE语句

String sqlUpdate = "Update  users set pass_word=? where user_name=?";
PreparedStatement pstmtUpdate = connection.prepareStatement(sqlUpdate);
pstmtUpdate.setString(2, "张三");
pstmtUpdate.setString(1,"888888" );
//executeUpdate方法返回记录数
int UpdateCnt = pstmtUpdate.executeUpdate();
//cnt=1
System.out.println("数据更新成功")

3.JDBC执行Delete语句

String sqlDelete = "Delete  users  where user_name=?";
PreparedStatement pstmtDelete = connection.prepareStatement(sqlDelete);
pstmtDelete.setString(1, "张三");
//executeUpdate方法返回记录数
int DeleteCnt = pstmtDelete.executeUpdate();
//cnt=1
System.out.println("数据删除成功");

4.SQL注入
SQL注入是一种非常常见的数据库攻击手段,SQL注入漏洞也是网络世界中最普遍的漏洞之一。SQL注入其实就是恶意用户通过在表单中填写包含SQL关键字的数据来使数据库执行非常规代码的过程。简单来说,就是数据做了代码才能干的事情。
防止SQL注入:
PreparedStatement对SQL进行参数化,预防SQL注入攻击
5.JDBC事务管理
事务是以一种可靠的、一致的方式,访问和操作数据库的程序单元
(1)事务提交和回滚
conn.commit( );
conn.rollback( );
(2)使用还原点
Connection对象有两个新的方法来管理还原点
setSavepoint(String savepointName): 定义了一个新的还原点。它也返回一个Savepoint对象。
releaseSavepoint(Savepoint savepointName): 删除一个还原点。请注意,它需要一个作为参数的 Savepoint 对象。这个对象通常是由 setSavepoint() 方法生成的一个还原点。
有一个 rollback (String savepointName) 方法,该方法可以回滚到指定的还原点。
(3)JDBC允许两种事务模式
自动提交事务模式
手动提交事务模式
6.Apache Commons DBUtils
commons-dbutils是 Apache提供的开源 JDBC工具类库
它是对JDBC的简单封装,学习成本极低
使用commons-dbutils可以极大简化JDBC编码工作量


茶色岛
62 声望1 粉丝

引用和评论

0 条评论