当前位置: 首页 > article >正文

JavaApi.JDBC( 重点 )

JDBC

数据持久化(了解即可)

  • 数据持久化是指将内存中的数据保存到持久存储设备(如硬盘)上的过程。在Java应用程序中,常用的数据持久化技术包括:

    • 关系型数据库:如MySQL、Oracle、PostgreSQL等。

    • 对象关系映射(ORM)框架:如Hibernate、MyBatis等。

    • NoSQL数据库:如MongoDB、Cassandra等

    • 文件系统:如XML、JSON文件等。

  • 数据持久化的目的是确保数据在应用程序关闭后仍然存在,并且可以在需要时重新加载。

JDBC介绍---连接数据库的标准

  • JDBC(Java Database Connectivity)是Java平台的标准API,用于执行SQL语句并与数据库进行交互。

  • JDBC为Java应用程序提供了访问各种数据库系统的统一接口,使得开发人员可以编写与数据库无关的应用程

    序。

  • 在JDBC出现之前,每个数据库厂商都有自己的API和连接方式,这导致开发人员需要为不同的数据库编写不同的代码。

  • JDBC的出现解决了这一问题,通过提供一个标准的API,使得Java应用程序可以轻松地连接和操作不同类型的

    数据库。

数据库驱动

  • JDBC通过数据库驱动程序来实现与特定数据库的通信。

    每个数据库厂商通常会提供一个JDBC驱动程序,该驱动程序实现了JDBC API,使得Java应用程序可以通过JDBC接口与数据库进行交互。常见的数据库驱动程序包括:

    • DriverManager

      • DriverManager类是JDBC的核心类之一,用于管理和注册驱动程序,并建立数据库连接。

      • getConnection(String url, String user, String password) : 获取数据库连接。

    • Connection

  • 表示与数据库的连接。通过Connection对象,可以创建PreparedStatement对象,用于执行所对应的SQL语句。

    • PreparedStatement

    • 用于执行预编译的SQL语句,可以提高性能并防止SQL注入攻击。

    • ResultSet

      • 表示查询结果集,提供了遍历和检索结果的方法。常用的方法包括

        next() : 移动到下一个记录,到最后一条语句之后返回false

        getString(int columnIndex) : 获取指定列的字符串值

        getInt(int columnIndex) : 获取指定列的整数值。

基本步骤

  • 需要在编辑器中导入对应的jar包

    • 复制粘贴jar包致对应的eclips的包下

    • 右击选择Build Path---Add to Build Path

    • jar包消失,下面对应出现的奶瓶包代表已导入

    • 自己上网搜索mysql.jar包,下载

  • 编写连接类---固定---记死

//加载驱动
static {
    try {
        Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}
//获取连接
public static Connection getCon() {    //这里的Connection需要导包
    Connection con=null;
    try {
        con=DriverManager.getConnection("jdbc:mysql: / localhost:3306/数据库名?
serverTimezone=GMT","用户名","密码");  //填写自己对应的需要修改数据库名
    } catch (Exception e) {
        e.printStackTrace();
    }
    return con;
}
  • JDBC实现数据新增

public class Book {
    private int id;
    private String title;
    private double price;
        private String description;
}
public int add(Book b) {
    try {
        //获取连接对象
        con=DBHelper.getCon();
        //编写sql语句
        String sql="insert into book(title,price,description)"+ "                               values(?,?,?)";
        //获取执行对象
        ps=con.prepareStatement(sql);
        设置?对应值
        ps.setString(1, b.getPrice());
        ps.setString(2, b.getAuthor());
        ps.setString(3, b.getDescription);
        //执行sql语句获取结果
        return ps.executeUpdate();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return 0;
}
  • 删除学生案例

try {
            //获取联接
            Connection con = DBHelper.getCon();
            //编写sql语句
            String str = "delete from students where id = ?";
            //连接对象制出执行对象
            PreparedStatement pp = con.prepareStatement(str);
            //设置对应的值
            while(true){
                System.out.println("请输入学生的学号");
                int kk = sc.nextInt();
                pp.setInt(1, kk);
                //执行语句,获取结果
                int h = pp.executeUpdate();
                System.out.println(h);
                while(true) {
                    System.out.println("是否还需要继续删除学生,y/n");
                    String xx = sc.next();
                    if(xx.equals("y")) {
                        i=1;
                        break;
                        
                    }else if(xx.equals("n")) {
                        i=2;
                        break;
                    }else {
                        System.out.println("输入错误");
                        continue;
                    }
                }
                if(i == 1) {
                    continue;
                }else if(i==2) {
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

JDBC数据查询

  • 基本步骤

    • 获得连接

    • 编写需要执行的sql语句

    • 通过sql语句与连接对象制出执行对象

    • 执行语句 获得结果

      • ResultSet rs = ps.executeQuery();

    • 查询结果集

    • 遍历结果集 --- 通过列的顺序拿值

  • 增删改的前四个步骤一样,查,需要通过配合结果集使用

  • 查询单个用if,多个用while

  • 原始查询

try {
    //获得连接
    Connection con = DBHelper.getCon();
    //编写需要执行的sql语句
    String sql = "SELECT id, title, price, description FROM books";
    //通过sql语句与连接对象制出执行对象
    PreparedStatement ps = con.prepareStatement(sql);
    //执行语句 获得结果
    ResultSet rs = ps.executeQuery();
    //处理结果集
    while (rs.next()) {
        int id = rs.getInt("id");
        String title = rs.getString("title");
        double price = rs.getDouble("price");
        String description = rs.getString("description");
        //输出书籍信息
        System.out.println("ID: " + id + ", 标题: " + title + ", 价格: " + price
+ ", 描述: " + description);
    }
} catch (Exception e) {
    e.printStackTrace();
}
  • 基于对象查询

try {
    //获得连接
    Connection con = DBHelper.getCon();
    //编写需要执行的sql语句
    String sql = "SELECT id, title, price, description FROM books";
    //通过sql语句与连接对象制出执行对象
    PreparedStatement ps = con.prepareStatement(sql);
    //执行语句 获得结果
    ResultSet rs = ps.executeQuery();
    //处理结果集
    while (rs.next()) {
        int id = rs.getInt("id");
        String title = rs.getString("title");
        double price = rs.getDouble("price");
        String description = rs.getString("description");
        //创建 Book 对象并设置属性
        Book book = new Book(id, title, price, description);
        //打印 Book 对象
        System.out.println(book);
    }
} catch (Exception e) {
    e.printStackTrace();
}
  • 集合承载数据

List<Books> bookList = new ArrayList > ();
try {
    //获得连接
    Connection con = DBHelper.getCon();
    //编写需要执行的sql语句
    String sql = "SELECT id, title, price, description FROM books";
    //通过sql语句与连接对象制出执行对象
    PreparedStatement ps = con.prepareStatement(sql);
    //执行语句 获得结果
    ResultSet rs = ps.executeQuery();
    //处理结果集
    while (rs.next()) {
        int id = rs.getInt("id");
        String title = rs.getString("title");
        double price = rs.getDouble("price");
        String description = rs.getString("description");
        //创建 Books 对象并设置属性
        Books book = new Books(id, title, price, description);
        //将 Books 对象添加到列表中
        bookList.add(book);
    }
} catch (Exception e) {
    e.printStackTrace();
}
//输出集合的长度
System.out.println("总共有 " + bookList.size() + " 本书");
//允许用户输入想要查看的书的序号
Scanner scanner = new Scanner(System.in);
System.out.print("请输入您想查看的书的序号:");
int index = scanner.nextInt();
Books book = bookList.get(index);
System.out.println(book);
  • 模糊查询的实现

List<Books> bookList = new ArrayList > ();
try {
    //获得连接
    Connection con = DBHelper.getCon();
    //编写需要执行的sql语句
    String sql = "SELECT id, title, price, description FROM books WHERE title
LIKE ?";
    //通过sql语句与连接对象制出执行对象
    PreparedStatement ps = con.prepareStatement(sql);
    //设置参数
    ps.setString(1, "%" + 关键字 + "%");
    //执行语句 获得结果
    ResultSet rs = ps.executeQuery();
    //处理结果集
    while (rs.next()) {
        int id = rs.getInt("id");
        String title = rs.getString("title");
        double price = rs.getDouble("price");
        String description = rs.getString("description");
        //创建 Books 对象并设置属性
        Books book = new Books(id, title, price, description);
        //将 Books 对象添加到列表中
        bookList.add(book);
    }
} catch (SQLException e) {
    e.printStackTrace();
}
  • 价格区间查询

List<Books> bookList = new ArrayList > ();
try {
    //获得连接
    Connection con = DBHelper.getCon();
    //编写需要执行的sql语句
    String sql = "SELECT id, title, price, description FROM books WHERE price
BETWEEN ? AND ?";
    //通过sql语句与连接对象制出执行对象
    PreparedStatement ps = con.prepareStatement(sql);
    //设置参数
    ps.setDouble(1, 价格1);
    ps.setDouble(2, 价格2);
    //执行语句 获得结果
    ResultSet rs = ps.executeQuery();
    //处理结果集
    while (rs.next()) {
        int id = rs.getInt("id");
        String title = rs.getString("title");
        double price = rs.getDouble("price");
        String description = rs.getString("description");
        //创建 Books 对象并设置属性
        Books book = new Books(id, title, price, description);
        //将 Books 对象添加到列表中
        bookList.add(book);
    }
} catch (SQLException e) {
    e.printStackTrace();
}

JDBC数据修改

  • 根据id查询单个信息

Scanner sc = new Scanner(System.in);
//获取用户输入的书籍编号
System.out.print("请输入您想修改的书的编号:");
int bookId = sc.nextInt();
Books book = null;
try {
    //获得连接
    Connection con = DBHelper.getCon();
    //编写需要执行的sql语句
    String sql = "SELECT id, title, price, description FROM books WHERE id =
?";
    //通过sql语句与连接对象制出执行对象
    PreparedStatement ps = con.prepareStatement(sql);
    //设置参数
    ps.setInt(1, bookId);
    //执行语句 获得结果
    ResultSet rs = ps.executeQuery();
    //处理结果集
    if (rs.next()) {
        int id = rs.getInt("id");
        String title = rs.getString("title");
        double price = rs.getDouble("price");
        String description = rs.getString("description");
        //创建 Books 对象并设置属性
        book = new Books(id, title, price, description);
    }
} catch (Exception e) {
    e.printStackTrace();
}
if (book = null) {
    System.out.println("查无此书");
    return;
}
  • 根据id修改信息

//获取用户输入的新信息
System.out.print("请输入新的标题(当前标题:" + book.getTitle() + "):");
String nt = sc.next();
System.out.print("请输入新的价格(当前价格:" + book.getPrice() + "):");
double np = sc.nextDouble();
System.out.print("请输入新的描述(当前描述:" + book.getDescription() + "):");
String nd = sc.next();
try {
    //获得连接
    Connection con = DBHelper.getCon();
    //编写需要执行的sql语句
    String sql = "UPDATE books SET title = ?, price = ?, description = ? WHERE
id = ?";
    //通过sql语句与连接对象制出执行对象
    PreparedStatement ps = con.prepareStatement(sql);
    //设置参数
    ps.setString(1, nt);
    ps.setDouble(2, np);
    ps.setString(3, nd);
    ps.setInt(4, bookId);
    //执行更新
    int n = ps.executeUpdate();
    if (n > 0) {
        System.out.println("书籍信息已成功更新。");
    } else {
        System.out.println("书籍信息更新失败。");
    }
} catch (Exception e) {
    e.printStackTrace();
}

http://www.kler.cn/a/411703.html

相关文章:

  • 如何制作项目网页
  • 最新《软件工程》选择题及答案
  • 摄像头原始数据读取——V4L2(mmap模式,V4L2_MEMORY_MMAP)
  • STM32C011开发(3)----Flash操作
  • LLM PPT Translator
  • C语言解析命令行参数
  • 数据结构——用数组实现栈和队列
  • 鸿蒙操作系统(HarmonyOS)
  • html select下拉多选 修改yselect.js插件实现下拉多选,搜索,限制选中,默认回显等操作
  • c#基础练习71-75
  • 鸿蒙安全控件之位置控件简介
  • Git指令大全
  • 三维地形图计算软件(三)-原基于PYQT5+pyqtgraph旧代码
  • JSON数据转化为Excel及数据处理分析
  • 15.postgresql--jsonb 数组进行打平,过滤
  • 18:(标准库)DMA二:DMA+串口收发数据
  • 异或操作解决一些问题
  • 【附录】Rust国内镜像设置
  • 【腾讯云】AI驱动TDSQL-C Serveress 数据库技术实战营-如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图
  • Github 2024-11-26 Python开源项目日报Top10
  • C#里怎么样使用BinaryReader和BinaryWriter类?
  • MATLAB 中有关figure图表绘制函数设计(论文中常用)
  • 英语知识在线教学:Spring Boot网站构建
  • ✅ Qt流式布局
  • Spring |(五)IoC/DI的注解开发
  • 神经网络中的损失函数(Loss Function)