1. 导语
其实我一直在想把这jdbc放在sql中还是java中,最后还是选在放在java中,毕竟它确实是java代码。通过这篇博客,可以学习到以下几个问题
- 什么是JDBC?
- JDBC原理
- JDBC核心类(接口)介绍
- 编写一个JDBC例子
2. 学习
2.1 什么是JDBC
jdbc的全称是 java database connect ,顾名思义java数据库连接,其实就是通过我们java代码来操作sql语句,对数据库的增删改查。
2.2 原理
我们知道java代码如果需要连接数据库是需要方法和接口的,也就是API,但是数据库的种类有太多了,常见的比如mysql、Oracle,但是因为各个数据库的差异太大,一套API实现不了,又不能对每一种数据库提供一套API(能想到这有多么蛋疼),所以他们决定定一套规范,然后接口由各个数据库厂家根据这个规范提供,这个规范其实就是协议标准,也就是JDBC,而遵循JDBC规范提供的接口就是驱动。
注意:JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。
2.3 核心类和接口
在分析核心类和接口之前,先看看使用jdbc的步骤
1.注册驱动。主要是让java代码知道,想要连接的是哪一种数据库
2.获取连接。连接上数据库
3.向数据库发送sql语句
4.接受发送成功后返回的结果
5.关闭核心类接口的对象
上述操作涉及到的类和接口主要有:
1.注册驱动的 Class.from(“”)
2.获取连接的 DriverManager
3.发送sql的 Statement
4.保存结果集的 ResultSet
2.4 例子
这里我使用的开发工具是idea,从android studio转过来站在鄙视链的顶端怎么还会去用eclipse呢(哈哈 别打我)
首先需要准备好jdbc需要的jar包,前面说了各个数据库厂家都会提供驱动API,就在这个jar包中,所以要找就去mysql中去找
(mysql-connector-java-5.1.45.zip)
下载完然后解压出来,在idea工具中添加进去,具体步骤这里简单说了 不是本文的重点
File–>Project Structure–>Module–>Dependencies–>右边绿色加号(和as是一样的,选第一个)
然后找到我们下载jar的位置,添加进去即可。
如果这里没有添加运行会报如下错误
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
下载地址 下载解压即可
A:注册驱动
Class.forName("com.mysql.jdbc.Driver");
我们使用的数据库是mysql,所以这里填mysql,这就是注册驱动,如果要导包,导入sql的包不要选择jdbc的包。
B:连接数据库
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test1", "root", "root");
DriverManager.getConnection(x,y,z)中的三个参数含义分别是
x : 代表 url ,和我们连接接口一个道理也需要地址,只不过这里的地址协议不是http的,而是jdbc的,它的协议规范是
jdbc:数据库种类://数据库位置:端口/数据库名称
注意:如果要导包 这里也是导sql包而不是jdbc。上面的数据库位置可以是ip地址也可以是域名
y : 用户名
z : 密码
C:获取操作sql语句工具类Statement
在上面一步操作中,如果我们获取到connection对象,则说名数据库连接成功,则需要再获取到操作sql语句的工具类Statement
statement = connection.createStatement();
Statement是用来向数据库发送要执行的SQL语句的!
D:发送sql语句
这里比较简单,我操作一个查询语句,表我已经准备好了
String sql = "select * from my_movie";
resultSet = statement.executeQuery(sql);
E:循环遍历结果集
发现没,在执行statement.executeQuery(sql)后会返回一个resultSet结果集,它其实就是如上一张表,相信操作过数据库的都知道,这差不多。不断的调用resultSet.next()方法来移动行数,当第一次移动时就会在第一行,第一行是有数据的,只要通过get方法就可以拿到对应的数据,这比较简答
while (resultSet.next()){
System.out.println("movieName:"+resultSet.getString("mName")+" moviePrice:"+resultSet.getDouble("mPrice")+" movieDir:"+resultSet.getString("mDirector")+" movieTime:"+resultSet.getString("mShowDate")+" ");
}
上面是查,当然也可以通过statement来增删改,方法是executeUpdate(String sql),但是一般我们使用的比较少,但是要注意如果使用execute()方法执行的是更新语句,那么还要调用int getUpdateCount()来获取insert、update、delete语句所影响的行数。
F:关闭
和io流一样,在运行完后需要对这些对象进行关闭
if(connection != null){
connection.close();
}
if(statement != null){
statement.close();
}
if(resultSet != null){
resultSet.close();
}
运行出来的代码如下图