• 猿创征文|JDBC操作数据库


    目录

    如何操作数据库?

    实际开发中如何操作数据库?

    JDBC(Java Database Connectivity)

    综合案例:增加、删除、修改

    ResultSet(结果集)

    综合案例:查询

    JDBC常见异常

    总结


    如何操作数据库?

    1.使用DOS命令窗口,输入“mysql -ulocalhost -u数据库用户名 -p数据库密码”命令连接数据库,编写SQL语句,回车运行,查看操作结果。

    2.使用MySQL数据库自带的命令窗口,输入数据库密码连接数据库,编写SQL语句,回车运行,查看操作结果

    3.使用数据库连接软件(SQLyog)连接数据库,通过图形化界面或者在查询编辑器中编写SQL语句,运行SQL语句查看操作结果。

    实际开发中如何操作数据库?

    在实际开发中,当用户的数据发生变化时,不会也不可能通过客户端连接数据库去操作SQL语句,因为在实际开发中,数据的操作量很大,如果使用客户端操作数据库,无法保证SQL语句的正确性和执行效率。因此使用JDBC来操作数据库。

    JDBC(Java Database Connectivity)

    JDBC的概念

            JDBC(Java DataBase Connectivity)Java连接数据库的规范(标准),可以使用Java语言连接数据库,从而对数据进行增删改查(CURD)操作。

    JDBC核心思想

    Java中定义了访问数据库的接口,可以为多种关系型数据库提供统一的访问方式。由数据库厂商提供驱动实现类(Driver数据库驱动)。不同的厂商提供不同的驱动包。

    MySQL数据库驱动

    mysql-connector-java-5.1.x 适用于5.x版本

    mysql-connector-java-8.1.x 适用于8.x版本

    JDBC API

    JDBC是由多个接口和类进行功能实现的。

    类型权限定名功能
    classjava.sql.DriverManager管理多个数据库驱动类,提供了获取数据库连接的方法
    interfacejava.sql.Connection代表一个数据库连接(当connection不为null时,表示已连接数据库)
    interfacejava.sql.Statement发送SQL语句到数据库工具
    interfacejava.sql.PreparedStatement发送SQL语句到数据库工具
    interfacejava.sql.ResultSet保存SQL查询语句的结果数据(结果集)
    classjava.sql.SQLException处理数据库应用程序时所发生的异常

    JDBC环境搭建

    1. 在项目下创建lib文件夹,用于存放jar文件。
    2. 将mysql驱动mysql-connector-java-5.1.x复制到项目的lib文件夹中。
    3. 将选中lib文件中的jar文件配置到项目中。

    选中项目(JDBC)鼠标右击  --> "New" --> “Folder” --> 创建”lib“文件夹 

     将mysql驱动mysql-connector-java-5.1.x复制到项目的lib文件夹中。

     选中lib文件中的jar文件鼠标右击 --> "Build Path" --> "Configure Build Path"

    选择 “ Libraries ” --> " Add Libaray... "

     选择 “ User Library ” --> “ Next ”

     选择 “ User Library ”

    选择 “ New ” 

     设置JRE名称 --> 再点击" OK "

     

    选择“ Add JARs... ”

     选择 “ mysql-connector-java-5.1.0-bin.jre ” --> 点击“ OK ”

     点击“ OK ”

    点击“ Finish ”

     点击 “ OK ”

     配置成功

     JDBC的开发步骤

    1.注册驱动

            使用Class.forName("包含完整路径的驱动类");//手动加载字节码文件到JVM中。

    1、注册驱动
    Class.forName("com.mysql.jdbc.Driver");

    2.获取连接对象

            通过DriverManager.getConnection(url,user,password)获取数据库连接对象

            url:mysql数据库的路径

            user:mysql数据库用户名

            password:mysql数据库密码

    2、获取连接对象
    String url = "jdbc:mysql://127.0.0.1:3306/java221804";
    String dbuser = "root";
    String password = "123456";
    Connection connection = DriverManager.getConnection(url, dbuser, password);

    3.获取发送SQL语句的对象

            通过Connection对象获取Statement对象,用于发送SQL语句,实现对数据库进行访问。

    //3、获取发送SQL语句的对象
    Statement statement = connection.createStatement();

    4.执行SQL语句

            编写SQL语句并执行SQL语句,接收SQL语句的执行结果。

    编写SQL语句,SQL语句最好是先在SQLyog里面写一遍并运行一下,保证SQL语句没有语法错误
    String sql = "DELETE FROM stu WHERE sid='S_1010';";
    4、执行SQL语句,并接收结果/DML语句:对于插入数据、修改数据、删除数据操作,都调用executeUpdate()方法,返回受影响的行数(int类型)
    DQL语句:对于查询数据,调用executeQuery()方法,返回一个结果集(ResultSet类型)
    int num =statement.executeUpdate(sql);

    5.处理结果

            处理第三步返回的数据。对返回的受影响行数结果进行逻辑判断;对返回的结果集进行迭代、依次获取数据。

    5、处理结果
    if(num==1){
        System.out.println("数据删除成功");
    }else{
        System.out.println("数据删除失败");
    }

    6.释放资源

            释放(关闭)所使用到的所有资源对象,遵循”先开的后关,后开的先关“原则。

    6、释放资源:先开后关,后开先关
    statement.close();
    connection.close(); 

    综合案例:增加、删除、修改

    1.JDBC环境搭建

    2.创建数据表

     

     3.使用JDBC操作数据库

            向student数据表中插入一条数据,从创建“InsertJDBC.java”文件

            1)注册驱动,完整路径的驱动类:"com.mysql.jdbc.Driver"

    1. public class InsertJDBC {
    2. public static void main(String[] args) {
    3. //向student数据表中插入一条数据
    4. try {
    5. //1.注册驱动
    6. Class.forName("com.mysql.jdbc.Driver");
    7. } catch (ClassNotFoundException e) {
    8. e.printStackTrace();
    9. }
    10. }
    11. }

            2)获取连接对象

    1. public class InsertJDBC {
    2. public static void main(String[] args) {
    3. //向student数据表中插入一条数据
    4. try {
    5. //1.注册驱动
    6. Class.forName("com.mysql.jdbc.Driver");
    7. //2.获取链接对象
    8. String url = "jdbc:mysql://localhost:3306/javajdbc";
    9. String user = "root";
    10. String password = "root";
    11. Connection connection = DriverManager.getConnection(url, user, password);
    12. } catch (ClassNotFoundException e) {
    13. e.printStackTrace();
    14. } catch (SQLException e) {
    15. e.printStackTrace();
    16. }
    17. }
    18. }

            3)获取发送SQL语句的对象

    1. public class InsertJDBC {
    2. public static void main(String[] args) {
    3. //向student数据表中插入一条数据
    4. try {
    5. //1.注册驱动
    6. Class.forName("com.mysql.jdbc.Driver");
    7. //2.获取链接对象
    8. String url = "jdbc:mysql://localhost:3306/javajdbc";
    9. String user = "root";
    10. String password = "root";
    11. Connection connection = DriverManager.getConnection(url, user, password);
    12. //3.获取发送SQL语句的对象
    13. Statement statement = connection.createStatement();
    14. } catch (ClassNotFoundException e) {
    15. e.printStackTrace();
    16. } catch (SQLException e) {
    17. e.printStackTrace();
    18. }
    19. }
    20. }

            4)执行SQL语句

    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.SQLException;
    4. import java.sql.Statement;
    5. public class InsertJDBC {
    6. public static void main(String[] args) {
    7. //向student数据表中插入一条数据
    8. try {
    9. //1.注册驱动
    10. Class.forName("com.mysql.jdbc.Driver");
    11. //2.获取链接对象
    12. String url = "jdbc:mysql://localhost:3306/javajdbc";
    13. String user = "root";
    14. String password = "root";
    15. Connection connection = DriverManager.getConnection(url, user, password);
    16. //3.获取发送SQL语句的对象
    17. Statement statement = connection.createStatement();
    18. //4.执行SQL语句
    19. String sql = "insert into student values ('S_1101','张三',18,'男');";
    20. int num =statement.executeUpdate(sql);
    21. } catch (ClassNotFoundException e) {
    22. e.printStackTrace();
    23. } catch (SQLException e) {
    24. e.printStackTrace();
    25. }
    26. }
    27. }

            5)处理结果

    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.SQLException;
    4. import java.sql.Statement;
    5. public class InsertJDBC {
    6. public static void main(String[] args) {
    7. //向student数据表中插入一条数据
    8. try {
    9. //1.注册驱动
    10. Class.forName("com.mysql.jdbc.Driver");
    11. //2.获取链接对象
    12. String url = "jdbc:mysql://localhost:3306/javajdbc";
    13. String user = "root";
    14. String password = "root";
    15. Connection connection = DriverManager.getConnection(url, user, password);
    16. //3.获取发送SQL语句的对象
    17. Statement statement = connection.createStatement();
    18. //4.执行SQL语句
    19. String sql = "insert into student values ('S_1101','张三',18,'男');";
    20. int num =statement.executeUpdate(sql);
    21. //处理结果
    22. if(num == 1){
    23. System.out.println("数据添加成功!");
    24. }else{
    25. System.out.println("数据添加失败!");
    26. }
    27. } catch (ClassNotFoundException e) {
    28. e.printStackTrace();
    29. } catch (SQLException e) {
    30. e.printStackTrace();
    31. }
    32. }
    33. }

            6)释放资源

    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.SQLException;
    4. import java.sql.Statement;
    5. public class InsertJDBC {
    6. public static void main(String[] args) {
    7. //向student数据表中插入一条数据
    8. try {
    9. //1.注册驱动
    10. Class.forName("com.mysql.jdbc.Driver");
    11. //2.获取链接对象
    12. String url = "jdbc:mysql://localhost:3306/javajdbc";
    13. String user = "root";
    14. String password = "root";
    15. Connection connection = DriverManager.getConnection(url, user, password);
    16. //3.获取发送SQL语句的对象
    17. Statement statement = connection.createStatement();
    18. //4.执行SQL语句
    19. String sql = "insert into student values ('S_1101','张三',18,'男');";
    20. int num =statement.executeUpdate(sql);
    21. //处理结果
    22. if(num == 1){
    23. System.out.println("数据添加成功!");
    24. }else{
    25. System.out.println("数据添加失败!");
    26. }
    27. // 6、释放资源:先开后关,后开先关
    28. statement.close();
    29. connection.close();
    30. } catch (ClassNotFoundException e) {
    31. e.printStackTrace();
    32. } catch (SQLException e) {
    33. e.printStackTrace();
    34. }
    35. }
    36. }

    运行结果

    修改和删除数据与上述代码添加数据基本相同;下面展示修改和删除代码

    修改:

    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.SQLException;
    4. import java.sql.Statement;
    5. public class upDateJDBC {
    6. public static void main(String[] args) {
    7. //修改student数据表中的一条数据
    8. try {
    9. //1.注册驱动
    10. Class.forName("com.mysql.jdbc.Driver");
    11. //2.获取链接对象
    12. String url = "jdbc:mysql://localhost:3306/javajdbc";
    13. String user = "root";
    14. String password = "root";
    15. Connection connection = DriverManager.getConnection(url, user, password);
    16. //3.获取发送SQL语句的对象
    17. Statement statement = connection.createStatement();
    18. //4.执行SQL语句
    19. String sql = "update student set name='lisi' ,age=20 where id='S_1101';";
    20. int num =statement.executeUpdate(sql);
    21. //处理结果
    22. if(num == 1){
    23. System.out.println("数据修改成功!");
    24. }else{
    25. System.out.println("数据修改失败!");
    26. }
    27. // 6、释放资源:先开后关,后开先关
    28. statement.close();
    29. connection.close();
    30. } catch (ClassNotFoundException e) {
    31. e.printStackTrace();
    32. } catch (SQLException e) {
    33. e.printStackTrace();
    34. }
    35. }
    36. }

     删除:

    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.SQLException;
    4. import java.sql.Statement;
    5. public class deleteJDBC {
    6. public static void main(String[] args) {
    7. //修改student数据表中的一条数据
    8. try {
    9. //1.注册驱动
    10. Class.forName("com.mysql.jdbc.Driver");
    11. //2.获取链接对象
    12. String url = "jdbc:mysql://localhost:3306/javajdbc";
    13. String user = "root";
    14. String password = "root";
    15. Connection connection = DriverManager.getConnection(url, user, password);
    16. //3.获取发送SQL语句的对象
    17. Statement statement = connection.createStatement();
    18. //4.执行SQL语句
    19. String sql = "delete from student where id='S_1101';";
    20. int num =statement.executeUpdate(sql);
    21. //处理结果
    22. if(num == 1){
    23. System.out.println("数据删除成功!");
    24. }else{
    25. System.out.println("数据删除失败!");
    26. }
    27. // 6、释放资源:先开后关,后开先关
    28. statement.close();
    29. connection.close();
    30. } catch (ClassNotFoundException e) {
    31. e.printStackTrace();
    32. } catch (SQLException e) {
    33. e.printStackTrace();
    34. }
    35. }
    36. }

    ResultSet(结果集)

            JDBC中执行DQL查询语句后,使用ResultSet存放查询到的结果集数据。

     1.接受结果集

            ResultSet resultSet = statement.executeQuery(String sql);

    编写SQL语句
    String sql = "SELECT * FROM stu;";
    执行SQL语句
    ResultSet  resultSet=statement.executeQuery(sql);

    2.遍历ResultSet结果集中的数据

    ResultSet以表(table)结构进行临时结果的存储,需要通过JDBC API将其中的数据依次获取。

    数据行指针:初始位置在第一行数据前,每调用一次boolean next()方法ResultSet的指针向下移动一行,结果为true,表示当前行有数据。

    • resultSet.getXxx(int columnIndex):根据列的编号顺序获取表中字段的数据,编号从1开始,Xxx表示字段类型。

    • resultSet.getXxx(String columnLabel):根据列的名称获取表中字段的数据。

    5、对返回的结果进行处理,需要将集合中的数据一个一个的遍历出来
    next()判断集合中是否存在数据,如果存在数据返回true,如果不存在元素返回false
    while(resultSet.next()){
        //取出元素
        String sid =resultSet.getString(1);
        String sname =resultSet.getString(2);
        int age =resultSet.getInt(3);
        String gender = resultSet.getString(4);
        System.out.println(sid+"-"+sname+"-"+age+"-"+gender);
    }

    3.常用遍历方法

    • int getInt(int columnIndex) throws SQLException //获得当前行第N列的int值
    • int getInt(String columnLabel) throws SQLException //获得当前行名为cloumnLabel列的int值

    • int getDouble(int columnIndex) throws SQLException //获得当前行第N列的double值
    • int getDouble(String columnLabel) throws SQLException //获得当前行名为cloumnLabel列的double值

    • int getString(int columnIndex) throws SQLException //获得当前行第N列的String值
    • int getString(String columnLabel) throws SQLException //获得当前行名为cloumnLabel列的String值

    综合案例:查询

    查询student表中的数据

     1.根据列的编号获取数据

    1. //5.对返回的结果进行处理,需要将集合中的数据一个一个的遍历出来
    2. // next()判断集合中是否存在数据,如果存在数据返回true,如果不存在元素返回false
    3. while(resultSet.next()){
    4. String id = resultSet.getString(1);
    5. String name = resultSet.getString(2);
    6. int age = resultSet.getInt(3);
    7. String sex = resultSet.getString(4);
    8. System.out.println(id+"-"+name+"-"+age+"-"+sex);
    9. }

     完整代码如下:

    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.ResultSet;
    4. import java.sql.SQLException;
    5. import java.sql.Statement;
    6. public class selectJDBC {
    7. public static void main(String[] args) {
    8. //修改student数据表中的一条数据
    9. try {
    10. //1.注册驱动
    11. Class.forName("com.mysql.jdbc.Driver");
    12. //2.获取链接对象
    13. String url = "jdbc:mysql://localhost:3306/javajdbc";
    14. String user = "root";
    15. String password = "root";
    16. Connection connection = DriverManager.getConnection(url, user, password);
    17. //3.获取发送SQL语句的对象
    18. Statement statement = connection.createStatement();
    19. //4.执行SQL语句
    20. String sql = "select * from student;";
    21. ResultSet resultSet =statement.executeQuery(sql);
    22. //5.对返回的结果进行处理,需要将集合中的数据一个一个的遍历出来
    23. // next()判断集合中是否存在数据,如果存在数据返回true,如果不存在元素返回false
    24. while(resultSet.next()){
    25. String id = resultSet.getString(1);
    26. String name = resultSet.getString(2);
    27. int age = resultSet.getInt(3);
    28. String sex = resultSet.getString(4);
    29. System.out.println(id+"-"+name+"-"+age+"-"+sex);
    30. }
    31. // 6、释放资源:先开后关,后开先关
    32. statement.close();
    33. connection.close();
    34. } catch (ClassNotFoundException e) {
    35. e.printStackTrace();
    36. } catch (SQLException e) {
    37. e.printStackTrace();
    38. }
    39. }
    40. }

     2.根据列的名称获取数据

    1. //5.对返回的结果进行处理,需要将集合中的数据一个一个的遍历出来
    2. // next()判断集合中是否存在数据,如果存在数据返回true,如果不存在元素返回false
    3. while(resultSet.next()){
    4. String id = resultSet.getString("id");
    5. String name = resultSet.getString("name");
    6. int age = resultSet.getInt("age");
    7. String sex = resultSet.getString("sex");
    8. System.out.println(id+"-"+name+"-"+age+"-"+sex);
    9. }

     完整代码如下:

    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.ResultSet;
    4. import java.sql.SQLException;
    5. import java.sql.Statement;
    6. public class selectJDBC {
    7. public static void main(String[] args) {
    8. //修改student数据表中的一条数据
    9. try {
    10. //1.注册驱动
    11. Class.forName("com.mysql.jdbc.Driver");
    12. //2.获取链接对象
    13. String url = "jdbc:mysql://localhost:3306/javajdbc";
    14. String user = "root";
    15. String password = "root";
    16. Connection connection = DriverManager.getConnection(url, user, password);
    17. //3.获取发送SQL语句的对象
    18. Statement statement = connection.createStatement();
    19. //4.执行SQL语句
    20. String sql = "select * from student;";
    21. ResultSet resultSet =statement.executeQuery(sql);
    22. //5.对返回的结果进行处理,需要将集合中的数据一个一个的遍历出来
    23. // next()判断集合中是否存在数据,如果存在数据返回true,如果不存在元素返回false
    24. while(resultSet.next()){
    25. String id = resultSet.getString("id");
    26. String name = resultSet.getString("name");
    27. int age = resultSet.getInt("age");
    28. String sex = resultSet.getString("sex");
    29. System.out.println(id+"-"+name+"-"+age+"-"+sex);
    30. }
    31. // 6、释放资源:先开后关,后开先关
    32. statement.close();
    33. connection.close();
    34. } catch (ClassNotFoundException e) {
    35. e.printStackTrace();
    36. } catch (SQLException e) {
    37. e.printStackTrace();
    38. }
    39. }
    40. }

    JDBC常见异常

    • java.lang.ClassNotFoundException:找不到类(类名书写错误、没有导入jar包)

    • java.sql.SQLException:与SQL语句相关的异常(约束错误、表名列名字段名书写错误),建议:在客户端工具中测试SQL语句正确后再复制到代码中

    • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Unknown column原因:列值String类型没有加单引号

    • Duplicate entry '1' for key 'PRIMARY'原因,主键值已经存在或混乱,更改主键值或清空表

    • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Unknown column 'password' in原因:可能输入的值类型不对,确定是否插入的元素是对应的值的类型正确

    ​​​​​​​

    总结

            以上就是本文所讲的全部内容,主要讲述如何通过java代码实现对数据库的操作,以及对数据库中的数据进行增加、修改、删除以及查询操作。操作数据库的6个步骤:1.注册驱动、2.获取连接对象、3.获取发送SQL语句的对象、4.编写及执行SQL语句、5.处理返回的结果、6.关闭资源

  • 相关阅读:
    SimaPro生命周期评估建模与碳足迹分析流程
    Python 多线程 DNS 搜索性能优化
    光会面向对象基础做不了项目,还得掌握这些进阶知识
    # Toyota Programming Contest 2024#7(AtCoder Beginner Contest 362)
    在 Flutter 应用程序中生成 QR-Code
    Flutter 2.8 正式发布
    C语言数据结构串【BF\KMP算法】
    当分布 非正态分布时,能否使用Pearson Correlation?
    P4124 [CQOI2016] 手机号码(数位dp
    Reactive UI -- 反应式编程UI框架入门学习(二)
  • 原文地址:https://blog.csdn.net/m0_57051895/article/details/127663150