如何解决JDBC连接数据库出现问题且对进行数据库操作

概要

  • 什么是JDBC?JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。可以为多种关系型数据库提供统一访问,它是由一组用Java语言编写的类和接口组成的。

  • 使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。

 前言

初学者在初次使用JDBC连接数据库时可能会出现这个问题

No suitable driver found for jdbc:mysql://8.1**.**.190:3306/user

这个错误通常是由于缺少MySQL驱动程序引起的,在Java应用程序中连接MVSQL数据库时,需要使用MYSQL提供的JDBC驱动程序(mysql-connector-j-8.4.0.jar) 

官网下载地址:MySQL :: Download MySQL Connector/J (Archived Versions)icon-default.png?t=N7T8https://downloads.mysql.com/archives/c-j/

 选择最新版本即可

下载完之后进行解压会有这个文件,点击进去就能看见对应的jar包

 

 

 然后回到我们idea点击file - project Structure - SDKS,把我们刚下载好的jar包复制到lib包中就行

完成以上步骤就解决了这个问题,接下来正式进入练习  


整体流程

通过JDBC连接并操作数据库相对比较简单,大概流程为:

新建项目 - 建立连接 - 执行sql语句 - 关闭连接 

本文采用的数据库如下

新建项目

选择maven 和jdk8 然后点击create进行创建

 建立连接

连接数据库主要是通过connection完成的,该方法分别接受jdbc连接的Url,数据库用户名和密码

//mydatabase:你的数据库名 username:用户名 password:密码
Connection connection = DriverManager.getConnection(mydatabase,username,password);

执行sql语句

如果是查询操作,获取Connection对象后可以根据Connection获取到Statement或PreparedStatement对象来执行我们创建的sql语句

 // 定义sql语句
 String sql = "SELECT * FROM user WHERE age > 18";

 // 创建PreparedStatement对象
 PreparedStatement preparedStatement = connection.prepareStatement(sql);

 // 执行查询操作
 ResultSet resultSet = preparedStatement.executeQuery(sql);

通过executeQuery执行sql会得到返回值对象,只要从这对象获取到我们想要值就行,如果返回值中有多个结果集,就使用resultSet.next()来获取。

该方法会将指针移动到当前位置的下一行。ResultSet 指针的初始位置位于第一行之前;第一次调用next()方法将会把第一行设置为当前行;第二次调用next()方法指针移动到第二行,以此类推

然后根据我们要获取的字段在数据库中的类型来选择使用哪个方法,比如name是String类型就用getString,age是int类型就用getInt方法来获取 

while (resultSet.next()){
      String name = resultSet.getString("name");
      int age = resultSet.getInt("age");
      System.out.printf("获取到数据: name = " + name + " age = " + age );
}

然后关闭连接

preparedStatement.close();
resultSet.close();
connection.close();

增删改的操作也跟查询类似,只不过使用方法不一致,以下对各方法进行说明

1、executeQuery()

方法执行后返回单个结果集或多个结果集,用于select语句

2、executeUpdate

方法执行后返回一个整数,指示受影响的行数。用于 update、insert、delete 语句

 完整代码

查询
public class Jdbc {

    private final static String JDBC_URL = "jdbc:mysql://8.1**.**.190:3306/user";

    private final static String USER_NAME = "root";

    private final static String PASSWORD = "123456";


    public static void main(String[] args) {

        try {

            Connection connection = 
                       DriverManager.getConnection(JDBC_URL,USER_NAME,PASSWORD);

            // 创建PreparedStatement对象
            String sql = "SELECT * FROM user WHERE age > 18";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);

            // 执行查询操作
            ResultSet resultSet = preparedStatement.executeQuery(sql);

            while (resultSet.next()){
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                System.out.printf("获取到数据: name = " + name + " age = " + age );
            }

            // 关闭连接和PreparedStatement
            preparedStatement.close();
            resultSet.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
修改
public static void main(String[] args) {

    try {

        Connection connection = DriverManager.getConnection(JDBC_URL,USER_NAME,PASSWORD);

        // 创建PreparedStatement对象
        String sql = "UPDATE user SET age = 20 WHERE id = 1";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        // 在此处执行查询操作
        int row = preparedStatement.executeUpdate(sql);

        if (row == 1){
            System.out.printf("修改成功");
        }
        
        preparedStatement.close();
        connection.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
 
 删除
 public static void main(String[] args) {

        try {

            Connection connection = 
                       DriverManager.getConnection(JDBC_URL,USER_NAME,PASSWORD);

            // 创建PreparedStatement对象
            String sql = "delete from user where id = 1";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);

            // 在此处执行查询操作
            int row = preparedStatement.executeUpdate();

            if (row == 1){
                System.out.printf("删除成功");
            }

            preparedStatement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

添加
public static void main(String[] args) {

        try {

            Connection connection = 
                       DriverManager.getConnection(JDBC_URL,USER_NAME,PASSWORD);

            // 创建PreparedStatement对象
            String sql = "insert into user values (5,'小杰',18,'海珠')";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);

            // 在此处执行查询操作
            int row = preparedStatement.executeUpdate();

            if (row == 1){
                System.out.printf("新增成功");
            }

            preparedStatement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

小结

本篇博客介绍了如何使用JDBC进行查询操作的基本步骤和对可能出现的问题给予解决方案,大概步骤为jdbc连接数据库、创建查询语句、执行查询操作、处理结果集、关闭连接。其它操作如添加,删除,修改原理也类似,可以根据自己的需要去进行练习。

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值