使用jdbc操作数据库
发布日期:2021-05-10 03:44:24 浏览次数:31 分类:精选文章

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

JDBC技术详解

JDBC概述

JDBC(Java DataBase Connectivity),即Java数据库连接技术,旨在实现Java程序对各种数据库的访问。它通过一组Java语言编写的接口和类,位于java.sqljavax.sql包中,采用面向接口编程的方式。

JDBC连接数据库

JDBC的优势

  • 统一编程接口:无需为不同数据库编写专门代码,只需加载相应驱动即可。
  • 灵活性:支持多种数据库如MySQL、Oracle、SQLServer等。

连接数据库步骤

  • 导入驱动:使用Class.forName("com.mysql.jdbc.Driver")加载驱动。
  • 获取数据库连接:通过DriverManager.getConnection(url, 用户名, 密码)获取连接。
  • 执行SQL操作:创建StatementPreparedStatement对象,执行SQL语句。
  • 处理结果:若为查询操作,返回ResultSet结果集。
  • 资源释放:确保关闭ResultSetStatementConnection以释放资源。
  • Statement与PreparedStatement

    • Statement:通过createStatement()创建,用于发送简单SQL语句。
    • PreparedStatement:通过prepareStatement()创建,用于带有输入参数的SQL语句。
    • 优势
      • 预编译:提升执行效率。
      • 安全性:防止SQL注入。
      • 性能优化:减少资源消耗。

    避免SQL注入的示例

    public class Test {
    public static void getStudentByName(String name) throws Exception {
    Class.forName("com.mysql.jdbc.Driver");
    String url = "jdbc:mysql://192.168.232.234:3306/test";
    Connection conn = DriverManager.getConnection(url, "root", "ok");
    String sql = "select * from student where stu_name=?";
    PreparedStatement stat = conn.prepareStatement(sql);
    stat.setString(1, name);
    ResultSet rs = stat.executeQuery();
    while (rs.next()) {
    System.out.println(rs.getString("stu_name"));
    }
    rs.close();
    stat.close();
    conn.close();
    }
    public static void main(String[] args) throws Exception {
    getStudentByName("李白");
    }
    }

    JDBC资源管理

    public class TestPrepare {
    private static Connection conn;
    private static PreparedStatement pst;
    private static ResultSet rs;
    private static final String URL = "jdbc:mysql://192.168.232.234:3306/test";
    public static void getConn() {
    try {
    Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection(URL, "root", "ok");
    } catch (ClassNotFoundException | SQLException e) {
    e.printStackTrace();
    }
    }
    public static void query(String sql, String... params) {
    try {
    pst = conn.prepareStatement(sql);
    for (int i = 0; i < params.length; i++) {
    pst.setObject(i + 1, params[i]);
    }
    rs = pst.executeQuery();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    public static boolean update(String sql, String... params) {
    try {
    pst = conn.prepareStatement(sql);
    for (int i = 0; i < params.length; i++) {
    pst.setObject(i + 1, params[i]);
    }
    return pst.executeUpdate() > 0;
    } catch (Exception e) {
    e.printStackTrace();
    }
    return false;
    }
    public void close() {
    try {
    if (rs != null) rs.close();
    if (pst != null) pst.close();
    if (conn != null) conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }

    使用示例

    getConn();
    String s = "update subject set subjectNo=?, GradeId=? where subjectName=? ";
    update(s, "9", "2", "高等数学-2");
    String s1 = "select * from subject where GradeId=?";
    query(s1, "2");
    while (rs.next()) {
    System.out.println(rs.getString("subjectName"));
    }
    close();
    上一篇:DAO模式、单例模式
    下一篇:事务、索引、数据恢复和备份

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年04月18日 03时15分53秒