第22天 JDBC

JDBC

JDBC概述

什么事JDBC

JDBC(JavaDataBaseConnectivity)就是 Java 数据库连接,说白了就是用 Java 语言来操作数 据库。之前操作数据库是在控制台使用 SQL 语句来操作数据库的,JDBC 是用 Java 语言向数 据库发送 SQL 语句,来达到操作数据库的效果。

JDBC 原理

JDBC 由 SUN 提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准, 然后各个数据库厂商会遵循 SUN 的规范,提供一套访问自己公司的数据库服务器的 API。 SUN 提供的规范命名为 JDBC,而各个厂商提供的,遵循了 JDBC 规范的,可以访问自己数据库的 API 被称之为驱动

- JDBC 实现细节:JDBC 主要分为三部分

  1. JDBC 驱动管理器:负责注册特定的 JDBC 驱动器,主要通过 java.sql.Drivermanager实现。
  2. JDBC 驱动器 API:由 Sun 公司负责制定,其中最主要的接口是 java.sql.Driver
  3. JDBC 驱动器:是一种数据库驱动,由数据库厂商创建和维护,也称为 JDBC 驱动, 是实现了 JDBC 驱动器 API,负责与特定的数据库连接,以及处理通信细节。

JDBC 入门

  • JDBC 开发步骤

    1. 注册驱动
    2. 获取连接对象 Connection
    3. 通过 Connection 对象获取 Statement 对象
    4. 使用 Statement 执行 SQL 语句
    5. 遍历返回的结果集
    6. 关闭资源
  • 准备数据

创建数据库
CREATE DATABASE FIRSTJDBC;
USE FIRSTJDBC;
CREATE TABLE USER(
    uid INT PRIMARY KEY AUTO_INCREMENT,
    uname VARCHAR(20) UNICODE,
    uage INT ,
    udes VARCHAR(50)    
);
INSERT INTO USER VALUES(1,'张三',34,'什么玩意');
INSERT INTO USER VALUES(2,'李四',12,'真的不知道');

导入 MySQLJDBC 驱动,并注册

  1. 在项目根目录创建 lib 目录,用于存放当前项目所需的 jar 包,并将驱动 jar 复制到该目 录下
  2. 选择 jar 包,右键执行 buildpath-AddtoBuildPath(添加到编译目录

加载并注册数据库驱动

DriverManager.registerDriver(new Driver());

获取连接对象 Connection

String url = “jdbc:mysql://localhost:3306/mydb1”;
Connection conn = DriverManager.getConnection(url, “root”, “root”);

通过 Connection 对象获取 Statement 对象

Statement st = conn.createStatement();

使用 Statement 执行 SQL 语句

String sql = “SELECT * FROM user”;
ResultSet rs = st.executeQuery(sql);

遍历返回的结果集

//获取一个值 
boolean flag = rs.next();//向下移动,true 代表有下一个记录 
System.out.println(flag);
//循环获取所有的数据 
while(rs.next()){ 
    int id = rs.getInt("id"); 
    String username = rs.getString("username"); 
    String password = rs.getString("password"); 
    System.out.println("id" + id + " " + username +" " + password);
}

关闭资源

//释放资源 后打开的先关闭 
rs.close(); 
st.close(); 
conn.close();
完整代码
public void t1() throws SQLException{
        //注册驱动
        DriverManager.registerDriver(new Driver());
        //获取连接对象
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/firstjdbc","root","root");
        //通过connection对象获取Statement对象,其作用是操作SQL
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery("select * from user");//SELECT * FROM USER
        while(rs.next()){
            int i = rs.getInt("uid");
            String j = rs.getString(2);
            System.out.println(i+" "+j);
        }
        rs.close();
        st.close();
        con.close();
}

JDBC类介绍

Driver接口

该接口是所有 JDBC 程序必须实现的接口,该接口专门提供给数据库产商使用。

DriverManger 类

该类用于加载 JDBC 驱动并创建数据库的连接
- registerDriver(java.sql.Driverdriver):注册 JDBC

  • getConnection(Stringurl,Stringuser,Stringpassword):用于建立和数据库的连接,并返回 表示连接的 Connection 对象

Connection 接口

Connection 接口代表 Java 程序和数据库的连接
- getMetaData():返回表示数据库源数据的 DatabaseMetaData 对象
- createStatement():创建一个 Statement 对象来将 SQL 语句发送到数据库
- prepareStatement(Stringsql):创建 PreparedStatement 对象来将参数化的 SQL 语句发送 到数据库

Statement 接口

用于向数据库发送 SQL 语句

  • insertupdatedelete()
  • intexecuteUpdate(Stringsql):利用返回值判断非 0 来确定 sql 语句是否执行成功。
  • ResultSetexecuteQuery(Stringsql):可以通过 execute 方法来执行任何 sql 语句.
  • execute(Stringsql):用于向数据库发送任意 sq

ResultSet

java.sql.ResultSet 它是用于封装 select 语句执行后查询的结果。

  • next()方法:用于判断是否有下一条记录。如果有返回 true,并且让游标向下移动一行。如果没有返回 false.

- 可以通过 ResultSet 提供的 getXxx()方法来获取当前游标指向的这条记录中的列数据。

getInt()
getString()
getDate()
getDouble()
参数有两种
getInt(intcolumnIndex);
getInt(StringcolumnName);
如果列的类型不知道,可以通过下面的方法来操作
getObject(intcolumnIndex);
getObject(StringcolumnName);

JDBC 增删改查操作


  • 查询

查询类型
查询全部
条件查询—根据 id
查询全部
public void t1() throws SQLException{
        //注册驱动
        DriverManager.registerDriver(new Driver());
        //获取连接对象
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/firstjdbc","root","root");
        //通过connection对象获取Statement对象,其作用是操作SQL
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery("select * from user");//SELECT * FROM USER
        while(rs.next()){
            int i = rs.getInt("uid");
            String j = rs.getString(2);
            System.out.println(i+" "+j);
        }
        rs.close();
        st.close();
        con.close();
    }
根据ID查询
public void t5() throws Exception{
        String url = "jdbc:mysql://localhost:3306/firstjdbc";
        String user = "root";
        String pass = "root";
        DriverManager.registerDriver(new Driver());
        Connection con = DriverManager.getConnection(url, user, pass);
        Statement st = con.createStatement();
        st.executeQuery("select * from user where uid = 1");
        ResultSet rs = st.getResultSet();
        while(rs.next()){
            System.out.println(rs.getString("uname"));
        }
        rs.close();
        st.close();
        con.close();
    }
添加数据
public void t2() throws SQLException{
        DriverManager.registerDriver(new Driver());
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/firstjdbc", "root", "root");
        Statement st = con.createStatement();
        st.executeUpdate("insert into user values(3,'王五',18,'就这玩意')");
        ResultSet rs = st.executeQuery("select * from user");
        while(rs.next()){
            System.out.println(rs.getString("udes"));
        }   
        rs.close();
        st.close();
        con.close();
    }
修改数据
public void t3() throws Exception{
        DriverManager.registerDriver(new Driver());
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/firstjdbc","root","root");
        Statement st = con.createStatement();
        st.executeUpdate("update user set uage = 20 where uid = 1");
        st.close();
        con.close();
    }
删除数据
public void t4() throws SQLException{
        DriverManager.registerDriver(new Driver());
        String url = "jdbc:mysql://localhost:3306/firstjdbc";
        String username = "root";
        String userpass = "root";
        Connection con = DriverManager.getConnection(url,username,userpass);
        Statement st = con.createStatement();
        String sql = "delete from user where uid = 2";
        st.executeUpdate(sql);
        st.close();
        con.close();
    }

编写 JDBC 工具类

基于上面的增删改查示例,每次进行操作都需要【获取连接】【释放资源】,这两部分代码 重复了,那么可以考虑对其进行优化,将【获取连接】和【释放资源】的代码抽取到单独的

示例代码
public class JDBCutils {
    private static String classname;
    private static String url;
    private static String user;
    private static String pass;
    static {
        FileReader fr = null;
        Properties p = new Properties();
        try {
            fr = new FileReader("JDBC.properties");
            p.load(fr);
            classname = p.getProperty("classname");
            url = p.getProperty("url");
            user = p.getProperty("user");
            pass = p.getProperty("pass");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            if(fr!=null){
                try {
                    fr.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }
    }
    public static Connection getConnection(){
        Connection con = null;
        try {
            Class.forName(classname);
            con = DriverManager.getConnection(url, user, pass);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        return con;
    }

    public static void relase(Connection con,Statement st,ResultSet rs){
        try {
            con.close();
            st.close();
            rs.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
public class Demo {

    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Connection con = JDBCutils.getConnection();
        Statement st = con.createStatement();
        String sql = "select * from user";
        ResultSet rs = st.executeQuery(sql);
        while(rs.next()){
            System.out.println(rs.getString("uname"));
        }
        JDBCutils.relase(con, st, rs);
    }

}

该代码使用了Properties 配置文件
Properties 介绍

Properties 继承自 Hashtable,说明其是以键与值的方式存在的,只是 Properties 的 键与值都是必须是字符串类型的数据。 Properties 常被用于配置文件的写入与读取, 配置文件中记录着程序的各项参数信息,使用程序的用户可以自定义某些参数,以 达到软件的个性化。
配置文件 jdbc.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb1
username=root
password=root

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值