一、Java与数据库
要知道Java是要连接数据库的。
对于Java来说,它要解决如下问题:
- 数据库软件是有很多的:MySQL、Oracle、db2、SqlServer……等等。
- 连接MySQL,要去研究MySQL如何编写。
- 连接Oracle,要去研究Oracle如何编写。
- ……等等等等
- 这样下来就特别的繁琐,要知道各个数据库软件也不是一样的。
然后Java一想,我靠,我是编程语言呀。
我为毛要去研究数据库然后连接数据库?
我不写了,我就只制定一套规范。
至于Java和数据库如何连接?数据库厂商自己写。
在Java里面,什么是规范?就是接口。
于是Java就制定了一个接口,现在要连接数据库怎么办?直接用接口调用连接数据库的方法:
接口.getConnection()。
这是啥?就是强调了无数遍的面向接口编程。
接口调用方法,实际上是其实现类重写后的方法。
也就是说:如果数据库是MySQL,它要实现Java里的这个接口,同时重写getConnection方法。
具体是如何连接数据库的,Java不管。
Java为何敢这么做?
毕竟若是某个数据库软件很强硬,就是不写的话,那么Java就没法用这个数据库了。
要知道公司与公司的竞争是非常激烈的。
以前有家公司叫网景,它当年有一个网景浏览器,非常的厉害,但是要收费。
当时微软也有自己的IE浏览器,也是收费的。
后来比尔盖茨一看:小样,你竟然这么火,动了我的奶酪,我决定和你竞争。
竞争了半天,发现竞争不过,毕竟IE浏览器实在是太垃圾了。于是微软做了一个决定:
直接将IE浏览器免费了,同时将其绑定在自家的Window系统上。
然后,网景公司就倒闭了……
大多数用户都是懒惰的,他们一看有免费的浏览器,还直接绑定在电脑上,都不用下载。
那干嘛还去用收费的浏览器?你好用又怎么样?
当初微软打的如意算盘就是先用免费把竞争对手弄死,再一家独大,收费赚钱。
但是万万没想到的是,谷歌、火狐、欧朋等浏览器问世了,同样也是免费的。
用户一看,同样是免费,那我肯定用体验好的呀,IE用起来真不方便,早就不想用了。
于是,IE浏览器还是没什么人用……
回到上面的问题,Java为何有这个底气在?
要知道Java是开源免费的,无欲则刚。
事实上,数据库厂商也很乐意去实现Java制定的数据库规范,毕竟也能起到宣传的效果。
本质上也没有竞争关系,而是实现双赢。
现在我们用的是MySQL数据库,其已经写好了如何连接Java,我们只需要导入就好了。
二、JDBC入门
JDBC,全称为Java database connectivity。
也就是Java和数据库的连接。
我们在IDEA开发工具里操作下Java是如何连接MySQL?一共有6步,一步一步讲解。
①注册驱动
DriverManager是Java里的一个类,驱动管理器。
我们平时用电脑其实就要安装各种驱动,什么声卡驱动、网卡驱动,只不过很多自动安装罢了。
registerDriver()方法,注册驱动的意思。
其中参数就是驱动,Java中的Driver接口,也就是上述说的Java制定的规范。
如果数据库没有实现这个接口的话,需要我们自己去重写Driver的很多抽象方法。
就会非常地繁琐,并且还要懂对应数据库的语言。
但是MySQL数据库已经重写了,那我们只需要导入对应的包就好了。
这个包在MySQL官网就可以下载,然后复制到开发工具里面,导包就可以直接使用了。
所以参数直接就是一个匿名对象new Driver()。
其具体是如何实现Java与数据库连接的?
MySQL已经在包里写好了,不用我们管。
②获取连接
DriverManager类有一个静态方法getConnection()
直接调用就是获取连接的意思,也很好理解。
其中它有三个参数:
url:jdbc:mysql://localhost:3306/liuxiaoai
- jdbc:mysql:说明数据库是mysql
- locahost:3306:这个就是IP加上端口,若是其他电脑上的数据库,需要其对应的ip
- liuxiaoai:这个是数据库名。
user:也就是数据库的用户名。
psd:password的简写,也就是数据库的密码。
说白了,这个就是告诉Java,要连接的数据库在哪儿,数据库叫什么,以及用户名和密码。
③创建sql执行语句
connection有一个createStatement()方法。
翻译过来就是创建语句的意思,什么语句?
我们数据库查询操作的sql语句。
statement等于是将在Java程序里输入的sql语句告诉给数据库。
④执行语句
也就是我们在数据库上输入的sql语句,只不过在Java里它就是一个字符串。
statement有一个executeQuary()方法
execute,执行的意思。
Quary,查询的意思。
因为输入的sql语句为查询语句,那么就调用执行查询方法。
语句执行完了之后会得到一个结果ResultSet。
⑤处理结果
这其实就是集合中学到的迭代器。
这个如何更好地理解呢?
一张数据表表它的第一行是列名,后面还有很多行都是对应的数据。
resultSet有一个next()方法,用于判断下一行是否还有对应的数据。
- 如果有就继续循环执行下一行
- 如果没有了就结束循环
其中getString()方法也就是得到具体的值,参数即为表中的列名。
也就是根据列名得到当前行中的具体数值。
⑥释放资源
close()方法关流。
最后运行下程序,结果如下:
因为只查询了name和age这两个字段,控制台也就只输出这两个字段对应的值。
最后
今天只是初步接触了下JDBC,将其写了一遍。
没有详细地讲解,并且有些步骤还可以进一步优化,明天继续学习。
谢谢你的观看。
如果可以的话,麻烦帮忙点个赞,谢谢你。