美文网首页
JDBC学习笔记

JDBC学习笔记

作者: 青丶空 | 来源:发表于2020-03-09 11:41 被阅读0次

一、什么是JDBC?

1. 什么是JDBC?

    JDBC(Java DataBase Connectivity)就是Java数据库连接,简要而言便是通过Java语言来实现连接数据库的功能。JDBC主要是通过Java语言向数据库来发送SQL语句。

2. JDBC核心类(接口)

JDBC中的核心类主要有:Driver接口、DriverManager类、Connection接口、Statement接口、  
PreparedStatement接口、ResultSet接口  

JDBC中的主要类有:DriverManager、Connection、Statement,和ResultSet!
1. Driver接口
  •     Driver接口是所有JDBC驱动程序必须实现的接口!
    
DriverManager类(驱动管理器):

DriverManager主要用于加载JDBC驱动并且创建与数据库的连接。

  • DriverManger(驱动管理器)的作用有两个:
    1. 注册驱动:这可以让JDBC知道要使用的是哪个驱动;
    2. 获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。
  • DriverManager类中定义了两个重要的静态方法:
方法声明 功能描述
static synchronized void registerDriver(Driver driver) 用于向DriverManager中注册给定的JDBC程序。
static Connection getConnection(String url,String user, String pwd) 用于建立和数据库的连接,并返回表示连接的Connection对象。
注:实际的开发过程中基本不使用registerDriver方法来注册驱动!
2. Connection接口
  •     Connection接口代表Java程序和数据库的连接对象,通过获取该连接的对象后才能访问数据库,并操作数据库!
    
  • Connection接口中方法:
方法声明 功能描述
Statement createStatement() 方法用于返回一个向数据库发送语句的Statement对象
PreparedStatement prepareStatement(String sql) 方法用于返回一个PreparedStatement对象,该对象用于向数据库发送参数化的SQL语句
CallableStatement perpareCall(String sql) 方法用于返回一个CallableStatement对象,该对象用于调用数据库中的存储过程
3. Statement接口
  •     Statement是Java执行JDBC操作中的一个重要接口,用于执行静态的SQL语句,并返回一个结果对象。
      Statement接口通过Connection的createStatement()方法获得
    
  • Connection接口中方法:
方法声明 功能描述
boolean execute(String sql) 用于执行各种SQL语句返回一个布尔类型的值,true为查询有结果,可通过Statement的getResultSet()方法获取结果
int(void) executeUpdate(String sql) 用于执行SQL中的插入(insert)、更新(update)和删除(delete)语句,int则返回一个表示数据库中受该语句影响的记录条数,void不返回值
ResultSet executeQuery(String sql) 用于执行SQL中的查询(select)语句,返回一个表示查询结果的ResultSet对象
4. PerparedStatement接口
  •     Statement接口封装了JDBC执行SQL语句的方法,PerparedStatement接口是Statement的子接口,
      用于执行预编译的SQL语句。
    
  •     在操作SQL语句时可以使用“?”来代替参数,通过下列的方法来实现SQL语句的参数赋值
    
方法声明 功能描述
int executeUpdate() 在PreparedStatement对象中执行SQL语句,语句必须是DML(增删改表记录)或是DDL(增删改表结构)语句
ResultSet executeQuery() 在PreparedStatement对象中执行SQL查询,返回的对象为ResultSet对象
void setInt(int parameterIndex,int x) 将指定参数值设置为指定的int值
void setFloat(int parameterIndex,float x) 将指定参数值设置为指定的float值
void setString(int parameterIndex,String x) 将指定参数值设置为指定的String值
void setDate(int parameterindex,Date x) 将指定参数值设置为指定的Date值
void addBatch() 将一组参数添加到此PreparedStatement对象的批处理命令中
void setCharacterStream(int parameterIndex,java.io.Reader reader,int length) 将指定的输入流写入数据库的文本字段
void setBinaryStream(int parameterIndex,java.io.InputStream x,int length) 将二进制输入流数据写入到二进制字段中

具体的操作为:

    //假设users表中的字段id、name、email分别为int、varchar、varchar
    String q1 = "INSERT INTO users(id,name,email) VALUES(?,?,?)";
    PreparedStatement preStmt = conn.preparedStatement(sql);
    preStmt.setInt(1,1);
    preStmt.setString(2,"zhangsan");
    preStmt.setString(3,"zs@qq.com");
    preStmt.executeUpdate();
5. ResultSet接口
  •     ResultSet接口用于保存JDBC执行查询时返回的结果集,该结果集封装在一个逻辑表格中,调用方法next()可切换向下切换到下一行
    
  • ResultSet接口中方法
方法声明 功能描述
String getString(int columnIndex) 返回指定字段的String类型的值,参数columnIndex代表字段的索引
String getString(String columnName) 返回指定字段的String类型的值,参数columnName表示字段的名称
int getInt(int columnIndex) 返回指定字段的int型的值,columnIndex同上
int getInt(String columnName) 返回指定字段的int型的值,columnName同上
Date getDate(int columnIndex) 返回指定字段的Date型的值,columnIndex同上
Date getDate(String columnName) 返回指定字段的Date型的值,columnName同上
boolean next() 将游标从当前位置向下移动一行
boolean absolute(int row) 将游标对象移动到ResultSet对象的指定行
void afterLast() 将游标对象移动到ResultSet的末尾,即最后一行之后
void beforeFirst() 将游标对象移动到ResultSet的开头,即第一行之前
boolean previous() 将游标对象移动到ResultSet的上一行
boolean last() 将游标对象移动到ResultSet的最后一行

3. JDBC的四大配置参数:

(1)  driveClassName:com.mysql.jdbc.Drive OR oracle.jdbc.driver.OracleDriver
(2)  url:jdbc:mysql://localhost:3306/数据库名称;
(3)  username:root
(4)  password:123

4. JDBC的编程步骤:

1. 加载数据库驱动
    Class.forName("DriverName"); 

其中:
==注册MySQL数据库驱动为==:
Class.forName("com.mysql.jdbc.Driver");
==注册SQLServer数据库驱动为==:
Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver");
==注册Oracle数据库驱动为==:
Class.forName("oracle.jdbc.driver.OracleDriver");

2. 通过DriverManager获取数据库连接

DriverManager中提供了getConnection()方法来获取数据库的连接,返回一个Connection对象

    Connection conn = DriverManager.getConnection(String url,String user,String pwd);
//    url:jdbc:mysql://hostname:port/datebasename
//    url: jdbc:sqlserver://localhost:1433;DatabaseName=student
    // jdbc:mysql:  --->  为固定写法
    // hostname  --->  主机名称,本机上为localhost或127.0.0.1,其他则为对应的IP地址
    // port  --->  对应的端口号
    // datebasename  --->  对应的数据库名称
//本机上url写法: jdbc:mysql://localhost:3306/数据库名称
注:  
    还可以在url中提供参数:
    jdbc:mysql://localhost:3306/mydb1?useUnicode=true&characterEncoding=UTF8  
    useUnicode参数指定这个连接数据库的过程中,使用的字节集是Unicode字节集;  
    characherEncoding参数指定穿上连接数据库的过程中,使用的字节集编码为UTF-8编码。 
    请注意,mysql中指定UTF-8编码是给出的是UTF8,而不是UTF-8。
3. 通过Connection对象获得Statement对象

得到Connection对象后,连接数据库的操作已经完成,通过创建Statement的对象来对数据库进行具体的操作,Statement是用来向SQL发送要执行的SQL语句的!

  • 创建Statement对象的三种方式:
    1. createStatement() :创建基本的Statement对象
    2. prepareStatement(String sql) :根据传入的SQL语句创建PrepareStatement对象
    3. prepareCall(String sql) :根据传入的SQL语句创建CallableStatement对象
      常用的为:
   Statement stmt = conn.createStatement(); 
4. 使用Statement执行SQL语句

得到Statement对象后便可以操作数据库中的数据了!

  • 使用Statement执行SQL语句的三种方式:
    1. execute(String sql) :用于执行任何的SQL语句
    2. executeQuery(String sql) :用于执行查询语句,返回ResultSet结果集对象
    3. executeUpdate(String sql) :用于执行DDL(数据定义语言)和DML(数据操作语言),执行DDL时语句返回值为0,执行DML时返回受SQL语句印象的行数。
      操作例:
    //①DML
    String sql = "INSERT INTO user VALUES('zhangsan','123')";
    int m = stmt.executeUpdate(sql);
    
    //②DQL
    String sql = "SELECT * FROM user";
    ResultSet rs = stmt.executeQuery(sql);  //返回ResultSet结果集
5. 执行ResultSet结果集

通过SQL执行后的DQL结果返回的结果集,通过ResultSet对象方法来进行访问。

    ResultSet rs = stmt.executeQuery(sql);
6. 关闭连接,释放资源

资源的关闭顺序与打开顺序相反,关闭的顺序为:ResultSet、Statement(或PrepareStatement)、Connection。
即:

    rs.close();
    stmt.close();
    conn.close();

5.JDBC实战

1.导入JDBC的jar包
1. Idea
    File -> Project Structure (OR Ctrl + Shift + Alt + S) -> modules ->  
Dependencies -> 右边选择+号 -> JARS导入 -> 选择JDBC的jar包 -> 导入并勾选!
2. eclipse OR myeclipse
    直接复制Jar包导入到项目的文件中即可!
2.JDBC编程步骤

①加载数据库驱动 Class.forName("com.mysql.jdbc.Driver");
②通过GetManager获得数据库连接 url = "jdbc:mysql://localhost:3306/数据库名";
③通过Connection对象获得Statement的对象
④使用Statement执行SQL语句
⑤执行ResultSet结果集
⑥关闭连接,释放资源

3.JDBC编程
①方法一:
package cn.study.www;

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

public class TestJDBC {

    public static void main(String[] args) throws Exception
    {
        //1.加载数据库驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.通过GetManager获得数据库连接
        String url = "jdbc:mysql://localhost:3306/exam";
        String user = "root";
        String pass = "123";
        Connection conn = DriverManager.getConnection(url,user,pass);
        //3.通过Connection来获得Statement的对象
        Statement st = conn.createStatement();
        //4.执行数据库的查询操作
        String select = "SELECT * FROM emp";
        ResultSet rs = st.executeQuery(select); //执行数据库的查询操作
        //5.执行ResultSet结果集
        while(rs.next()){
            String empno = rs.getString(1);
            String ename = rs.getString(2);
            System.out.println(empno + ", " + ename);
        }
        //关闭流
        rs.close();
        st.close();
        conn.close();

    }
}

② 方法二(规范化):
package cn.study.www;

import java.sql.*;

public class TestJDBC {

    public static void main(String[] args)
    {
        //声明变量
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //1.加载数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.得到数据库连接
            String url = "jdbc:mysql://localhost:3306/exam";
            String user = "root";
            String pass = "123";
            conn = DriverManager.getConnection(url,user,pass);
            //3.得到Statement对象对数据库进行操作
            stmt = conn.createStatement();
            //4.对数据库进行查找操作,返回结果集ResultSet
            String ss = "SELECT * FROM emp";
            rs = stmt.executeQuery(ss);
            //5.操作返回的结果集
            while(rs.next()) {
                String empno = rs.getString(1);
                String ename = rs.getString(2);
                System.out.println(empno + ", " + ename);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if(rs != null)
                    rs.close();
                if (stmt != null)
                    stmt.close();
                if(conn != null)
                    conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

相关文章

  • Mysql&Jdbc学习笔记

    Mysql学习笔记(九) Mysql与JDBC Jdbc: Java database connectivity ...

  • Mybatis学习笔记汇总(包括源码和jar包)

    博客整理 Mybatis学习笔记(一)——对原生jdbc中问题的总结 Mybatis学习笔记(二)——Mybati...

  • JDBC笔记

    title: JDBC笔记date: 2017-02-24 22:20:15tags: JDBC JDBC笔记 J...

  • JavaWeb学习笔记之Jdbc(二)

    title: JavaWeb学习笔记之Jdbc(二)tags: JavaWeb Jdbccategories: J...

  • JavaWeb学习笔记之Jdbc(一)

    title: JavaWeb学习笔记之Jdbc(一)tags: JavaWeb Jdbccategories: J...

  • JDBC 学习笔记

    这篇文章是我对李刚老师的《疯狂Java讲义》第三版第十三章:MySQL 数据库与JDBC编程的学习总结。适合有一定...

  • JDBC学习笔记

    JDBC概述 在Java中,数据库存取技术可分为如下几类:JDBC直接访问数据库、JDO技术、第三方O/R工具,如...

  • JDBC学习笔记

    一、什么是JDBC? 1. 什么是JDBC? JDBC(Java DataBase Connectivity)就...

  • JAVA学习笔记(JDBC)

    1.java.sql包是JDBC的核心类和接口 2.javax.sql数据库连接池、数据源、JNDI和RowSet...

  • JDBC学习笔记(一)

    JDBC:Java Database Connectivity,即java数据库连接,用java语言操作数据库。 ...

网友评论

      本文标题:JDBC学习笔记

      本文链接:https://www.haomeiwen.com/subject/lbbudhtx.html