Java学习之JDBC案例练习

JDBC介绍

JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。

JDBC核心类(接口)介绍

DriverManager类

​常用方法

  • getConnection(String url , String user , String password) 指定3个入口参数,依次是连接数据库的URL、用户名、密码,来获取与数据库的连接。
  • setLoginTimeout() 获取驱动程序试图登录到某一数据库时可以等待的最长时间,以秒为单位。
  • println(String message) 将一条消息打印到当前JDBC日志流中。

Connection类

​ 这个类就代表了经过DriverManager的管理驱动类以后返回出来的数据库接口,我们可以调用返回执行类来执行SQL语句。

常用方法

  • close() 立即释放Connection实例占用的数据库和JDBC资源,即关闭数据库连接
  • createStatement() 创建并返回一个Statement实例,通常在执行无参的SQL语句时创建该实例 。
  • prepareStatement() 创建并返回一个PreparedStatement实例,通常在执行包含参数的SQL语句时创建该实例,并对SQL语句进行了预编译处理。

Statement类

​ 这个类主要是来静态语句执行语句,但他确实实时的所以这个类和我们之后讲述的一个类有着不一样。

常用方法

  • executeQuery(String sql) 执行指定的静态SELECT语句,并返回一个永远不能为null的ResultSet实例。
  • executeUpdate(String sql) | 执行指定的静态INSERT、UPDATE或DELETE语句,并返回一个int型数值,为同步更新记录的条数 。
  • close() 立即释放Statement实例占用的数据库和JDBC资源。

ParedStatement类

​ 扩展了Statement类实现了动态实时执行Sql语句,可运行时提供参数。

常用方法

  • executeQuery() 在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。
  • execute() 在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。 返回值为int类型
  • setString(int parameterIndex, String x) | 将指定参数设置为给定 Java String 值。

ResultSet类

​ 现在我们已经知道如何去执行我们的语句,语句执行会带来而结果也有一个特殊的类,来暂时在内存中存放我们从数据库获取来的结果。

  • next() 将指针向下移一行
  • getInt() 以int形式获取此ResultSet对象的当前行中指定列值。如果列值为NULL,则返回值是0。
  • getString() 以String形式获取ResultSet对象的当前行的指定列值。如列值是NULL,则返回null。

案例:

package com.java.demo;

import java.sql.*;

public class Demo1 {
    public static void createTable() throws ClassNotFoundException, SQLException {
        //1.    加载数据库驱动 (可以省略的.  在JavaEE的web项目中,jar包不可以省略.)
        //      mysql6以下驱动:com.mysql.jdbc.Driver
        //      mysql6和6以上驱动:com.mysql.cj.jdbc.Driver
//        Class.forName("com.mysql.jdbc.Driver");
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.    通过驱动管理器, 获取JDBC的连接对象
        //      连接地址格式:
        //           主协议:子协议://ip地址:端口号/数据库名称
        //           mysql:     jdbc:mysql://localhost:3306/xiangjie
        //           oracle:    jdbc:oracle:thin:@ip地址:1521/ORCL
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xiangjie", "root", "");
        //3.    通过连接对象,创建SQL执行对象 (SQL执行环境)
        Statement state = conn.createStatement();
        //4.    通过SQL执行对象 执行SQL
        state.execute("create table person(id int,nickname varchar(32))");
        //5.    释放连接
        state.close();
        conn.close();
    }

    public static void insertData() throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xiangjie?useUnicode=true&characterEncoding=utf-8", "root", "");
        Statement state = conn.createStatement();
        state.execute("insert into person values(1,'张三')");
        state.close();
        conn.close();
    }

    public static void insertPerson() throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xiangjie?useUnicode=true&characterEncoding=utf-8", "root", "");
        Statement state = conn.createStatement();
        int flag = state.executeUpdate("insert into person values(1,'张三'),(2,'李四'),(3,'王二麻子')");
        state.close();
        conn.close();
        System.out.println("返回:"+flag);
    }

    public static void deletePerson() throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xiangjie?useUnicode=true&characterEncoding=utf-8", "root", "");
        Statement state = conn.createStatement();
        int flag = state.executeUpdate("delete from person where id=1");
        state.close();
        conn.close();
        System.out.println("返回:"+flag);
    }

    public static void updatePerson() throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xiangjie?useUnicode=true&characterEncoding=utf-8", "root", "");
        Statement state = conn.createStatement();
        int flag = state.executeUpdate("update person set nickname='haha' where id=2");
        state.close();
        conn.close();
        System.out.println("返回:"+flag);
    }

    public static void selectPerson() throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xiangjie?useUnicode=true&characterEncoding=utf-8", "root", "");
        Statement state = conn.createStatement();
        ResultSet rs = state.executeQuery("select * from person");
        while(rs.next()){
            int id = rs.getInt("id");
            String nickname = rs.getString("nickname");
            System.out.println("id="+id+"\tnickname="+nickname);
        }
        rs.close();
        state.close();
        conn.close();
    }
}

Junit:

package com.java.demo;

import org.junit.Test;
import java.sql.SQLException;


public class Demo1Test {

    @Test
    public void createTable() throws SQLException, ClassNotFoundException {
        Demo1.createTable();
    }

    @Test
    public void insertData() throws Exception {
        Demo1.insertData();
    }

    @Test
    public void insertPerson() throws Exception {
        Demo1.insertPerson();
    }

    @Test
    public void deletePerson() throws Exception {
        Demo1.deletePerson();
    }

    @Test
    public void updatePerson() throws Exception {
        Demo1.updatePerson();
    }

    @Test
    public void selectPerson() throws Exception {
        Demo1.selectPerson();
    }
}
createTable() 创建名为person的table;
insertData() 插入一条person的具体数据;
insertPerson() 插入多条person的具体数据;
deletePerson() 删除id为1的person数据;
updatePerson() 更新id为2的person数据的名字;
selectPerson() 展示当前person table下的全部数据.
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值