一、JDBC简介
1. JDBC是桥接模式的设计模式,全称又是JavaDataBase Connectivity,是一种用于执行SQL语句的Java API。
2. JDBC的生命周期:初始化-->加载数据库驱动-->注册数据库驱动-->获取连接会话-->进行数据库操作 -->关闭并释放连接
PS: 注册数据库驱动两种方法:
1.(推荐)class.forName("com.Mysql.jdbc.Driver")
2. DriverManager.registerDriver(com.mysql.jdbc.Driver); (但会造成DriverManager中产生2个一样的驱动,并会对具体驱动类产生依赖)
PS:进行数据库操作的基本步骤:
1.与数据库建立连接
Connection conn=DriverManager.getConnection(url,username,password);
2.向数据库发送sql语句
3.处理发送的sql语句
4.将处理的结果进行返回
返回结果集常用Statement的几个方法:(Statement是数据库命令执行对象)
1. ResultSet executeQuery(String sql):返回ResultSet,产生结果集的语句(多用于select语句)
2.int executeUpdate(String sql):执行select、update、delete语句,返回整数(受影响的行数),create、drop(返回0)
3. boolean execute(String sql): 用于执行返回多个结果集,多个更新计数或二者结合的语句,返回是否有结果集
4.close();
二、JDBC核心接口:
Driver(驱动器)、DriverManager(驱动管理类)、Connection(数据库连接接口)、Statement(执行静态sql语句接口)、PreparedStatement(执行预编译的sql语句接口)、CallableStatement(处理存储过程语句接口)、ResultSet(返回查询结果集接口)
1.java.sql.Connection 负责维护java开发者和数据库之间的会话
该接口常见方法:
1)Statement createStatement() throws SQLException; 返回执行静态sql的Statement对象
2) PreparedStatement prepareStatement(String sql) throws SQLException; 返回sql命令执行器
三、下面是用JDBC进行简单的数据库操作的例子:
用的是eclipse和mysql数据库,用了navicat来查看数据库数据情况。
首先要打开mysql的服务,然后建立一个数据库(这里我起了个名字是simple)
1.建立数据库连接:
2. 通过Statement执行sql语句
3.sql语句:
(1)用Statement执行sql语句:
创建表:
插入操作:
查找操作:
(2)通过PreparedStatement执行sql语句:
四、JDBC进阶(包括事务操作、存储过程操作以及数据库连接池)
1.事务:指一组操作的集合,这组操作作为一个逻辑单元来执行,事务开始于数据库连接,结束于commit或rollback。主要通过Conncetion类的rollback()、commit()和setAutoCommit(boolean autoCommit)等方法进行事务回滚和提交操作。
例:当前事务为:获取连接,创建statemenet,查询当前最大的学生的学号no,并将这个学号值加一,得到新的学号值,并将这个新的记录插入到数据库,最后提交事务,异常则事务回滚。
此处最后可执行finally语句,相继关闭resultset、statement、connection
2.存储过程:
相当于存储在数据库服务器中的函数,它接受输入并返回输出,该函数可在数据库服务器上进行编译,供用户多次使用。
例:存储过程作用:向Student表插入一条新的记录,输入新记录学生的姓名,输出新学生的学号。 存储过程的内部:先获取当前最大的学生好,将其加一作为新的学生号,在将生成的学号和姓名插入到数据库中。
先在数据库中执行存储过程sql语句:(定义的结束符是$$)
再在java代码中执行存储语句:
3.数据库连接池
类似于一个容器,保存各种需要的对象。因此在大量客户并发访问应用服务器时,不用因为要为每个客户提供新的服务对象而不断创建和销毁服务对象,而可以对对象进行复用,提高系统性能。
池有两种:1.用于处理客户提交的任务的,Thread Pool(线程池)
2.客户从池中获取有关的对象进行使用,用Resource Pool(资源池),数据库连接池是资源池。
例子:
首先先建一个有状态的数据连接类MyCon:
创建一个数据库连接池实例类ConPool:
建立MySqlDAO类用于数据库连接的获取与操作:
测试类DBTest0:
输出池中线程状况:
总结:
Statement3种不同对象,都可以执行以下方法:
1. ResultSet executeQuery(String sql):返回ResultSet,产生结果集的语句(多用于select语句)
2.int executeUpdate(String sql):执行select、update、delete语句,返回整数(受影响的行数),create、drop(返回0)
3. boolean execute(String sql): 用于执行返回多个结果集,多个更新计数或二者结合的语句,返回是否有结果集
具体分类如下:
statement:简单的sql语句。每次都会解析/编译SQL,确立并优化数据获取路径。没有预编译
PreParedStatement:字段多,效率高,常用于返回大量数据的select查询语句。(先创建一个PreParedStatement对象,然后执行pstmt.executeQuery(sql) 返回resultset 结果集,再由while(resultset.next())循环读取。preparedStatement包含已经编译的sql语句,所以执行起来速度更快,效率更高。
CallableStatement:常用于调用存储过程
最后要关闭!!!stmt.close();
网友评论