数据库操作

  • 数据库操作
  • 数据库基础数据库是一种 存储结构允许使用各种格式 输入、处理、检索 数据,且不用在每次需要数据时 重新输入数据。
  • select 语句: select语句 用于查询数据表中的数据select 语句 语法:
select 所选字段列表 from 数据表名
where 条件表达式 group by 字段名 having 条件表达式
order by 字段名
  1. insert 语句: insert语句 用于向数据表中插入新数据insert 语句 语法:
insert into 表名[(字段1) , (字段2)]
valuse(属性值1 , 属性值2)
  1. update 语句: update语句 用于修改数据表中的数据update 语句 语法:
update 数据表名 set 字段名 = 新的字段值 where 条件表达式
  1. 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对象 的 p repareStatement(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();
                }
            }
        }

    }

}

Original: https://www.cnblogs.com/TeaTracing/p/16178897.html
Author: TeaTracing
Title: 数据库操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/592933/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 阅读笔记三

    读《梦断代码》有一段时间了,此书从卡普尔的chandler项目深刻剖析了”软件难做”的几大原因,每章都使人回味无穷。合上书本,我作为一名计算机系的学生,感到…

    Java 2023年6月7日
    062
  • 小马哥的 Java 项目实战营学习笔记(1)

    小马哥的 Java 项目实战营 第二节:数据存储之 JDBC 数据源 接口 – javax.sql.DataSource获取方式 1、普通对象初始化1)Spring B…

    Java 2023年6月7日
    073
  • 猿猿有责,维持整洁的 Git 提交记录,三个锦囊送给你

    背景 大家都有学习如何规范简洁的 编写代码,但却很少学习如何规范简洁的 提交代码。现在大家基本上都用 Git 作为源码管理的工具,Git 提供了极大的灵活性,我们按照各种 work…

    Java 2023年6月5日
    0109
  • maven docker 插件集成的几个小坑

    昨晚看springboot视频的时候,发现可以使用docker-maven-plugin这个插件直接build出 docker 镜像到远程服务器上,感觉很方便,于是自己也试了一下,…

    Java 2023年6月16日
    074
  • Linux具体目录结构

    Linux具体目录结构 root : 该目录为系统管理员目录,root是具有超级权限的用户。 bin ->usr/bin : 存放系统预装的可执行程序,这里存放的可执行文件可…

    Java 2023年6月9日
    092
  • 十三、常用类(完结)

    十三、常用类 13.1 包装类 13.1.1 包装类的分类 介绍:针对八种基本数据类型对应的引用类型作用:可以调用包装类里面的方法分类: 13.1.2 包装类的继承关系 学一个类首…

    Java 2023年6月5日
    053
  • Redis进阶(一)

    通过简单的KV数据库理解Redis 分为访问模块,操作模块,索引模块,存储模块 底层数据结构 除了String类型,其他类型都是一个键对应一个集合,键值对的存储结构采用哈希表 哈希…

    Java 2023年6月8日
    0104
  • Oracle 相关的专业术语 说明

    2PC: (See two-phase commit) ACID:The properties of a reliable transactional system: Atomic…

    Java 2023年5月30日
    061
  • 负载均衡在web系统中的应用

    在日常的架构设计与开发中,常用的负载均衡算法主要分为静态和动态两类。静态负载算法以固定的频率分配任务不考虑服务器的状态信息,如轮询法、随机法等;动态负载均衡算法以服务器的实时负载状…

    Java 2023年6月9日
    075
  • mybatis竟然报”Invalid value for getInt()”

    背景 场景 初探 再探 结局 背景 使用 mybatis遇到一个非常奇葩的问题,错误如下: Cause: org.apache.ibatis.executor.result.Res…

    Java 2023年6月8日
    0115
  • 琐碎的想法(二)网络协议——人们给计算机的一组“约定”

    网络协议学习方式一 学习网络协议的入门多种多样,如果是从术语上来讲协议,大概是这样的。 这是一种靠强记,通过实践来加深印象,最后不自知地了解网络协议的过程。有效但趣味寥寥。 网络协…

    Java 2023年6月8日
    080
  • SpringCloud(三).Hystrix熔断器

    一.服务器雪崩效应 在SpringCloud中存在多个微服务的调用情况,当服务的提供者不可用时,多次调用失败可能会导致服务调用者的不可用,逐渐扩展到整个系统不可用,这种情况称为服务…

    Java 2023年6月7日
    067
  • MYSQL安装教程 详细版

    通过这个路径可以直接下载到mysql5.7的安装包 添加一下path路径,这样我们能从任何位置打开mysql 添加path路径 配置my.ini ,如果没有这个文件就新建一个 修改…

    Java 2023年6月9日
    094
  • 【Unity Shader学习笔记】Unity基础纹理-单张纹理

    1 单张纹理 1.1 纹理 使用纹理映射(Texture Mapping)技术,我们把一张图片逐纹素(Texel)地控制模型的颜色。 美术人员建模时,会在建模软件中利用纹理展开技术…

    Java 2023年6月8日
    070
  • spring-retry使用

    Spring Retry提供了自动重新调用失败的操作的功能。这在错误可能是暂时性的(例如瞬时网络故障)的情况下很有用。Spring Retry提供对流程和基于策略的行为的声明式控制…

    Java 2023年5月30日
    0102
  • javaweb面试题

    一:什么是B/S和C/S?B/S是Brower/Server(浏览器/服务器模式)的缩写,客户机上只要安装一个浏览器,实现与服务器交互;C/S是Client/Server(客户端/…

    Java 2023年6月5日
    070
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球