jdbc培训课件.ppt

上传人:rrsccc 文档编号:10752516 上传时间:2021-06-02 格式:PPT 页数:28 大小:146KB
返回 下载 相关 举报
jdbc培训课件.ppt_第1页
第1页 / 共28页
jdbc培训课件.ppt_第2页
第2页 / 共28页
jdbc培训课件.ppt_第3页
第3页 / 共28页
jdbc培训课件.ppt_第4页
第4页 / 共28页
jdbc培训课件.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《jdbc培训课件.ppt》由会员分享,可在线阅读,更多相关《jdbc培训课件.ppt(28页珍藏版)》请在三一文库上搜索。

1、jdbc培训课件,JDBC,数据库应用,jdbc培训课件,简介,JDBC(Java Data Base Connectivity) 1996年,sun公司提出。是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序 用处:和数据可建立连接,发送SQL语句,处理数据库返回的结果集,jdbc培训课件,JDBC主要完成的工作,1. 注册JDBC驱动程序 2.建立与数据库的连接 3.使用SQL语句进行数据库操作 4.关闭相关连接,jdbc培训课

2、件,注册JDBC驱动程序,Class.forname(“com.mysql.jdbc.Driver”);常用 Class.forname(“com.microsofe.sqlserver.jdbc.SQLServerDriver”);常用 DriverManager.registerDriver(com.mysql.jdbc.Driver);会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖 System.setProperty(“jdbc.drivers”, “driver1: driber2”);虽然不会对具体的驱动类产生依赖,但注册不太方便,所以很少使用 驱

3、动类型:JDBC-ODBC桥+ODBC驱动程序;本地API;JDBC网络纯Java驱动程序;本地协议纯Java驱动程序,jdbc培训课件,建立与数据库的连接,Connection con = DriverManger.getConnection(url, username, password); url格式: JDBC:子协议:子名称/主机名:端口/数据库名 如:mysql本地数据库:jdbc:mysql:/localhost:3306/数据库名字 Username,Password为数据库的登陆名和密码,使用“属性名=属性值”的方式 如:Connection con = DriverMana

4、ger.getConnection(jdbc:mysql:/localhost:3306/test, root, root);,jdbc培训课件,使用SQL进行数据库操作,使用JDBC执行SQL语句前,必须先创建Statement对象。调用Conection对象的createStatement()方法,该方法返回一个Statement对象 使用如下方式: Statement stmt = con.createStatement(); 使用statement对象发送SQL语句,jdbc培训课件,使用SQL进行数据库操作,对数据库的操作主要有:添加,删除,修改,查看四种。 添加: Sql语句:in

5、sert into 表名(field1 , field2) values(value1,value2); 如:insert into student(id , name) values(“001”,”李明”); 发送sql语句:statement.executeUpdate(sql); 返回的结果:int(1代表成功,0代表失败),jdbc培训课件,使用SQL进行数据库操作,删除: SQL语句:delete from 表名where 范围 如:delete from student where id=001; 发送sql语句:statement.executeUpdate(sql); 返回的结

6、果:int(1代表成功,0代表失败),jdbc培训课件,使用SQL进行数据库操作,修改: SQL语句:update 表名set field1=value1 where 范围 如:update student set name=李四 where id=001; 发送sql语句:statement.executeUpdate(sql); 返回的结果:int(1代表成功,0代表失败),jdbc培训课件,使用SQL进行数据库操作,查看: SQL语句:select * from 表名 where 范围 如:select * from student where id=001; 发送sql语句:state

7、ment.executeQuery(sql); 返回的结果:resultSet (结果集) resultSet .next()查找下一个;resultSet. getString(id)取出一个对象的属性,jdbc培训课件,使用SQL进行数据库操作,总结: 增、删、改用Statement.executeUpdate来完成,返回整数(匹配的记录数),这类操作相对简单。 查询用Statement.executeQuery来完成,返回的是ResultSet对象,ResultSet中包含了查询的结果;查询相对与增、删、改要复杂一些,因为有查询结果要处理。,jdbc培训课件,关闭相关连接,打开的资源使用

8、完成后应该关闭 resultSet.close(); Statement.close(); Connection.close(); 注意:资源关闭的顺序应该和打开的顺序相反 打开的资源必须关闭,不然会造成对资源的浪费,并且再次连接时会无法连接,jdbc培训课件,SQL注入,PreparedStatement和Statement,在SQL中包含特殊字符或SQL的关键字(如: or 1 or )时Statement将出现不可预料的结果(出现异常或查询的结果不正确),可用PreparedStatement来解决。 PreperedStatement(从Statement扩展而来)相对Statemen

9、t的优点: 1.没有SQL注入的问题。 2.Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。 3.数据库和驱动可以对PreperedStatement进行优化(只有在相关联的数据库连接没有关闭的情况下有效)。,jdbc培训课件,数据类型,详细信息见java.sql.Types 几种特殊且比较常用的类型 1.DATA,TIME,TIMESTAMP date,time,datetime 存:ps.setDate(i,d); ps.setTime(i,t); ps.setTimestamp(i, ts); 取:rs.getDate(i); rs.getTime(i); rs.g

10、etTimestamp(i); 2.CLOB text 存:ps.setCharacterStream(index, reader, length); ps.setString(i, s); 取:reader = rs. getCharacterStream(i); reader = rs.getClob(i).getCharacterStream(); string = rs.getString(i);,jdbc培训课件,数据类型,3.BLOB blob 存:ps.setBinaryStream(i, inputStream, length); 取:rs.getBinaryStream(i)

11、; rs.getBlob(i).getBinaryStream();,jdbc培训课件,一个简单用户相关的数据访问层,J2EE三层架构简介 表示层 、业务逻辑层、数据访问层,三层之间用接口隔离。 定义domain对象User,定义存取用户的接口 用JDBC实现接口 用配置文件(properties)和反射实现与具体类的耦合,jdbc培训课件,事务(ACID),原子性(atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。 一致性(consistency):在事务处理执行前后,数据库是一致的(两个账户要么都变,或者都不变)。 隔离性(isolcation):一个事务

12、处理对另一个事务处理没有影响。 持续性(durability):事务处理的效果能够被永久保存下来 。 connection.setAutoCommit(false);/打开事务。 mit();/提交事务。 connection.rollback();/回滚事务。,jdbc培训课件,隔离级别多线程并发读取数据时的正确性,connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); V:可能出现,X:不会出现,jdbc培训课件,存储过程,存储过程 CallableStatement(从PreperedState

13、ment扩展来) cs = connection.prepareCall(“call psname(?,?,?)”); cs.registerOutParameter(index, Types.INTEGER); cs.setXXX(i, xxxx); cs.executeUpdate(); int id=cs.getInt(index);,jdbc培训课件,其他的几个API,Statement.getGeneratedKeys() PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATE

14、D_KEYS); ps.executeUpdate(); ResultSet rs = st.getGeneratedKeys();rs.getInt(1); 批处理,可以大幅度提升大量增、删、改的速度。 PreparedStatement.addBatch(); PreparedStatement.executeBatch();,jdbc培训课件,其他的几个API,可滚动的结果集 Statement st = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); Res

15、ultSet rs = st.executeQuery(sql); rs.beforeFirst(); rs.afterLast();rs.first();rs.isFirst();rs.last();rs.isLast(); rs.absolute(9);rs.moveToInsertRow();,jdbc培训课件,DatabaseMetaData,DatabaseMetaData meta = connection.getMetaData(); 通过DatabaseMetaData可以获得数据库相关的信息如:数据库版本、数据库名、数据库厂商信息、是否支持事务、是否支持某种事务隔离级别,是否

16、支持滚动结果集等。,jdbc培训课件,ResultSetMetaData,ResultSetMetaData meta = rs.getMetaData(); 通过ResultSetMetaData可以获得结果有几列、各列名、各列别名、各列类型等。 可以将ResultSet放入Map(key:列名 value:列值)。 用反射ResultSetMetaData将查询结果读入对象中(简单的O/RMapping) 1)让SQL语句中列别名和要读入的对象属性名一样; 2)通过ResultSetMetaData获得结果列数和列别名; 3)通过反射将对象的所有setXxx方法找到; 4)将3)找到的方法

17、setXxx和2)找到的列别名进行匹配(即方法中的xxx于列别名相等); 5)由上一步找到的方法和列别名对应关系进行赋值 Method.invoke(obj, rs.getObject(columnAliasName);,jdbc培训课件,数据源和连接池,DataSource用来取代DriverManager来获取Connection; 通过DataSource获得Connection速度很快; 通过DataSource获得的Connection都是已经被包裹过的(不是驱动原来的连接),他的close方法已经被修改。 一般DataSource内部会用一个连接池来缓存Connection,这样可

18、以大幅度提高数据库的访问速度; 连接池可以理解成一个能够存放Connection的Collection; 我们的程序只和DataSource打交道,不会直接访问连接池;,jdbc培训课件,一个简单的数据源实现,使用装饰模式的Connection(核心代码) class MyConnection implements Connection private Connection realConn; private LinkedList connPool; MyConnection(Connection rConn, LinkedList cPool) this.realConn=rConn; th

19、is.connPool=cPool; public void close() this.connPool.addLast(this);/.,jdbc培训课件,一个简单的数据源实现,DataSource(核心代码) class MyDataSource implements DataSource private LinkedList connPool = new Vector(); public Connection getConneciton () if(this.connPool.size()0) return this.connPool.removeFirst(0); return cre

20、ateConnection(); ,jdbc培训课件,一个简单的数据源实现,private Connection createConnection() Connection realConn = DriverManager.getConnection(); Connection myConn = new MyConnection(realConn,this.connPool); return myConn; /. ,jdbc培训课件,常用的开源实现DBCP,使用DBCP必须用的三个包: commons-dbcp-1.2.1.jar, commons-pool-1.2.jar, commons-collections-3.1.jar。 Java API: BasicDataSourceFactory.createDataSource( properties);,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1