JDBC上课总结(1)(JDBC核心API、JDBC基本编码步骤)(JDBC底层由来、使用)
目录
一、关于各种客户端与mysql(服务器端)的连接。
(1)DataGrip客户端连接mysql服务器端。
(2)Java程序客户端连接mysql服务器端。
(3)什么是JDBC?
二、JDBC底层由来、使用。
(1)JDBC出自。
(2)当今的数据库产品。(很多)
(3)JDBC诞生原因。
(4)Java程序(客户端)连接不同的数据库产品的解决方案。
(5)如何使用不同的数据库产品?
三、JDBC核心API。
(1)JDBC核心API位于哪个包。
(2)以生活的案例需要那些类。
(3)JDBC核心API。
1、DriverManger(驱动管理器)。
2、Connection对象。
3、Statement对象。
4、ResultSet对象。
四、JDBC的基本编码步骤。
1、导jar包。
2、导入数据库驱动——>加载驱动类。
3、得到Connection对象。
4、编写sql。
5、创建Statement对象。
6、使用Statement对象对数据库进行增删改查操作。
7、最后关闭资源。
一、关于各种客户端与mysql(服务器端)的连接。
(1)DataGrip客户端连接mysql服务器端。
- DataGrip(数据库图形化界面)——>连接mysql(服务器)。
- 它也是作为一个客户端。通过写sql语句,发送给mysql。在mysql中有一个sql引擎——执行sql语句、分析检查sql语法。执行完就会把结果返回给客户端(dp)
(2)Java程序客户端连接mysql服务器端。
- Java程序——>连接mysql(服务器)。它是作为一个客户端。
- 原先学习mysql时在DataGrip写sql语句,当然也可以在Java中写sql语句。
- Java中写sql语句,需要通过网络发送给mysql服务器。这里不需要自己手动写TCP通信(Socket、ServerSocket、IO流读写操作)已经将底层封装好了。
- 封装的东西——就是我们说的JDBC。
(3)什么是JDBC?
- JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。
二、JDBC底层由来、使用。
(1)JDBC出自。
- 早期是sun公司提供的(包括之前jdk也是),但现在被oracle公司收购并提供。
(2)当今的数据库产品。(很多)
mysql。
oracle。
sqlServer。
…
(3)JDBC诞生原因。
- java程序与数据库通信——>不同数据库产品,通信方式不一样,数据库产品商业化,不开源。所以jdk无法编写具体的实现代码,然后连接数据库。
- 不同数据库产品,连接技术不一样。如果让jdk实现jdbc的代码——>有新的数据库产品,jdk就要频繁的修改代码,实现连接新的数据库产品。这种方式很麻烦!
- 早期SUN公司的天才们想编写一套可以连接天下所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了!
- 后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是一组接口——JDBC),并提供连接数据库的协议标准。
- 然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司的数据库服务器的API出现。
(4)Java程序(客户端)连接不同的数据库产品的解决方案。
- SUN公司提供的规范(接口)命名为JDBC。而各个厂商提供的,遵循了JDBC规范的,可以访问自己数据库的API被称之为驱动!
- JDK中的JDBC只是提供一套标准——>提供了接口 (只有方法的签名,没有方法实现)
- 具体某个数据库的连接的实现代码,由数据库厂家或第三方公司提供(数据库驱动)。
(5)如何使用不同的数据库产品?
- 如果连接某个数据库,需要下载对应数据库产品的JDBC的实现类(数据库驱动)。
- 也就是导入对应的jar包(一堆class的压缩文件)。
- 程序员写代码的好处——不需要大幅度改Java代码,只需要修改对应的数据库驱动。我们调用的具体实现类的方法。而不是调用接口。
注意:JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!
其中每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。
当然还有第三方公司专门为某一数据库提供驱动,这样的驱动往往不是开源免费的。
三、JDBC核心API。
(1)JDBC核心API位于哪个包。
- 位于java.sql包下。
(2)以生活的案例需要那些类。
- 把数据库看成——仓库(存放原材料)——>这里数据库就是存储数据。
- 把Java程序看成——工厂。工厂单独作为一个客户端。
- 工厂与仓库之间有一条"路"。工厂与仓库进行连接。Java中就是("路"——>核心对象"Connection")。
- 工厂去取原材料,从工厂出发(需要"出库单"——>程序中对应sql语句)。然后需要用("车"——>核心对象"Statement")。拿着"出库单"到仓库取("原材料"——>查询:sql执行结果集——>核心对象"ResultSet")。如果是增、删、改操作,就需要返回受影响的行数。
(3)JDBC核心API。
- JDBC中的核心类有:DriverManager(数据库驱动管理)、Connection、Statement,和ResultSet。
1、DriverManger(驱动管理器)。
- 注册驱动:这可以让JDBC知道要使用的是哪个驱动。(如mysql)
- 获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。
2、Connection对象。
- 表示连接,与数据库的通讯都是通过这个对象展开的。
- Connection最为重要的一个方法就是用来获取Statement对象。
- 也就是有一个"路"Connection——>就可以创建一个"车"Statement。
3、Statement对象。
- 是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句。
- void executeUpdate(String sql):执行更新操作(insert、update、delete等)。
- ResultSet executeQuery(String sql):执行查询操作,数据库在执行查询后会把查询结果,查询结果就是ResultSet。
- 如果是增、删、改返回的是影响的行数(row)。
- 查询的sql返回的查询的结果集(ResultSet)
4、ResultSet对象。
- 表示查询结果集,只有在执行查询操作后才会有结果集的产生。
- 结果集是一个二维的表格,有行有列。操作结果集要学习移动ResultSet内部的“行光标”,以及获取当前行上的每一列上的数据。
- boolean next():使“行光标”移动到下一行,并返回移动后的行是否存在。
- XXX getXXX(int col):获取当前行指定列上的值,参数就是列数,列数从1开始,而不是0。
- 获取返回的表的数据(一行一行获取)
- 返回是否有下一行,返回false就是到底了(结束)。
- next()是指向数据表的表头行,一行一行往下指向。
- 当next()移动到某一行时,它就可以拿对应这一行的各个列的数据。(有不同类型的)
- 一堆getXXX()方法。其中对应的是两个重载方法。getXXX(String)、getXXX(int)。
- 其中"String":是根据列的名字查询。如果查询时写的是别名,就要写别名,而不是写本身的列名。
- "int"是根据列的索引查询(从1开始。如1:表示第一列(第一个单元格的数据))
等等还有很多,可以自己去文档查找对应的方法。
四、JDBC的基本编码步骤。
1、导jar包。
2、导入数据库驱动——>加载驱动类。
- 告诉java程序连接那个数据库产品。
- Class.forName(“类名”);
3、得到Connection对象。
- 得到Connection对象。使用驱动管理器类DriverManager的static方法getConnection()。
- Connection conn = DriverManager.getConnection("参数1","参数2","参数3");
- 参数1:数据库连接地址。(jdbcUrl)
- 其中jdbcUrl的组成部分:1、jdbc协议。2、数据库类型。(产品)3、数据库地址。(服务器ip:端口)4、其他部分。
- 如:Connection 对象= DriverManager.getConnection("jdbc:mysql://localhost:3306/test666?useSSL=false","root","123");
- 参数2:用户名。(username)
- 参数3:密码。(password)
4、编写sql。
- 注意写法!!
- Statement中只能写"拼接"sql——>编写复杂、容易出错、可读性差、会出现安全问题(sql攻击、sql注入)!
5、创建Statement对象。
- 使用Connection得到Statement对象
- Connection对象.createStatement();
6、使用Statement对象对数据库进行增删改查操作。
- 如果是查询,得到ResultSet结果集——>解析数据(每一行每一列数据)。
- 如果是增、删、改,得到受影响行数(int)。
7、最后关闭资源。
(倒序关闭——>"后创建的先关闭,先创建的后关闭")
- ResultSet对象。
- Statement对象。
- Connection对象。