赞
踩
在学完 MySQL 和 Java 后,我们通常会尝试使用 Java编译器 连接 MySQL数据库,从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识,因此我把 JDBC 包的下载及导入流程,以及 JDBC 的使用流程整理下来分享给大家。
目录
JDBC 翻译中文为 Java数据库连接,通俗的来讲,JDBC 就是能使 Java 连接关于数据库的一个API。这个 API 是由 java.sql.* 和 jva.sql.* 包中的接口和类组成的。
API在此做个简单的介绍,有的人认为它是一个接口可以这样去说,更好的理解为它是多个特定模块封装起来的一个功能包。而在本文中 JDBC 就是 Java 操纵数据库的一个API。
在使用 JDBC 之前,我们必需把依赖包 mysql-connector-java-5.1.47.jar 导入到 Java 项目中。依赖包的获取方式:GitHub、MySQL官网、maven仓库。但 GitHub 有些慢,MySQL官网不好找,因此推荐在 maven仓库 中下载。
上述依赖包的版本号5.1.47,以大版本号为主,小版本号无所谓。什么意思?就是你下载的MySQL版本是 5 你就下载依赖包以 5 开头的版本,至于是5.几都可以。
第一步,浏览器搜索maven仓库。
第二步,在搜索框搜索 mysql 并进入MySQL Connector Java。
第三步,进入MySQL Connector Java后,找到 5 开头的版本。为啥呢,你下载的MySQL是版本几就下版本几。因为博主用MySQL是 5 版本的,因此下载 5 开头的都行。
第四步,进入MySQL Connector Java 》5.1...后,点击jar下载即可。
下载好依赖包后,我们直接把依赖包 mysql-connector-java-5.1.47 复制并粘贴到Java项目当中,具体操作流程如下:
第一步,将下载好的.jar文件复制。
第二步,将复制好的 mysql-connector-java-5.1.47.jar 文件粘贴至创建好的项目当中,以项目中出现该.jar文件为准代表粘贴成功。
第三步,右击粘贴好的 mysql-connector-java-5.1.47.jar 文件,修改为Libray。点击Add as Library即可。
第四步,mysql-connector-java-5.1.47.jar 文件下出现三个子目录,代表着导入成功。
在把依赖包导入到项目当中后,我们就能安心的使用 JDBC 进行编程了。下面我就来讲解关于 JDBC 的使用方法。
在JDBC常用的接口和类这节讲解中,大家很多地方可能第一时间不能够很好的理解。建议跳过,先看4. JDBC的使用后,在回来看这一小节。
数据库连接 接口即 Connection 接口实现类是由数据库提供的,获取到Connection对象的最合适的方法为:
是通过DataSource(数据源)对象来获取,如下代码的展示:
- //实例化MysqlDataSource对象(向上转型)
- DataSource datasource = new MysqlDataSource();
- ((MysqlDataSource) datasource).setUrl("jdbc:mysql://localhost:3306/test");
- ((MysqlDataSource) datasource).setUser("root");
- ((MysqlDataSource) datasource).setPassword("填你的密码");
-
- //创建来连接数据库
- Connection connection = datasource.getConnection();
以上代码,就是连接Java连接数据库的操作。具体的实现的原理,在下方4. JDBC的使用中有详细介绍。
解释:
DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是可以复用的,每次使用完数据库连接,释放资源调用 connection.close() 都是将Conncetion连接对象回收。
Statement对象是将SQL语句发送到数据库中。JDBC 这个 API 中提供了三种Statement对象:
(1)Statement对象:
- 用于执行不带参数的简单SQL语句
(2)PreparedStatement对象:
- 用于执行带或者不带参数的SQL语句
- SQL语句会编译在数据库系统
- 执行速度快于Statement对象
(3)CallableStatement对象:
- 用于执行数据库存储过程的调用
综上所述,我们在实际开发中最常用的就是 PreparedStatement对象 。 因此我们在实例化PreparedStatement对象时一般这样操作:
PreparedStatement statement = connection.prepareStatement(sql);
在上述代码中,connection为Connection类型的引用,prepareStatement方法则是把Java编写的SQL语句传入MySQL数据库。
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的 next() 方法 ,如果我们想要得到 ResultSet 里的所有记录,就应该使用 while 循环。
如下图所示,next方法 第一次获取第一行数据,第二次获取第二行数据,直到最后没有数据了 while 循环结束。
executeQuery()方法 会把数据库响应的查询结果存放在 ResultSet对象 中供我们使用。
语法为:ResultSet 引用名 = new PreparedStatement类型的引用.executeQuery();因此,可以这样去写代码:
- PreparedStatement statement = connection.prepareStatement(sql);//把sql语句传入数据库
-
- String sql = "select * from student";//写入sql语句
-
- ResultSet resultSet = statement.executeQuery();//实例化Resultset类型的对象
-
- while (resultSet.next()) {
- int id = resultSet.getInt("id");
- String name = resultSet.getString("name");
- System.out.println("id = "+id+" name = "+name);
- }//遍历表中信息
在对结果集进行遍历的时候,while循环里面的参数是根据数据表中字段来确定的。如果数据表里面的字段有int,varchar 这两个类型那么我们就使用 getInt方法、getString方法 来分别获取这两个字段。当然必需得是 ResultSet类型 的引用。如果表中数据是其他类型,则按照 getXXX方法 来获取即可。
在了解到了 JDBC 的常见接口与对象后,我们就可以使用 JDBC 来进行编程了。JDBC 的使用步骤如下:
- 创建并初始化一个数据源
- 与数据库服务器建立连接
- 构造 SQL 语句
- 执行 SQL 语句
- 遍历结果集
- 释放必要的资源
首先,我们在数据中创建一个名为 test 的数据库并在该数据库中创建一个名为 student 的表:
- //创建test数据库
- mysql> create database test charset utf8;
- Query OK, 1 row affected (0.00 sec)
-
- //使用test数据库
- mysql> use test;
- Database changed
-
- //创建student表
- mysql> create table student(
- -> id int,
- -> name varchar(20)
- -> );
- Query OK, 0 rows affected (0.02 sec)
-
- //查询全表内容
- mysql> select * from student;
- Empty set (0.00 sec)
此时的 student 表中没有任何数据,下方我们来通过 JDBC 编程使 student 增添数据。
MysqlDataSource 是 MySQL的数据源,因此我们得实例化一个 MysqlDataSource 。
当然,我们一般使用 DataSource类 来实例化 MysqlDataSource,因此会进行向上转型效果。
DataSource dataSource = new MysqlDataSource();//向上转型
为啥不直接使用 MysqlDataSource类型 来实例化呢?这样去理解:DataSource类里面有的方法DataSource类的引用能够使用用,MysqlDataSource里面有的方法DataSource类型的引用也能够用。因此,我们宁愿向上转型。
Java 与 MySQL数据 连接的URL参数格式如下:
- jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值
万能的URL:jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false
以上的URL大家可以直接复制粘贴使用即可,唯一需要更改的是数据库名。把 test 更改为你所要操作的数据库。如下方连接我创建的 test 数据库。
以下为与数据库服务器建立连接代码及解释:
- DataSource dataSource = new MysqlDataSource();//向上转型
-
- //数据库来源
- ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
-
- //账户
- ((MysqlDataSource)dataSource).setUser("root");
-
- //密码
- ((MysqlDataSource)dataSource).setPassword("你的密码");
-
- //与数据进行连接
- Connection connection = dataSource.getConnection();
在 dataSource 使用的方法中:
- setUrl 是表明MySQL数据库的来源
- setUser 是表明MySQL数据库的账号(下载时的账号默认为root)
- setPassword 是MySQL数据库密码
除了URL中的数据库不确定外,账号、密码就是你下载MySQL数据库时你设置的MySQL账号和密码,相信大家都还记得。
静态的构造方法:
构造sql语句,我们使用 String 类型的变量来初始化 sql 语句。初始化好的变量我们直接通过 prepareStatement 这个方法把该变量传入数据库中,这样数据库拿到的就是一条 sql 语句了。
- //静态构造sql语句
- String sql = "insert into student value(101,'张三')";//插入sql语句
通过上方代码,大家乍一看。这不是在 Java 编译器里面写 SQL 语句吗?没错,其实 JDBC 编程就是通过在 Java 编译器里面引入一些 SQL 语句来达到操作数据库的效果。
动态构造方法:
当然以上的写法,是把 sql语句 固定死了,这样在就不能与用户达到交流。因此,我们可以通过键盘输入来达到动态输入效果。
- //动态构造sql语句
- Scanner scanner = new Scanner(System.in);
- String sql = "insert into student value(?,?)";
-
- System.out.println("请输入id:");
- int id = scanner.nextInt();
-
- System.out.println("请输入name:");
- String name = scanner.next();
-
- statement.setInt(1,id);
- statement.setString(2,name);
通过键盘输入,我们需要将value里面的值替换为?号,再通过对应的set方法来进行对应值的输入。在我的 student 表中
通过 prepareStatement方法 把sql语句发送到数据库中,当然我们得使用 Connection类型 的引用来调用 prepareStatement方法。
- //通过prepareStatement方法把sql语句发送到数据库
- PreparedStatement statement = connection.prepareStatement(sql);
遍历结果按照ResultSet类型下的executeQuery方法来获取,在使用next()方法来达到遍历。在上方 3.3ResultSet类 中讲解到了,因此可以写出以下代码:
- while (resultSet.next()) {
- int id = resultSet.getInt("id");
- String name = resultSet.getString("name");
- System.out.println("id = "+id+" name = "+name);
- }
释放按照先进后出的顺序进行释放,什么意思呢?先执行的方法,我们先进行释放,后执行的方法我们后释放,按照栈的顺序先进后出。
- //通过close方法释放必要的资源
- statement2.close();
- statement1.close();
- connection.close();
为啥要释放资源,在 Java 连接 MySQL数据库 并且传 SQL语句 时占用着内存中的空间。如果我们不使用 close方法 进行关闭连接的状态将一直保持着占用资源的状态,因此我们得释放这些连接。
JDBC的 6 个步骤展示:
- public static void main(String[] args) throws SQLException {
-
- //1.创建并初始化数据源
- DataSource dataSource = new MysqlDataSource();
-
- //2.与数据库服务器建立连接
- ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
- ((MysqlDataSource)dataSource).setUser("root(填你自己的账号)");
- ((MysqlDataSource)dataSource).setPassword("我的密码(填你自己的密码)");
- Connection connection = dataSource.getConnection();
-
- //3.构造sql语句
- String sql1 = "insert into student values(101,'张三'),(102,'李四'),(103,'王五')";
- String sql2 = "select * from student;";
-
- //4.执行sql语句
- PreparedStatement statement1 = connection.prepareStatement(sql1);
- PreparedStatement statement2 = connection.prepareStatement(sql2);
- int ret = statement1.executeUpdate();
- System.out.println("修改了"+ret+"条信息");//显示修改信息
-
- //5.遍历结果集
- ResultSet resultSet = statement2.executeQuery();
- System.out.println("Student表信息:");
- while (resultSet.next()) {
- int id = resultSet.getInt("id");
- String name = resultSet.getString("name");
- System.out.println("id = "+id+" name = "+name);
- }
-
- //6.释放资源
- statement2.close();
- statement1.close();
- connection.close();
- }
Java编译器输出:
MySQL窗口显示:
上述代码中的 executeUpdate方法 具体实现效果如下:
- executeUpdate的返回值是一个整数,指受影响的行数(即更新计数)
- 对于create table或drop table等不操作行的语句,executeUpdate的返回值为零
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/452143
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。