数据库操作

《零基础学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 2022-04-22 14:53  TeaTracing  阅读(102)  评论(0编辑  收藏  举报