18-JDBC

Java控制MySQL数据库
本文详细介绍如何使用Java通过JDBC连接并操作MySQL数据库,包括加载驱动、获取连接、执行SQL语句及结果集处理等关键步骤。

大家好,我是被白菜拱的猪。

1.回顾

之前我们对数据库进行操作都是通过command(cmd)命令进行连接然后实现。
(1)用cd(change directory 切换命令)找到数据库的所在位置
(2)提供用户名和密码 进入数据库环境
-u root 用户名
-p mysql 密码
(3)use 库名(使用库)
而我们今天学习如何用java控制数据库

2.准备工作

(1)如何建立连接?我们知道软件与软件,硬件与软件连接都需要一个驱动程序,我们的智能手机可以控制家里的电视,空调。那怎么实现将手机与电视机空调进行连接的呢,其实手机与连接物之间有个驱动程序来促使他们能够相同,这个驱动程序不是我们自己弄出来的,而是厂商提供的。
将java与数据库连接亦是如此,需要一个驱动程序-一个jar包。我这里是与mysql5数据库连接,所以jar包名为mysql-connector-java-5.****.jar,下面为具体步骤。

  • (1)在project上右键,创建一个folder,命名为lib
  • (2)粘贴mysql-connector-java-5.****.jar
  • (3)右键点击jar包,选择Build Path — Add to Build Path

3. JDBC

什么是JDBC,JDBC 就是 java database connectivity,java数据库连接
我们通对一张图详细的对JDBC进行阐述,了解这张图,也就了解了JDBC的所以然。我之前说过这是我学的第二遍,想想我第一次学这玩意,真的是一脸懵逼云里雾里。今天听老师讲第二遍顿时豁然开朗。
在这里插入图片描述
第一步 加载驱动类
我们这样想,要想跟数据库整个通道出来,这里的驱动类就是就是帮我们挖出这个通道。这个类就是com.mysql.jdbc.Driver Driver类,我们可以 new Driver这个类,但是new 这个类就意味着多创建了一个对象,就好比你只是要个电饭煲,但是你买来里面已经有做好了的米饭,你只要这个类,但是又多帮你创建了一个对象,不就浪费了嘛。为了避免浪费,我们用Class.forName(“com.mysql.jdbc.Driver”)这个方法。两者都是正确的,只不过前者不是不对,只是让人看起来不太专业。

			//加载驱动类
			Class.forName("com.mysql.jdbc.Driver");

第二步 获取连接
工具给你准备好了,那么图中紫色部分的这个通道怎么挖呢,就是java与数据库是怎么连接呢?通过驱动类的管理者来帮忙。我们之前写作Student类,我们对Student进行操作,是通过StudentManager,这是也是一样。我们通过Driver的管理者DriverManager来建立这个通道获取与数据库的连接。它有个**getConnction()**方法,参数是连接的对象,这里是你的数据库,它的固定形式是"jdbc:mysql://localhost:3308/hzyc82", “root”, “mysql” 类比于回顾中写的cmd控制数据库,第一个是告诉他数据库在那,第二个是用户名,第三个是密码。

			//获取连接
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3308/hzyc82", "root", "mysql");
	

getConnction返回的肯定也是Connction,就是图中的紫色部分的那个通道。
第三步 语句载体
我们对数据的控制是通过sql语句实现的,用java控制数据库,无非就是将sql语句传过去,最后还是在数据库里面执行sql语句,那么sql语句是直接从通道里面进入到数据库的吗?不是的,它是由小车送过去的,就跟高铁一样,人不是自己沿着轨道走到目的地的,而是高铁载着人过去。java里面我们管这个小车叫语句载体Statement,它是由这个通道创建,先有通道,再有小车,要不然光有小车,没有通道也过不去啊。你看看图中多形象,小车驮着sql语句进入通道。

			//语句载体
			Statement stmt = conn.createStatement();

第四步 执行sql语句
sql语句是由谁执行的呢?小车把它送过去肯定要对它负责啊。老娘是你送过来的,你把我撂着就好啦???这肯定不行的。小车里面有两个执行的方法executeUpdate和executeQuery。
(1)executeUpdate
我们知道sql语句里面有insert(增加)delete(删除)update(修改)select(查询)。这里的executeUpdate(更新)就包括(insert、update、delete)。返回值是影响行数int类型。

int rows =stmt.executeUpdate(sql);

我们可以通过rows的值来判断sql语句是否执行成功。
(2)executeQuery
我们知道查询查询有时候能查出来一大堆数据,它将这些数据是放在集合Set中,它不是我们之前学的hashSet和treeSet,而是另一个集合resultSet,结果集。
那我们怎么把结果集里的数据取出来呢?这时候有人说啦,我们之前从set里面取数据使用迭代器,他们都是集合,这里也用迭代器吧。不,不是的。结果集跟前面学的两种集合不一样。它不需要装进迭代器里面,它自己本身就有.next()方法往下移。这里强调一下,它并不是一开始就指向第一行,而是先next,才指向第一行。

	//获取结果集合(该集合不用进入iterator,自己可以使用next方法向下移动)
			ResultSet rs = stmt.executeQuery("select * from student");
			
			//默认查询完毕,并不是指向第一行,而是需要先next,才指向第一行
			//next默认指向的是 before first
			while (rs.next()) {
				String sid = rs.getString("sid");
				String sname = rs.getString("sname");
				String age = rs.getString("age");
				System.out.println(sid + ", " + sname + ", " + age);
			}

第五步 也是就最后一步 关闭
送也送到了,那就回去吧,小车回去了,挖的通道也关了。有人说了,好不容易挖好的通道,关了干啥。答案是假如你不关的话,就拿淘宝为例,那么多人访问,你不关都用的同一个通道,几亿人同时使用,这不炸才怪。
注意关的时候一步一步的来,按照顺序,我们之前是从前往后,现在关闭就要按照从后往前的顺序。先关结果集,然后语句载体,然后是通道Connction。

	rs.close();
			stmt.close();
			conn.close();

4.完整代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCSelect {
	public static void main(String[] args) {
		try {
			//加载驱动类
			Class.forName("com.mysql.jdbc.Driver");
			
			//获取连接
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3308/hzyc82", "root", "mysql");
			
			//语句载体
			Statement stmt = conn.createStatement();
			
			//获取结果集合(该集合不用进入iterator,自己可以使用next方法向下移动)
			ResultSet rs = stmt.executeQuery("select * from student");
			
			//默认查询完毕,并不是指向第一行,而是需要先next,才指向第一行
			//next默认指向的是 before first
			while (rs.next()) {
				String sid = rs.getString("sid");
				String sname = rs.getString("sname");
				String age = rs.getString("age");
				System.out.println(sid + ", " + sname + ", " + age);
			}
			
			rs.close();
			stmt.close();
			conn.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

5.总结

还是那句话,脑子中一定要有知识框架,按照顺序,怎么来的。想清楚想明白。那个图结合着我写的解释一定要搞清楚其中的原理。牢记那个图!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值