JAVA-JDBC

本文介绍了Java JDBC的本质,即SUN公司制定的一套接口,用于实现Java与数据库的连接。详细阐述了JDBC编程的6个步骤,包括注册驱动、获取连接等,并通过IDEA的操作流程展示了如何增加记录、处理查询结果集。同时,文章还分享了在实际操作中可能遇到的问题及解决方案,如配置文件放置位置和数据库连接错误等。
摘要由CSDN通过智能技术生成

JDBC

Java DataBase Connecticity(Java语言连接数据库)

JDBC的本质

JDBC是SUN公司制定的一套接口(interface)
java.sql.*
接口都有调用者和实现者。
面向接口调用、面向接口写实现类,这都属于面向接口编程。

为什么要面向接口编程?
解耦合:降低程序的耦合性,提高程序的扩展力。

为什么SUN制定一套JDBC接口?
因为每个数据库原理不同,制定接口,让使用者不用关心各种实现原理。

JDBC编程6步

  1. 注册驱动(作用:告诉JAVA程序,即将连接哪个品牌数据库)
  2. 获取连接(表示JVM的进程和数据库进程之间的通道打开)
  3. 获取数据库操作对象(专门执行SQL的对象)
  4. 执行SQL语句(DQL DML…)
  5. 处理查询结果集(只有当第四步执行的是select语句的时候,才有这5步的查询结果集。
  6. 释放资源

IDEA操作流程

导入mysql连接jar包
在这里插入图片描述
在这里插入图片描述

增加记录
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCTest01 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try {
            // 1.注册驱动
            /* 第一种写法
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            第二种写法(常用的)
            为什么这种方式常用?因为参数是一个字符串,字符串可以写到XXX.properties文件中。
            以下方法不需要接收返回值,因为我们只想用它的类加载动作。*/
            Class.forName("com.mysql.jdbc.Driver");
            // 2.获取连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123");
            // 3.获取数据库操作对象
            stmt = conn.createStatement();
            // 4.执行SQL语句
            String sql = "INSERT INTO t_user(username,c_id) VALUES ('小白',102)";
            int count = stmt.executeUpdate(sql);
            System.out.println(count == 1 ? "增加成功" : "删除失败");
        } catch (SQLException e) {
            e.printStackTrace();
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }finally {
            // 6.释放资源
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

    }
}
通过配置文件进行数据库更新操作

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

public class JDBCTest02 {
    public static void main(String[] args) {
        // 使用资源绑定器绑定属性配置文件
        ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
        String driver = bundle.getString("driver");
        String url = bundle.getString("url");
        String user = bundle.getString("user");
        String password = bundle.getString("password");

        Connection conn = null;
        Statement stmt = null;
        try {
            // 1.注册驱动
            Class.forName(driver);
            // 2.获取连接
            conn = DriverManager.getConnection(url ,user, password);

            // 3.获取数据库操作对象
            stmt = conn.createStatement();
            // 4.执行SQL
            String sql = "delete from t_user where c_id = 101";
            int count = stmt.executeUpdate(sql);
            System.out.println(count == 1 ? "执行成功" : "执行失败");
        }catch (SQLException | ClassNotFoundException e){
            e.printStackTrace();
        }
    }
}

处理查询结果集


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

public class JDBCTest03 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost/test","root","123");

            //3.获取数据库操作对象
            stmt = conn.createStatement();
            //4.执行sql
            String sql = "SELECT * FROM t_user";
            //excuteUpdate
            rs = stmt.executeQuery(sql); //专门执行DQL语句的方法
            //5.处理查询结果
            while (rs.next()){
                String id = rs.getString("id");
                String username = rs.getString("username");
                String c_id = rs.getString("c_id");
                System.out.println(id + "," + username + "," + c_id);
            }

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if (rs != null){
                try{
                    rs.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            if (stmt != null){
                try{
                    stmt.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            if (conn != null){
                try{
                    conn.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    }
}


踩过的坑

Can’t find bundle for base name XXXX, locale zh_CN
IDEA中properties文件要放到src中,否则程序会找不到文件。
文件路径应该在c:xx\IdeaProjects\jdbc-test\src

Communications link failure
数据库连接错误,确保配置文件中账户密码和其他信息填写正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值