JDBC的简单使用

JDBC

全称:java 数据库连接 - java database connectivity standard。

JDBC是java语言用于访问数据库的应用编程接口API,通过它可访问各类关系数据库。

知识要点:

  • JDBC简介
  • JDBC类和接口
  • JDBC调用存储过程
  • LOB的读写
  • JDBC事务

JDBC简介

两层组成:

  • 上面一层JDBC API,负责与JDBC驱动程序管理器API进行通信。
  • 下面一层驱动程序管理器API,它与实际链接到数据库、由供应商提供的数据库驱动程序进行通信,并且返回查询的信息,或者执行由查询规定的操作。

使用JDBC可以方便的将SQL语句传递给几乎任何一种数据库。使用JDBC写的程序可以传给相应的数据库管理系统DBMS。

JDBC 类和接口

java.sql包中提供的常用类和接口。

java.sql包中提供了JDBC中核心的常用类、接口和异常。


用户使用JDBC的主要操作:与数据库建立连接、执行SQL语句、处理结果等,主要涉及DriverManager类、Connection接口、Statement接口、PreparedStatement接口和ResultSet接口。

DriverManager类

DriverManager类是JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。

DriverManager.getConnection建立与数据库的链接。

要使用JDBC来存取特定的数据库,必须有相应的JDBC driver,是链接JDBC API 与具体数据库之间的桥梁。

java程序首先使用API来与JDBC DriverManager交互,由manager载入指定的JDBC driver,此后就可以通过JDBC API来存取数据库。

本地协议纯java驱动程序

JDBC转化为数据库直接使用的网络协议,不需要安装客户端软件,使用java sockets来连接数据库。

Connection接口

Connection对象代表特定数据库的链接(会话)。通过DriverManager类的静态方法,getConnection()方法可以获取Connection接口的实现类对象。

  • static Connection getConnection (String url)

  • static Connection getConnection(String url, Properties info)

  • static Connection getConnection(String url, String user, String password);

Statement接口

Statement对象用于将SQL语句发送到数据库中,执行对数据库的数据的检索或者更新。

两个子接口:CallableStatement和PreparedStatement。

  • Statement createStatement():创建一个Statement对象来将sql语句发送到数据库
  • Statement createStatement(int resultSetType, int resultSetConcurrency): 创建一个Statement对象,该对象生成具有给定类型和并发性的ResultSet对象。
  • Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability):创建一个Statement对象,该对象生成具有给定类型和并发性和可保存性的ResultSet对象。

PreparedStatement接口

Statement主要执行静态的SQL语句。如果有些操作只是用来SQL语句中某些参数不同,其余SQL子句相同,则可用PreparedStatement来提高执行效率。可以使用Connection的PreparedStatement()方法建立好一个预先编译的SQL语句:其中参数变动的地方先用?作为占位符,等到真正指定参数执行时,在使用相应的setXXX(int parameterIndex, 值)方法,指定?处真正应该有的参数值。

ResultSet接口

包含了SQL语句中条件的所有行,并且通过一套get()方法提供了对这些行中数据的访问,这些get()方法可以访问当前行中的不同列。ResultSet.next()方法用于移动到ResultSet中的下一行,使下一行成为当前行。

JDBC规范中提供了数据库类型与JAVA类型关系对应表。

JDBC操作sql

步骤:

  1. 创导与SQL相关的包

    import java.sql.*;

  2. 加载JDBC驱动程序

    根据不同的数据库加载对应厂商提供的驱动程序。把厂商提供的驱动程序JAR包添加到classpath,在代码中显式加载数据库驱动程序类。加载完数据库驱动程序类后,驱动程序会自动通过DriverManager.registerDriver()方法注册,这样就可以与厂商的驱动程序通信了。

    常见驱动程序全名:

    • MySQL:com.mysql.jdbc.Driver
    • SQL Server: com.microsoft.sqlserver.jdbc.SQLServerDriver
    • Oracle: oracle.jdbc.driver.OracleDriver.
  3. 提供链接URL

    链接URL定义了链接数据库时的协议、子协议、数据源识别。

    形式为:“协议:子协议:数据源识别”

    协议在JDBC中总是以jdbc开始;子协议是桥接的驱动程序或是数据库管理系统名称,mysql对应的就是“mysql”;”数据源识别“标出找出数据库来源的地址与链接端口

    mysql的链接URL:jdbc:mysql://主机名称:链接端口/数据库名称?参数=参数值&参数=参数值。

    jdbc:mysql://localhost:3306/db1?user=root&password=123&useUnicode=true&characterEncoding=GBK;

  4. 建立一个数据库的链接

    需要向DriverManager要求并获得Connection镀锡,一个Connection对象代表一个数据库连接。

    使用DriverManager的getConnection()方法传入指定的连接URL、用户名和密码来过得。

    String url = "jdbc:mysql://localhost:3306/db1";
    Connection conn = DriverManager.getConnection(url, "root", "root"); 
    
  5. 创建一个Statement对象

    Statement对象是SQL叙述的具体代表对象。

    Statement stmt = conn.createStatement();

  6. 执行SQL语句

    获得Statement对象后可以使用方法去执行SQL。

    • int excecuteUpdate(String sql):执行改变数据库内容的SQL,如insert、update、delete,返回操作影响到的记录数。

    • java.sql.RusultSet executeQuery(String sql):执行查询数据库的SQL,如SELECT语句,返回查询到的结果集ResultSet对象。

      int rows = stmt.executeUpdate("insert into db1;");
      Result rs = stmt.executeQuery("select * from db1;");
      
  7. 处理结果

    ResultSet是数据库结果集的数据表。Result对象具有指向当前行的光标。最初在第一行。

    可以使用ResultSet的next()方法来移动光标到下一行,它会返回true和false表示是否有下一行记录。

    两种方式获得当前行获取指定列的值:

    • getXXX(int columnIndex) :使用列索引获取值,列从1开始编号。
    • getXXX(String columnLabel):使用列的名称获取值。
  8. 关闭JDBC对象

    操作完成需要把所使用的JDBC对象全部显示关闭释放JDBC资源 。

    • 调用ResultSet的close()方法
    • 调用Statement的close()方法
    • 调用Connection的close()方法

JDBC基本示例

package JDBC;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.Statement;

public class MyJdbcTest {
    public static void main(String[] args) throws Exception {
        // 1.导入驱动jar包
        // 2.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 3.获取数据库连接对象
        Connection cnnt = DriverManager.getConnection("jdbc:mysql://localhost:3306/newtest?characterEncoding=utf-8&serverTimezone=UTC", "root", "password");
        // 4.定义sql语句
        String sql = "update student set id = 22,age = 18,name = 'deng' where id = 1";
        // 5. 创建执行sql语句的对象Statement
        Statement stmt = cnnt.createStatement();
        // 6.执行SQL
        int count = stmt.executeUpdate(sql);
        // 7.处理结果
        System.out.println(count);
        //8.释放资源
        stmt.close();
        cnnt.close();

    }

}

posted @ 2020-05-12 18:20  DengSchoo  阅读(248)  评论(0编辑  收藏  举报