博客
关于我
JDBC最简单的数据库连接方式,不会给你一jio!!!
阅读量:692 次
发布时间:2019-03-17

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

JDBC 技术核心内容及实践案例

JDBC(Java Database Connectivity),即 Java 数据库连接,是 Java 程序连接访问数据库的基础技术。本文将结合 JDBC 技术实现简短案例,阐述核心内容及实践经验,助力开发者快速实现数据库操作。

JDBC 过程概述

1. JDBC 核心组件

JDBC 通常通过以下步骤完成数据库操作:

  • 注册驱动:加载数据库驱动程序,确保与数据库服务器通信。
  • 获取连接:使用 DriverManager.getConnection() 获取数据库连接。
  • 操作数据库:通过 StatementPreparedStatement 与数据库交互。
  • 处理结果:将数据库返回结果反馈到程序。
  • 2. 示例:访问数据库

    第一步:准备数据

  • 创建数据库 jt_db 并建表 account
  • create table account (    id INT primary key auto_increment,    name VARCHAR(50),    money DOUBLE);insert into account values (null, 'tom', 1000),                       (null, 'andy', 1000),                       (null, 'tony', 1000);

    第二步:实现数据库查询

  • 导入必需包java.sql.*
  • 注册驱动Class.forName("com.mysql.jdbc.Driver")
  • 获取连接Connection conn = DriverManager.getConnection("jdbc:mysql:///jt_db?characterEncoding=utf-8", "root", "root")
  • public class Test_JDBC1 {    public static void main(String[] args) throws Exception {        Class.forName("com.mysql.jdbc.Driver");        Connection conn = DriverManager.getConnection(            "jdbc:mysql:///jt_db?characterEncoding=utf-8",             "root",             "root"        );        Statement stat = conn.createStatement();        String sql = "select * from account";        ResultSet rs = stat.executeQuery(sql);        while (rs.next()) {            int id = rs.getInt("id");            String name = rs.getString("name");            double money = rs.getDouble("money");            System.out.println(id + ", " + name + ", " + money);        }        rs.close();        stat.close();        conn.close();    }}

    第三步:查看执行结果

    运行程序可以看到从数据库中读取到的记录。

    3.Insets | JDBC 执行增删改查操作

    JDBC 可以实现数据库的增删改查四种基本操作。

    3.1 增加记录

    public class TestJDBC03 {    //... 导入必要包...    @Test    public void testAdd() throws Exception {        Connection conn = JdbcUtil.getConn();        Statement stat = conn.createStatement();        String sql = "insert into account value(null, 'john', 3500)";        int rows = stat.executeUpdate(sql);        System.out.println("影响行数" + rows);        stat.close();        conn.close();    }}

    3.2 修改数据

    public class TestJDBC03 {    //... 导入必要包...    @Test    public void testUpdate() throws Exception {        Connection conn = JdbcUtil.getConn();        Statement stat = conn.createStatement();        String sql = "update account set money = 1500 where name = 'john'";        int rows = stat.executeUpdate(sql);        System.out.println("打印行数" + rows);        stat.close();        conn.close();    }}

    3.3 删除记录

    public class TestJDBC03 {    //... 导入必要包...    @Test    public void testDelete() throws Exception {        Connection conn = JdbcUtil.getConn();        Statement stat = conn.createStatement();        String sql = "delete from account where name = 'john'";        int rows = stat.executeUpdate(sql);        System.out.println("影响行数" + rows);        stat.close();        conn.close();    }}

    3.4 查询特定记录

    public class TestJDBC03 {    //... 导入必要包...    @Test    public void testFindById() throws Exception {        Connection conn = JdbcUtil.getConn();        Statement stat = conn.createStatement();        String sql = "select * from account where id = 1";        ResultSet rs = stat.executeQuery(sql);        if (rs.next()) {            int id = rs.getInt("id");            String name = rs.getString("name");            double money = rs.getDouble("money");            System.out.println(id + ": " + name + ": " + money);        }        rs.close();        stat.close();        conn.close();    }}

    4.PreparedStatement 高级用法

    4.1 防止 SQL 注入攻击

    使用 PreparedStatement 替代 Statement,通过设置预编译 SQL 语句,防止 SQL 注入攻击。

    public class LoginUser2 {    //... 导入必要包...    private static void login(String user, String pwd) throws Exception {        Connection conn = JdbcUtil.getConn();        PreparedStatement ps = conn.prepareStatement(            "select * from user where username = ? and password = ?"        );        ps.setString(1, user);        ps.setString(2, pwd);        ResultSet rs = ps.executeQuery();        if (rs.next()) {            System.out.println("恭喜您登录成功!!!");        } else {            System.out.println("登录失败!!用户名或密码不正确");        }        rs.close();        ps.close();        conn.close();    }}

    4.2 利用连接池优化性能

    连接池(如 C3P0)能显著提升数据库连接管理效率,推荐在生产环境中使用。

    5.数据库编码设置

    5.1 工作空间编码设置

    1.切换到新的工作空间,设置编码为 UTF-8,确保руч cue 工作。2.配置项目编码为 UTF-8,避免字符集问题。

    5.2 JSP 文件编码设置

    在 JSP 文件中,确保 <%@ page language="java"contentType="text/html;charset=UTF-8"%><meta charset="utf-8"> 存在。

    6.案例:学生信息管理系统

    数据库结构准备

    create database jt_db;use jt_db;create table stu (    id int,    name varchar(50),    gender char(2),    addr varchar(50),    score double);insert into stu values(1001, '张三', '男', '北京', 86);

    功能实现

  • 查询所有学生
  • public class StudentManager {    //... 审慎检查 Nhĩ steffer...    private static void findAll() throws Exception {        Connection conn = JdbcUtil.getConn();        PreparedStatement ps = conn.prepareStatement("select * from stu");        ResultSet rs = ps.executeQuery();        while (rs.next()) {            int id = rs.getInt("id");            String name = rs.getString("name");            String gender = rs.getString("gender");            String addr = rs.getString("addr");            double score = rs.getDouble("score");            System.out.println(id + ", " + name + ", " + gender + ", " + addr + ", " + score);        }        rs.close();        ps.close();        conn.close();    }}
    1. 添加学生
    2. public class StudentManager {    //... 导入必要包...    private static void addStu() throws Exception {        System.out.println("请输入新学生信息(编号、姓名、性别、地址、成绩):");        int id = sc.nextInt();        sc.nextLine();        String name = sc.nextLine();        String gender = sc.nextLine().toUpperCase();        String addr = sc.nextLine();        double score = sc.nextDouble();        Connection conn = JdbcUtil.getConn();        PreparedStatement ps = conn.prepareStatement(            "insert into stu values(?,?,?,?,?)"        );        ps.setInt(1, id);        ps.setString(2, name);        ps.setString(3, gender);        ps.setString(4, addr);        ps.setDouble(5, score);        int rows = ps.executeUpdate();        if (rows > 0) {            System.out.println("添加成功!");        } else {            System.out.println("失败。请检查输入是否正确。");        }        ps.close();        conn.close();    }}

      3. 其他操作(修改、删除)以此类推

      结语

      通过以上实例,可以逐步掌握 JDBC 技术的使用方法,并在开发过程中灵活运用,提升数据库操作的效率和安全性。内容结合自适应改进,为普通开发者提供有价值的参考和实践经验。

    转载地址:http://fvwhz.baihongyu.com/

    你可能感兴趣的文章
    Node读取并输出txt文件内容
    查看>>
    node防xss攻击插件
    查看>>
    noi 1996 登山
    查看>>
    noi 7827 质数的和与积
    查看>>
    NOI-1.3-11-计算浮点数相除的余数
    查看>>
    noi.ac #36 模拟
    查看>>
    NOI2010 海拔(平面图最大流)
    查看>>
    NOIp2005 过河
    查看>>
    NOIP2011T1 数字反转
    查看>>
    NOIP2014 提高组 Day2——寻找道路
    查看>>
    noip借教室 题解
    查看>>
    NOIP模拟测试19
    查看>>
    NOIp模拟赛二十九
    查看>>
    Vue3+element plus+sortablejs实现table列表拖拽
    查看>>
    Nokia5233手机和我装的几个symbian V5手机软件
    查看>>
    non linear processor
    查看>>
    Non-final field ‘code‘ in enum StateEnum‘
    查看>>
    none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
    查看>>
    None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
    查看>>
    NoNodeAvailableException None of the configured nodes are available异常
    查看>>