【MySQL】Java中的 JDBC 编程

news/2024/7/7 3:05:02

目录💦

  • 前言 : 数据库编程的必备条件
  • 1. Java的数据库编程:JDBC
    • 1.1 JDBD使用步骤
  • 4. JDBC使用
    • 4.1创建数据源
    • 4.2 与数据库服务器建立连接
    • 4.3 操作数据库. 以插入数据为例
  • 5.数据库操作(CURD 增删改查)
    • 5.1 插入(executeUpdate )
    • 5.2 删除(executeUpdate )
    • 5.3 更新数据(executeUpdate )
    • 5.4 查询数据 (executeQuery)
  • 6.JDBC使用步骤总结
  • 7.JDBC常用接口和类
    • 7.1 JDBC API
    • 7.2 数据库连接Connection
    • 7.3 Statement对象
    • 7.4 ResultSet对象

前言 : 数据库编程的必备条件

  • 编程语言,如Java,C、C++、Python等
  • 数据库,如Oracle,MySQL,SQL Server等
  • 数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提
    供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的,
    要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。

1. Java的数据库编程:JDBC

JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是
Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

JDBC优势:

  • Java语言访问数据库操作完全面向抽象接口编程
  • 开发数据库应用不用限定在特定数据库厂商的API
  • 程序的可移植性大大增强

1.1 JDBD使用步骤

  • 创建项目 :在IDEA中创建一个新的项目。
  • 引入依赖:JDBC编程需要用到 mysql的驱动包.(驱动包就是把 mysql自身的api给转换成jdbc风格的)驱动包是mysql官方提供的。
  • 下载驱动包:
    数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。

在吗 maven(中央仓库)里面搜索mysql,出现以下页面:
在这里插入图片描述

选择第一个 MySQL Connector,然后找到自己对应的版本号:
在这里插入图片描述
如果安装的是5.*版本,就在里面下载对应的5.1.x系列,这里所下载的驱动版本要和MySQL的版本号相对应!

点击下载驱动包,得到一个jar这样的文件(就相当于.zip这样的压缩包一样),jar里面就是一些其他人写好的.class文件。
在这里插入图片描述

  • 将驱动包导入到项目中
  1. 创建个目录,随便起个名字,例如叫做lib;
  2. 把刚才下载的jar 文件拷贝到刚才的目录中;
  3. 右键刚才的目录,有一个选项,叫做Add as library,点击这个选项,才能把这个jar 引入到项目中,此时项目才会从jar里面读取内部的.class ,否则,代码就找不到jar 中的一些类。
    在这里插入图片描述
    到这里我们进行JDBC代码编写的准备工作就完成了,下面就可以进行代码的编写:

4. JDBC使用

4.1创建数据源

 DataSource dataSource=new MysqlDataSource();//设置数据库所在的地址((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false");//设置登录数据库的用户名((MysqlDataSource) dataSource).setUser("root");//root是mysql默认自带的管理员用户//设置登录数据库的密码((MysqlDataSource) dataSource).setPassword("1963");//自己设置的mysql登录密码

对于这里的URL:

"jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false"

jdbc:mysql:表示这里的URL是用于jdbc mysql的url。
127.0.0.1:IP地址,mysql 服务器所在的主机的IP地址,IP地址就描述了网络上一个主机的位置。这是一个特殊的IP地址就表示你的本机 IP(环回IP)。
3306:端口号,访问你这个主机上的哪个程序;3306表示了mysql服务器
(安装 mysql的时候,有个环节就是设置了mysql服务器的端口号.默认就是3306),每个服务器程序启动的时候,都关联一个端口号。
java102:自己的数据库里面所创建的数据库名。
characterEncoding=utf8:指定字符集是utf8。
useSSL=false:不需要加密传输。

4.2 与数据库服务器建立连接

//2.让代码和数据库服务器建立连接Connection connection=dataSource.getConnection();

这里所选择的Connectionjava.sql包下的。

4.3 操作数据库. 以插入数据为例

关键所在就是构造一个 SQL 语句

//在 JDBC 中构造的 SQL, 不必带上 ;
String sql="insert into student values(?,?)";

此处光是一个 String 类型的 sql 还不行, 需要把这个 String 包装成一个 “语句对象”

PreparedStatement statement=connection.prepareStatement(sql);

执行 SQL,返回值就表示这个操作, 影响到了 几行. 就相当于在控制台里输入 sql 之后, 得到的数字。

 int ret=statement.executeUpdate();System.out.println(ret);

此时 SQL 已经执行完毕. 然后还需要释放资源.

 statement.close();connection.close();

DataSource/MysqlDataSource用来描述数据源,描述数据库的地址,端口,数据库名,用户名,密码.
getConnection、Connection表示数据库连接~~
PreparedStatement通过这个对象来描述要执行的SQL.
executeUpdate:增删改
executeQuery:查找

5.数据库操作(CURD 增删改查)

注意我们要实现操作的条件在控制台里面输入,所以在设置SQL语句对象时候使用相应数量的 ? ;
然后通过 SQL语句对象statement方法中的setxxx方法来实现控制台输入:

System.out.println("请输入学号:");int id=scanner.nextInt();
System.out.println("请输入姓名:");
String name=scanner.next();String sql="insert into student values(?,?)";
PreparedStatement statement=connection.prepareStatement(sql);statement.setInt(1,id);
statement.setString(2,name);
System.out.println("statement:"+statement);

在这里插入图片描述

5.1 插入(executeUpdate )

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;public class TestJDBC {public static void main(String[] args) throws SQLException {Scanner scanner=new Scanner(System.in);DataSource dataSource=new MysqlDataSource();//设置数据库所在的地址((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false");//设置登录数据库的用户名((MysqlDataSource) dataSource).setUser("root");//设置登录数据库的密码((MysqlDataSource) dataSource).setPassword("1963");//2.让代码和数据库服务器建立连接Connection connection=dataSource.getConnection();// 2.5 让用户通过控制台输入一下待插入的数据.System.out.println("请输入学号:");int id=scanner.nextInt();System.out.println("请输入姓名:");String name=scanner.next();// 3. 操作数据库. 以插入数据为例.//    关键所在就是构造一个 SQL 语句~//    在 JDBC 中构造的 SQL, 不必带上 ;String sql="insert into student values(?,?)";// 此处光是一个 String 类型的 sql 还不行, 需要把这个 String 包装成一个 "语句对象"PreparedStatement statement=connection.prepareStatement(sql);// 进行替换操作.statement.setInt(1,id);statement.setString(2,name);System.out.println("statement:"+statement);// 4. 执行 SQL// SQL 里面如果是 insert, update, delete, 都使用 executeUpdate 方法.// SQL 里面如果是 select, 则使用 executeQuery 方法.//返回值就表示这个操作, 影响到了 几行. 就相当于在控制台里输入 sql 之后, 得到的数字~int ret=statement.executeUpdate();System.out.println(ret);// 5. 此时 SQL 已经执行完毕. 然后还需要释放资源.statement.close();connection.close();}
}

执行代码结果如下:
在这里插入图片描述
在MySQL客服端中测试插入是否成功:
在这里插入图片描述
插入成功

5.2 删除(executeUpdate )

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;public class TestJDBCDelete {public static void main(String[] args) throws SQLException {//删除数据库中的记录//让用户输入一个id,根据id来进行删除//1.创建数据源DataSource dataSource=new MysqlDataSource();((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("1963");//2.建议连接Connection connection=dataSource.getConnection();//3.用户输入idScanner scanner=new Scanner(System.in);System.out.println("请输入一个要删除的id:");int id=scanner.nextInt();//4.拼装sql语句String sql="delete from student where id=?";PreparedStatement statement=connection.prepareStatement(sql);statement.setInt(1,id);//5.执行SQLint ret=statement.executeUpdate();System.out.println("ret="+ret);//6.回收释放资源statement.close();connection.close();}
}

在这里插入图片描述
id为100的数据成功被删除:
在这里插入图片描述

5.3 更新数据(executeUpdate )

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;public class TestJDBCUpdate {public static void main(String[] args) throws SQLException {//根据id来修改学生姓名,让用户输入 要修改的id,以及对应的修改后的名字//1.创建数据源DataSource dataSource=new MysqlDataSource();((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("1963");//2.和数据库建立连接Connection connection=dataSource.getConnection();//3.输入信息Scanner scanner=new Scanner(System.in);System.out.println("请输入要修改的学生的id:");int id=scanner.nextInt();System.out.println("请输入修改后的姓名:");String name=scanner.next();//4.拼装sqlString sql="update student set name=? where id=?";PreparedStatement statement=connection.prepareStatement(sql);statement.setString(1,name);statement.setInt(2,id);System.out.println("statement: "+statement);//5.执行SQLint ret=statement.executeUpdate();System.out.println("ret="+ret);//6.回收资源statement.close();connection.close();}
}

将id为520的学生姓名给为小红:
在这里插入图片描述
在这里插入图片描述

5.4 查询数据 (executeQuery)

相关解释在代码中以注释形式给出 :
查找操作与增,删,改 操作不同,步骤较以上三个操作更为复杂 :
主要体现在:

  • 需要遍历结果集合,返回临时表,先获取到每一行,再获取到这一行中的每一列
  • next方法表示获取到一行记录,同时把光标往后移动一行
  • 如果遍历到的表结束,此时的next直接返回FALSE了
while (resultSet.next()){//针对当前的这一行来获取到其中的列int id=resultSet.getInt("id");String name=resultSet.getString("name");System.out.println("id="+id+" "+","+"name="+name);}

针对select * from student这一SQL语句jdbc代码如下:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class TestJDBCSelect {public static void main(String[] args) throws SQLException {//1.创建数据源DataSource dataSource=new MysqlDataSource();((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("1963");//2.建立连接Connection connection = dataSource.getConnection();//3.拼装sqlString sql="select * from student";PreparedStatement statement=connection.prepareStatement(sql);//4.执行SQL,对于查询操作,就需要使用executeQuery//在查询操作返回的不是一个int,而是一个“临时表”//使用resultSet表示这个表ResultSet resultSet=statement.executeQuery();//5.遍历结果集合,返回临时表,先获取到每一行,再获取到这一行中的每一列//next方法表示获取到一行记录,同时把光标往后移动一行//如果遍历到的表结束,此时的next直接返回FALSE了while (resultSet.next()){//针对当前的这一行来获取到其中的列int id=resultSet.getInt("id");String name=resultSet.getString("name");System.out.println("id="+id+" "+","+"name="+name);}//6.释放资源resultSet.close();statement.close();connection.close();}
}

在这里插入图片描述

6.JDBC使用步骤总结

  1. 创建数据库连接Connection
  2. 创建操作命令Statement
  3. 使用操作命令来执行SQL
  4. 处理结果集ResultSet
  5. 释放资源

7.JDBC常用接口和类

7.1 JDBC API

在Java JDBC编程中对数据库的操作均使用JDK自带的API统一处理,通常与特定数据库的驱动类是完全
解耦的。所以掌握Java JDBC API (位于 java.sql 包下) 即可掌握Java数据库编程。

7.2 数据库连接Connection

Connection接口实现类由数据库提供,获取Connection对象通常方式为:

  • 通过DataSource(数据源)对象获取。实际应用中会使用DataSource对象。
DataSource ds = new MysqlDataSource();
((MysqlDataSource) ds).setUrl("jdbc:mysql://localhost:3306/test");
((MysqlDataSource) ds).setUser("root");
((MysqlDataSource) ds).setPassword("rootPassWord");
Connection connection = ds.getConnection();//建立数据库连接
  • DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接
    是可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将Conncetion连接对象回收。

7.3 Statement对象

Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象。
在这里插入图片描述

实际开发中最常用的是PreparedStatement对象,以下对其的总结:
在这里插入图片描述

主要需要掌握两种执行SQL的方法:

  • executeQuery() 方法执行后返回单个结果集的,通常用于select语句
  • executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete
    语句

7.4 ResultSet对象

ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供
了对这些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当
前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()
方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。

具体见上述关于select语句的jdbc

  • over ~

http://lihuaxi.xjx100.cn/news/283882.html

相关文章

写代码这条路,能走多远?阿里算法专家告诉你

作者 | 张知临 (花名:妙临),阿里巴巴算法专家,专注于计算广告领域的策略研究和机制设计,包括调价机制、合约分配、多目标优化、用户体验建模等,并将上述策略和机制以及DL、RL等技术应用在淘宝、优酷等场景中。职场危机…

20道常见初级Java面试题

1、面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节…

mysql 索引合并

索引合并是mysql底层为我们提供的智能算法。本文就介绍了mysql 索引合并的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 索引合并是mysql底层为我们提供的智能算法。了解索引合并的算法&#xff0c…

美国是名副其实的“黑客帝国”

2月17日,外交部发言人耿爽主持网上例行记者会。问:据报道,美国情报部门自冷战时期至2000年代初期,一直控制瑞士加密公司克里普托( Crypto AG ),向外国政府和企业出售加密机器,一边赚取数以百万计美元&#…

不安装Oracle使用cx_Oracle

使用Python连接Oracle数据库的环境非常麻烦,尤其在window下的配置,默认情况下需要安装Oracle数据库才行,对于不想在机器上安装Oracle的用户来讲,安装过程会出现各种问题。最常见的如下:安装出错:distutils.…

计算机书集下载链接

http://nic.biti.edu.cn/china-pub/ 我在那下了一本:XML高级编程转载于:https://www.cnblogs.com/dyuan/archive/2004/03/12/2966.html

【每日一题】 牛客 密码强度等级

题目链接 点此跳转 题目要求: 解题思路: 将每个加分项都写成一个方法,思路逻辑清晰,依次完成每一个加分方法,再写一个比较等级的方法,最后再main函数里面输出即可: 代码如下: im…

7个让你惊叹的HTML技巧

我们倾向于使用HTML与CSS、JavaScript等,使我们的网站或博客看起来更有吸引力。下面是一些很酷的HTML技巧,你可以用它来建立一个真正的动态网站。 下面是一些很酷的HTML技巧,你可以用它来建立一个真正的动态网站。 技巧1. Image Maps image…