【JAVA SE基础篇】72.JDBC介绍和流程
1.JDBC介绍
什么是JDBC?
JDBC是为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成。是java程序与数据库系统通信的标准API。
JDBC API使得开发人员可以使用纯java的方式来连接数据库,并执行操作。
为什么使用JDBC?
sun公司不知道主流数据库的程序代码。无法提供代码连接数据库。因此,sun自己提供api。
凡是想与java连接的数据库,数据库厂商自己必须实现jdbc这套接口。而数据库场厂商的jdbc实现
也就是数据库的数据库驱动。
2.JDBC流程
1.加载Drivet驱动
加载JDBC驱动是通过调用方法java.lang.Class.forName()
加载语句的形式 :
Class.forName(“oracle.JDBC.driver.OracleDriver”);//使用Oracle的JDBC驱动程
Class.forName(“com.microsoft.JDBC.sqlserver.SQLServerDriver”);//使用SQL Server的JDBC驱 动程序
Class.forName(“com.ibm.db2.JDBC.app.DB2Driver”);//使用DB2的JDBC驱动程序
Class.forName("com.mysql.JDBC.Driver");//使用MySql的JDBC驱动程序
2.创建数据库连接
与数据库建立连接的方法是调用DriverManager.getConnection(String url, String user, String password )方法
DriverManager接口是JDBC的管理层,作用于用户和驱动程序之间。跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。
连接MySql数据库:Connection con= DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");
连接Oracle数据库:Connection con= DriverManager.getConnection("jdbc:oracle:thin:@host:port/database", "user", "password");
注:连接对象内部其实包含了Socket对象,是一个远程的连接。比较耗时!这是Connection对象管理的一个要点!真正开发中,为了提高效率,都会使用连接池来管理连接对象!
3.创建Statement发送命令,发送SQL语句并获取结果
Statement接口:Statement对象用于将 SQL 语句发送到数据库中,或者理解为执行sql语句
有三种 Statement对象:
1.Statement:用于执行不带参数的简单SQL语句;
2.PreparedStatement(最常用)(从 Statement 继承):用于执行带或不带参数的预编译SQL语句;
3.CallableStatement(从PreparedStatement 继承):用于执行数据库存储过程的调用
常用Statement方法:
1.ResultSet executeQuery(String sql):可以执行插入、删除、更新等操作,返回值是执行该操作所影 响的行数
2.boolean execute(String sql):可以执行任意SQL语句,然后获得一个布尔值,表示是否返回 ResultSet
3.int executeUpdate(String sql):执行SQL查询并获取到ResultSet对象
例:
4.处理结果
ResultSet对象是executeQuery()方法的返回值,它被称为结果集,它代表符合SQL语句条件的 所有行,并且它通过一套getXXX方法(这些get方法可以访问当前行中的不同列)提供了对这 些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,且有一个记录指针,指针所指的数据行 叫做当前数据行,我们只能来操作当前的数据行。
我们如果想要取得某一条记录,就要使用 ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。
ResultSet对象自动维护指向当前数据行的游标。每调用一次next()方法,游标向下移动一行。
初始状态下记录指针指向第一条记录的前面,通过next()方法指向第一条记录。循环完毕后 指向最后一条记录的后面。
常用方法:
1.boolean next():将光标从当前位置向下移动一行
2.boolean previous():游标从当前位置向上移动一行
3.void close():关闭ResultSet 对象
4.xxx getxxx(xxx colIndex):以xxx形式获取结果集当前行指定列号值
5.xxx getxxx(String colLabel) 以xxx形式获取结果集当前行指定列名值
例:
5.关闭数据库资源
作为一种好的编程风格,应在不需要Statement对象和Connection对象时显式地关闭它们。
关闭Statement对象和Connection对象的语法形式为: public void close() throws SQLException
用户不必关闭ResultSet。当它的 Statement 关闭、重新执行或用于从多结果序列中获取下一 个结果时,该ResultSet将被自动关闭。
注:
要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,
因为 Statement和ResultSet是需要连接是才可以使用的,
所以在使用结束之后有可能其他的 Statement还需要连接,所以不能先关闭Connection。
一定要将三个trycatch块,分开写!