数据库操作

《零基础学Java》


  • 数据库操作

  • 数据库基础

    数据库是一种存储结构允许使用各种格式 输入、处理、检索 数据,且不用在每次需要数据时重新输入数据。

    1. select 语句:

      select语句用于查询数据表中的数据

      select 语句 语法:

      select 所选字段列表 from 数据表名
      where 条件表达式 group by 字段名 having 条件表达式
      order by 字段名
    2. insert 语句:

      insert语句用于向数据表中插入新数据

      insert 语句 语法:

      insert into 表名[(字段1) , (字段2)]
      valuse(属性值1 , 属性值2)
    3. update 语句:

      update语句用于修改数据表中的数据

      update 语句 语法:

      update 数据表名 set 字段名 = 新的字段值 where 条件表达式
    4. delete 语句:

      delete语句用于删除数据表中的数据。

      delete 语句 语法:

      delete from 数据表名 where 条件表达式
  • 连接数据库

    访问数据库的步骤:首先加载驱动程序(仅需要在第一次访问数据库时加载一次),然后每次访问数据时创建一个Connection对象,然后接着执行SQL语句,最后完成数据库操作后,依次销毁前面所创建的Connection对象、释放数据的链接

    连接数据库 实例:

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    public class Demo {
    public static void main(String[] args) {
    try {
    Class.forName("com.mysql.cj.jdbc.Driver");// 加载数据库驱动
    String url = "jdbc:mysql://127.0.0.1:3306/java_learn";// 数据库地址
    String userName = "root";// 数据库用户名
    String passord = "asd123";// 数据库密码
    Connection con = DriverManager.getConnection(url,userName,passord);// 连接数据库
    System.out.println(con);
    con.close();// 关闭数据库
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException throwables) {
    throwables.printStackTrace();
    }
    }
    }
  • 数据查询

    数据的查询主要通过 Statement接口(执行SQL语句)ResultSet接口(存储查询结果) 实现。

    Statement接口中的方法:

    方法 介绍
    next(); 指针向下一行。
    first(); 指针回到第一行。
    last(); 指针回到最后一行。

    ResultSet接口中的方法:

    返回类型:

    getInt();

    getDouble();

    getString();

    getObject();

    重载方法:

    getString(String 列名);

    getString(int 第几列);

    数据查询 实例:

    import java.sql.*;
    public class Demo1 {
    public static void main(String[] args) {
    Connection connection = null;// 声明Connection对象(连接接口)
    Statement statement = null;// 声明Statement对象(发送SQL接口)
    ResultSet resultSet = null;// 声明ResultSet对象(结果集接口)
    try {
    Class.forName("com.mysql.cj.jdbc.Driver");// 加载驱动程序
    connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java_learn", "root", "asd123");// 与数据库连接
    statement = connection.createStatement();// 创建Statement对象
    resultSet = statement.executeQuery("select * from java_learn.java_1433");// 执行SQL语句
    while (resultSet.next()) {// 判断resultSet有没有下一行
    int id = resultSet.getInt("id");// 获取列名为id的值
    String name = resultSet.getString(2);// 获取第2列的值
    String sex = resultSet.getString("sex");// 获取列名为sex的值
    String birthday = resultSet.getString(4);// 获取第4列的值
    System.out.println("编号=" + id + " 姓名=" + name + " 性别=" + sex + " 生日=" + birthday);
    }
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException throwables) {
    throwables.printStackTrace();
    } finally {// 依次关闭数据库连接资源
    if (resultSet != null) {
    try {
    resultSet.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if (statement != null) {
    try {
    statement.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if (connection != null) {
    try {
    connection.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    }
    }
  • 动态查询

    在程序中不断向数据库发送 SQL语句 ,会增加数据库中 SQL解释器负担,从而降低 SQL语句 的执行速度。为了解决这个问题,可以使用 Connection对象 的 prepareStatement(String sql)方法 对 SQL语句 进行预处理 , 将这个命令封装PreparedStatement对象 中,再通关调用 PreparedStatement对象 的对应方法执行底层的命令,就可以减轻SQL解释器的负担。

    在SQL进行预处理时,可以使用 通配符 " ? " 来代替任何值:

    PreparedStatement preparedStatement = connection.prepareStatement("select * from java_learn.java_1434 where name = ?");
    preparedStatement.setString(1,"name");

    动态查询 实例:

    import java.sql.*;
    public class Demo2 {
    public static void main(String[] args) {
    Connection connection = null;// 声明Connection对象(连接接口)
    try {
    Class.forName("com.mysql.cj.jdbc.Driver");// 加载驱动程序
    connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java_learn", "root", "asd123");// 与数据库连接
    String sql = "select * from java_learn.java_1434 where name like ? and id = ?";// SQL语句
    PreparedStatement preparedStatement = connection.prepareStatement(sql);// 执行SQL语句
    preparedStatement.setString(1,"小%");
    preparedStatement.setInt(2,1);// 将数据库中id为1的值返回给第二个通配符
    ResultSet resultSet = preparedStatement.executeQuery();
    System.out.println("id\tname");
    while (resultSet.next()){
    System.out.println(resultSet.getInt(2)+"\t"+resultSet.getString(1));
    }
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException throwables) {
    throwables.printStackTrace();
    } finally {// 依次关闭数据库连接资源
    if (connection != null) {
    try {
    connection.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    }
    }
  • 添加、修改、删除记录

    Java中可以通过 PreparedStatement对象 动态地对数据表中原有数据进行修改操作,并通过 executeUpdate()方法 进行更新语句的操作。

    添加、修改、删除记录 实例:

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    public class Demo3 {
    public static void main(String[] args) {
    Connection connection = null;
    Statement statement = null;
    try {
    Class.forName("com.mysql.cj.jdbc.Driver");
    connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java_learn","root","asd123");
    statement = connection.createStatement();
    // region 插入数据
    String sql1 = "insert into java_learn.java_1435(id,name) values('12','大明')";// 插入id,name (id:12、name:大明)
    int result1 = statement.executeUpdate(sql1);// 执行修改权限的SQL
    System.out.println("有多少行记录被修改:"+result1);
    // endregion
    // region 修改数据
    String sql2 = "update java_learn.java_1435 set name = '中明' where id = 12";// 修改 id为12 的 name为中明
    int result2 = statement.executeUpdate(sql2);
    System.out.println("有多少行记录被修改:"+result2);
    // endregion
    // region 删除数据
    String sql3 = "delete from java_learn.java_1435 where id = 12";// 删除id为12的值(整一行)
    int result3 = statement.executeUpdate(sql3);
    System.out.println("有多少行记录被修改:"+result3);
    // endregion
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException throwables) {
    throwables.printStackTrace();
    }finally {
    if(statement!=null){
    try {
    statement.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    }
    }
posted on   TeaTracing  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示