JDBC学习笔记

2020-03-09  本文已影响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接口
DriverManager类(驱动管理器):

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

方法声明 功能描述
static synchronized void registerDriver(Driver driver) 用于向DriverManager中注册给定的JDBC程序。
static Connection getConnection(String url,String user, String pwd) 用于建立和数据库的连接,并返回表示连接的Connection对象。
注:实际的开发过程中基本不使用registerDriver方法来注册驱动!
2. Connection接口
方法声明 功能描述
Statement createStatement() 方法用于返回一个向数据库发送语句的Statement对象
PreparedStatement prepareStatement(String sql) 方法用于返回一个PreparedStatement对象,该对象用于向数据库发送参数化的SQL语句
CallableStatement perpareCall(String sql) 方法用于返回一个CallableStatement对象,该对象用于调用数据库中的存储过程
3. Statement接口
方法声明 功能描述
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接口
方法声明 功能描述
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接口
方法声明 功能描述
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 stmt = conn.createStatement(); 
4. 使用Statement执行SQL语句

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

    //①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();
            }
        }
    }
}

上一篇 下一篇

猜你喜欢

热点阅读