写在前面
书接上回,上周写的博客还不错,感谢各位读者的支持。
在学完了MySQL的基础操作之后,接下来就该学习如何在业务层面去使用数据库了,一切的学习都是为了实际运用,所以就要开始学习JDBC了。
任何工作,如果过程复杂且重复,就需要发明一种工具或者找到一种方法来解决,这便是人类科技发展的源动力。所以说人懒点还是有好处的,很多发明创造都是懒人发明的,懒得走路发明了汽车飞机,这就是我们彭老师常说的,不要重复造轮子。
而这个JDBC,就是Java连接数据库的一种方案,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口。
一、JDBC的优缺点
很少也很难有一种工具从刚被制造出来就是完美无瑕,不需要修缮的,尤其是复杂的工具,就像我们学习的编程语言,从程序“远古”时代的B语言,到C语言、C++,一直到现如今我们学习的java,都不是一人一时一地的产物,都是经过很多人努力、修缮的结果,而JDBC作为帮助我们连接java和数据库的工具,也有其优缺点。
1.优点
JDBC是直接底层操作,提供了简单,便捷的访问数据库的方法,跨平台性较强,灵活比较强,可以执行很复杂的SQl语句。这一点我深有感触,不过鄙人学艺不精,老是写错SQL语句(QAQ),是不是还得切回数据库试一下555,什么时候在java中写sql语句写错了也标红就好了(Oracle公司的HR,我给你们一次录用我的机会)
2.缺点
JDBC的缺点也很明显(你以为我会告诉你我们上周刚考过吗),有如下四个方面:
(1)硬编码
SQL语句存在Java代码中,不能很好的分离数据库语句和Java语句,造成代码不易维护;
(2)SQL参数固定
SQL语句的参数固定,使得SQL语句不灵活,无法满足多变的场景。
(3)代码重复度高
大量的重复代码,以ResultSet为例,每次都需要重复解析结果集;
(4)底层技术
JDBC属于底层的技术,不支持分布式,缓存等技术,对于复杂场景的应对不好;在前文说了,直接底层操作,这是他的优点,但也是他的弊端,唉。
不过呢,既然缺点都知道了,那就像程序报的异常,已经告诉你了,接下来想办法去解决就行了。暴露问题不一定是坏事。(有bug总比找不到bug好)
二、JDBC操作步骤
教我们数据库的帅气的彭老师(老彭你看到没我真的在夸你)上课举得例子很有意思,java和数据库的链接,就好比我们买了台笔记本,买了个鼠标,而JDBC就是你电脑里安装的鼠标驱动,没有这个,光插上USB接口也用不了。
而JDBC的类与驱动有四个:
1.JDBC的类与接口
(1)驱动管理类 : DriverManager
他的作用是用来告诉程序该使用哪一个数据库驱动jar, static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager
写代码使用:Class.forName("com.mysql.jdbc.Driver");
(2)连接接口 Connection
Connection接口代表与特定的数据库的连接.要对数据表中的数据进行操作,首先要获取数据库连接.Connection实现就像在应用程序中与数据库之间开通了一条渠道.通过DriverManager类的getConnection()方法可获取Connection。
(3)语句对象接口 Statement
Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL语句。
(4)结果集接口ResultSet
ResultSet,数据库结果集的数据表,通常通过执行查询数据库的语句生成。
2.JDBC具体怎么用
具体的来说很简单,就是打开冰箱门,把大象放进去,关上冰箱门,不过记得要把大象放出来,不然资源不够用了。不过首先,你得有一个冰箱。
(1)下载驱动
这个驱动就是我现在lib文件夹下的mysql-connector-java-8.0.15.jar文件,可以到官网下载,或者来找我要,我不一定给。
下载好后右键点击 下图的按键
(2)使用DriverManager 获取Connection连接
String url = "你的url";
String user = "用户名";
String pwd = "密码";
Connection conn = DriverManager.getConnection(url, user, pwd);
System.out.println(conn);
这其中的url, user, pwd分别是你的数据库url(协议、地址(端口)、资源)、用户名、密码
(3)Statement ,获取执行sql语句的对象
Statement statm = conn.createStatement();
(4) 执行你需要执行的sql语句
int ret = statm.executeUpdate("你需要执行的sql语句" );
//ret在数据库中影响的行数
if(ret > 0) {
System.out.println("执行成功");
}else {
System.out.println("执行失败");
}
(5)释放资源
把大象从冰箱里取出来
statm.close();
conn.close();
完事,下班,打开,走人,挤公交。