JDBC(一)
发布日期:2021-04-30 21:04:23 浏览次数:96 分类:精选文章

本文共 10126 字,大约阅读时间需要 33 分钟。

JDBC是什么?

JDBC(Java Database Connectivity),即Java数据库连接,是Java编程中用于规范客户端程序如何访问数据库的标准。它主要面向关系型数据库,提供了执行数据库查询和更新的方法。

JDBC的本质

JDBC实际上是一套接口,属于Java.sql.*包中的接口。作为面向接口编程的典范,JDBC通过定义接口和提供实现类,使得程序可以与数据库交互,而无需直接关注具体的数据库实现。这使得程序具有更高的扩展性和灵活性。

为什么要面向接口编程?

面向接口编程的主要原因是为了实现解耦合。通过定义标准接口,程序可以与多个数据库驱动兼容,而不需要修改代码。这种设计使得程序更易于扩展和维护。

JDBC开发前的准备工作

在开发JDBC程序之前,需要完成以下准备工作:

  • 下载并配置对应数据库的驱动jar包。例如,MySQL驱动需要下载mysql-connector-java-5.x.x-bin.jar,并将其添加到类路径。
  • 使用集成开发工具(如IntelliJ IDEA或Eclipse)进行代码编写和调试。
  • JDBC访问数据库需要用到的类、接口和方法

    JDBC涉及多个核心类和接口,主要包括以下几个:

    1. DriverManager类

    • 负责加载和管理数据库驱动程序。
    • 主要方法:getConnection(url, username, password),用于获取数据库连接。

    2. Connection接口

    • 代表数据库连接,用于执行SQL语句和处理事务。
    • 主要方法:
      • Statement createStatement():创建用于执行静态SQL语句的Statement对象。
      • PreparedStatement prepareStatement(String sql):创建用于执行带有动态参数的SQL语句的PreparedStatement对象。

    3. Statement接口

    • 用于执行静态SQL语句(如插入、更新、删除操作)。
    • 主要方法:
      • int executeUpdate(String sql):执行插入、更新、删除操作。
      • ResultSet executeQuery(String sql):执行查询操作,并返回结果集。

    4. PreparedStatement接口

    • 用于执行带有动态参数的SQL语句。
    • 主要方法:
      • int executeUpdate():执行带有占位符的SQL语句。
      • ResultSet executeQuery():执行带有占位符的查询语句。

    5. ResultSet接口

    • 用于处理数据库查询结果。
    • 主要方法:
      • boolean next():将指针移动到下一行。
      • getXXX(int columnIndex):根据列索引获取对应字段的值。
      • getXXX(String columnName):根据字段名称获取对应字段的值。

    JDBC访问数据库的流程

    以下是JDBC访问数据库的典型流程:

  • 创建数据库表

    使用SQL语句创建用户表:

    CREATE TABLE t_user (    u_id INT PRIMARY KEY AUTO_INCREMENT,    u_name VARCHAR(20),    u_age INT,    useraddress VARCHAR(30));
  • 创建Java项目并导入数据库启动包

    在IntelliJ IDEA中,新建Java项目,添加MySQL驱动jar包,并配置项目的类路径。

  • 编写保存用户信息的Java类

    定义一个UserBean类,用于封装用户信息:

    package com.example.jdbcdemo.bean;public class UserBean {    private int uid;    private String uname;    private int uage;    private String uaddress;    public int getUid() { return uid; }    public void setUid(int uid) { this.uid = uid; }    public String getUname() { return uname; }    public void setUname(String uname) { this.uname = uname; }    public int getUage() { return uage; }    public void setUage(int uage) { this.uage = uage; }    public String getUaddress() { return uaddress; }    public void setUaddress(String uaddress) { this.uaddress = uaddress; }}
  • 编写数据库驱动管理类

    定义DBConnection类,用于加载数据库驱动并获取数据库连接:

    package com.example.jdbcdemo.db;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DBConnection {    private static final String DRIVER_NAME = "com.mysql.jdbc.Driver";    private static final String URL = "jdbc:mysql://localhost:3306/test";    private static final String USERNAME = "root";    private static final String PASSWORD = "123456";    static {        try {            Class.forName(DRIVER_NAME);        } catch (ClassNotFoundException e) {            System.out.println("未找到数据库驱动!");            e.printStackTrace();        }    }    public static Connection getMyConnection() {        Connection connection = null;        try {            connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);        } catch (SQLException e) {            System.out.println("获取数据库连接失败!");            e.printStackTrace();        }        return connection;    }}
  • 编写访问数据库的DAO类

    UserDaoObject类用于实现用户数据的 CRUD(增删改查)操作:

    package com.example.jdbcdemo.dao;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.example.jdbcdemo.bean.UserBean;import com.example.jdbcdemo.db.DBConnection;public class UserDaoObject {    public Connection connLink() {        return DBConnection.getMyConnection();    }    public Statement statementGet(Connection connection) throws SQLException {        return connection.createStatement();    }    public void closeCAndS(Statement statement, Connection connection) {        try {            if (statement != null) {                statement.close();            }            if (connection != null) {                connection.close();            }        } catch (SQLException e) {            e.printStackTrace();        }    }    public void insertUser(UserBean userBean) {        Connection conn = null;        Statement statement = null;        try {            conn = connLink();            statement = statementGet(conn);            String insertSql = String.format(                "INSERT INTO t_user VALUES (NULL, '%s', %d, '%s')",                userBean.getUname(),                userBean.getUage(),                userBean.getUaddress()            );            int result = statement.executeUpdate(insertSql);            if (result > 0) {                System.out.println("添加信息成功!");            }        } catch (Exception e) {            System.out.println("添加信息失败!");            e.printStackTrace();        } finally {            closeCAndS(statement, conn);        }    }    public void updateUserById(UserBean userBean) {        Connection conn = null;        Statement statement = null;        try {            conn = connLink();            statement = statementGet(conn);            String updateSql = String.format(                "UPDATE t_user SET u_name='%s', u_age=%d, useraddress='%s' WHERE u_id=%d",                userBean.getUname(),                userBean.getUage(),                userBean.getUaddress(),                userBean.getUid()            );            int result = statement.executeUpdate(updateSql);            if (result > 0) {                System.out.println("修改信息成功!");            }        } catch (Exception e) {            System.out.println("修改信息失败!");            e.printStackTrace();        } finally {            closeCAndS(statement, conn);        }    }    public UserBean selectUserMsgById(int userId) {        UserBean userBean = null;        Connection conn = null;        Statement statement = null;        ResultSet resultSet = null;        try {            conn = connLink();            statement = statementGet(conn);            String selectSql = String.format(                "SELECT u_id, u_name, u_age, useraddress FROM t_user WHERE u_id=%d",                userId            );            resultSet = statement.executeQuery(selectSql);            if (resultSet.next()) {                userBean = new UserBean();                userBean.setUid(resultSet.getInt("u_id"));                userBean.setUname(resultSet.getString("u_name"));                userBean.setUage(resultSet.getInt("u_age"));                userBean.setUaddress(resultSet.getString("useraddress"));            }        } catch (Exception e) {            System.out.println("查询失败!");            e.printStackTrace();        } finally {            if (resultSet != null) {                try {                    resultSet.close();                } catch (SQLException e) {                    e.printStackTrace();                }            }            closeCAndS(statement, conn);        }        return userBean;    }    public List
    selectUserAll() { List
    userList = new ArrayList<>(); Connection conn = null; Statement statement = null; ResultSet resultSet = null; try { conn = connLink(); statement = statementGet(conn); String selectSql = "SELECT * FROM t_user;"; resultSet = statement.executeQuery(selectSql); while (resultSet.next()) { UserBean userBean = new UserBean(); userBean.setUid(resultSet.getInt("u_id")); userBean.setUname(resultSet.getString("u_name")); userBean.setUage(resultSet.getInt("u_age")); userBean.setUaddress(resultSet.getString("useraddress")); userList.add(userBean); } } catch (Exception e) { System.out.println("查询失败!"); e.printStackTrace(); } finally { if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } closeCAndS(statement, conn); } return userList; } public void deleteUserById(int userId) { Connection conn = null; Statement statement = null; try { conn = connLink(); statement = statementGet(conn); String deleteSql = String.format( "DELETE FROM t_user WHERE u_id=%d", userId ); int result = statement.executeUpdate(deleteSql); if (result > 0) { System.out.println("删除信息成功!"); } } catch (Exception e) { System.out.println("删除失败!"); e.printStackTrace(); } finally { closeCAndS(statement, conn); } }}
  • 编写测试类

    TestMain类用于验证各个功能的实现是否正确:

    package com.example.jdbcdemo.test;import java.util.List;import com.example.jdbcdemo.bean.UserBean;import com.example.jdbcdemo.dao.UserDaoObject;public class TestMain {    public static void main(String[] args) {        // 测试添加数据        UserBean userBean = new UserBean();        userBean.setUname("张三");        userBean.setUage(25);        userBean.setUaddress("山西");        UserDaoObject userDaoObject = new UserDaoObject();        userDaoObject.insertUser(userBean);        // 测试修改数据        UserBean updateBean = new UserBean();        updateBean.setUid(2);        updateBean.setUname("李四");        updateBean.setUage(30);        updateBean.setUaddress("北京");        userDaoObject.updateUserById(updateBean);        // 测试查询用户信息        UserBean queryBean = userDaoObject.selectUserMsgById(1);        if (queryBean != null) {            System.out.println(queryBean.getUname() + "\t" + queryBean.getUage() + "\t" + queryBean.getUaddress());        } else {            System.out.println("查询失败!");        }        // 测试查询所有用户信息        List
    allUserList = userDaoObject.selectUserAll(); if (allUserList.size() > 0) { for (UserBean userBean : allUserList) { System.out.println(userBean.getUname() + "\t" + userBean.getUage() + "\t" + userBean.getUaddress()); } } else { System.out.println("没有查到数据!"); } // 测试删除用户信息 userDaoObject.deleteUserById(2); }}
  • 总结

    通过以上步骤,可以实现一个完整的JDBC数据库访问流程。开发过程中需要注意资源的释放和异常的处理,以确保程序的健壮性。

    上一篇:SSM简单的使用
    下一篇:由于换了eclipse开发工具,从而装了高本版jdk导致的问题

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2026年05月29日 06时22分13秒