欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    达内学习心得:JDBC总结:系列笔记之四.doc

    • 资源ID:78974074       资源大小:33KB        全文页数:7页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    达内学习心得:JDBC总结:系列笔记之四.doc

    达内学习心得:JDBC总结:系列笔记之四参赛学员:常彦博获奖奖项:二等奖 说明:(又花了几个小时把JDBC笔记转成了word版!笔记内容真实,都是课上及TTS上内容,不是从网上复制粘贴来的!同时也不会去刷点击率!不想评分的按F5刷新页面即可!不用选择分数,一旦选择就不能改了!也可以拿到电子版后再来评分!Q在下)1)此笔记为本人系列笔记之一:Java、Oracle、PL/SQL、JDBC、XML、HTML、CSS、JavaScript、Servlet2)笔记内容整理了:JDBC(范传奇老师主讲,占笔记内容100%)。3)此笔记已打印出成品,一共19页!(不包括目录)。排版格式大部分按照毕业论文做的!有目录、章节、页眉、页脚、缩进、一二三级标题等。同时排版格式也照顾到了双面打印,所以电子版可直接双面打印,不需要调格式。因此,本人的系列笔记平均花费20个小时以上(笔记纯手工输入)!每天的总结、排版很辛苦!之前有很多朋友拿到了我分享的笔记,因此还望各位尊重他人劳动成果(你懂得)。4)评选系统由于不能上传word版,所以格式、布局上不太好看,如文中的注意事项有特殊项目符号,这里显示的是字母u和字母v,有的图片也不能显示!内容太长,老是提交失败!只能一点一点发!5)希望大家多多支持,评选结束后,我会找时间统一分享给大家所有的笔记!之前拿到过的朋友,也可以再要,因为修改、更新了很多内容。目 录 一、 JDBC概述 11.1 什么是JDBC 11.2什么是驱动 11.3 SQL lite11.4如何使用Java连接某种数据库 11.5连接数据库并操作 11.6连接数据库时常见的错误 1二、 JDBC核心API 22.1 Connection22.2 Statement22.3 ResultSet22.4 DriverManager22.5 UUID32.6案例:使用JDBC连接数据库,并操作SQL语句 32.7案例:通过JDBC创建表 42.8案例:使用JDBC向表中插入数据 42.9遍历Student_chang表 5三、 JDBC核心API:PreparedStatement 63.1Statement的缺点 63.2PreparedStatement的优点 63.3案例详见第五章StudentDAO类 6四、 Connection封装 7五、 DAO85.1持久类封装 85.2 DAO层 85.3 Properties类 85.4案例:注册系统 8六、 批处理126.1批处理的优点 126.2 JDBC批处理API 126.3案例:详见8.4案例step7 12七、 事务处理137.1事务特性ACID 137.2 JDBC中对事务的支持(API) 13八、 DAO事务封装 148.1ThreadLocal原理 148.2原理图 148.3ThreadLocal核心API 148.4案例:登录系统(使用ThreadLocal实现连接共享) 14九、 分页查询179.1分页查询的基本原理 179.2为何使用分页查询 179.3 Oracle分页查询SQL语句 179.4 MySQL分页查询SQL语句 179.5“假”分页 179.6案例:分页查询 18 一、JDBC概述1.1 什么是JDBC1)Java的设计者希望使用相同的方式访问不同的数据库。2)JDBC是Java用于统一连接数据库并操作数据库的一组通用接口定义(即通过一系列接口定义了访问数据库的通用API)。3)JDBC是连接数据库的规范,不同的数据库厂商若想让Java语言可以对其操作,就需要实现一组类,这组类需要实现Java提供的这组用于连接数据库的接口,并实现其中定义的相关方法。那么不同的数据库厂商根据各自数据库的特点,去提供对JDBC的实现(实现类包),那么这组类就是该数据库的驱动包了。4)原理图:1.2什么是驱动简单的说就是让软件知道如何去操作硬件。1.3 SQL lite是轻量级的数据库,常用于嵌入式。1.4如何使用Java连接某种数据库需要两个部分:1)使用JDBC连接数据库(导入某数据库的.jar包)。 2)提供对该数据库的驱动包(使用静态方法Class.forName注册驱动)。1.5连接数据库并操作1)打开与数据库的连接(使用DriverManager.getConnection获取连接)。2)执行SQL语句(使用Statement或者PreparedStatement)。3)得到结果。1.6连接数据库时常见的错误1)报错ClassNotFoundException则有两种情况:驱动包没导入。Class.forName()中的字符串拼写有误。2)报错port number,应注意:连接数据库时输入数据库路径时没有添加端口号。Oracle数据库的完整写法应为:jdbc:oracle:thin:IP地址:端口号:数据库名u 注意事项:Oracle数据库默认端口号1521。MySql数据库默认端口号为3306二、JDBC核心API2.1 Connection接口,需导入java.sql.Connnection包,与特定数据库进行连接(会话)。2.2 Statement接口,需导入java.sql.Statement包,用于执行静态SQL语句并返回它所生成结果的对象。1)ResultSet executeQuery(String sql) throws SQLException方法:执行给定的SQL语句(通常为静态SQL SELECT语句),该语句返回单个ResultSet对象。 2)boolean execute(String sql) throws SQLException方法:执行给定的SQL语句,该语句可能返回多个结果。如果第一个结果为ResultSet对象,则返回true;如果其为更新计数或者不存在任何结果,则返回false。详细介绍请看2.6案例注释。3)int executeUpdate(String sql) throws SQLException方法:执行给定SQL语句,该语句可能为INSERT、UPDATE、DELETE(DML语句),或者不返回任何内容的DDL语句。返回值:对于数据操作语句(DML语句),返回行计数。对于DDL语句,返回0。4)boolean execute(String sql)方法:返回结果为true、false,常用与执行表级操作的SQL语句,如建表、删表等,创建表若失败实际上是会直接抛出异常的。false:为建表成功的标志。5)exectue()方法:原则上可以执行任意SQL语句。返回true:若执行结果为一个结果集(ResultSet)。返回false:为其他信息(如影响表数据总条数等)。所以我们通常不会使用execute去执行查询语句。6)int executeUpdate(String sql) throws SQLException方法:返回值int,返回值为当前执行的SQL语句影响了数据库数据的总条数;该方法常用与执行insert、update、delete语句。7)在底层一定会用到网络Socket和流,但我们不用关心使用字符还是字节接收,都由Statement做了。2.3 ResultSet接口,表示数据库结果集的数据表(很像一个集合),通常通过执行查询数据库的语句生成。1)ResultSet特点:按行遍历,按字段取值。2)它的next()方法包含了是否有下一条记录的hasnext()方法。3)按字段取值时,getString(int)方法中的int,代表结果集的第几列,u 注意事项:这里的int从1开始,和Java对索引的习惯不同。2.4 DriverManager它是管理一组JDBC驱动程序的类。1)Connection getConnection(String url,String user,String password)方法:静态方法,建立与给定数据库URL的连接(DriverManager试图从已注册的JDBC驱动程序集中选择一个适当的驱动程序)。 2)DriverManager如何知道某种数据库已注册的?例如:oracle.jdbc.driver.OracleDriver类在Class.forName()的时候被载入JVM;而OracleDriver是JDBC中Driver的子类,它被要求在静态初始化的时候要将自身驱动的信息通过DriverManager的静态方法注册进去,这样DriverManager就知道应该如何通过OracleDriver去连接该数据库了。所以之后就可以通过DrvierManager的另一个静态方法:getConnection()来根据之前注册的驱动信息获取连接了: Connection conn=DriverManager.getConnetion("","","");2.5 UUIDUUID为通用唯一标识码(Universally Unique Indentifier)对于大数据量的表来说,UUID是存放ID最好的方式。1)Java提供的支持UUID类:UUID.randomUUID().toString():获得一个36位不重复的字符串。2)Oracle提供的支持函数sys_guid():获取一个32位不重复的字符串。2.6案例:使用JDBC连接数据库,并操作SQL语句/* 连接数据库一定要捕获异常的 */Connection conn=null;/定义在try外面是用于在finally块中关闭它,同时局部变量在使用前,一定要初始化!try/* 与数据库进行连接分为两步:1)注册驱动:不同的数据库实现不尽相同,所以要使用不同数据库厂商提供的驱动包。连接不同数据库,传入的字符串不尽相同,但是目的相同,都是注册驱动。而对于驱动包路径,名字是固定的,基本上不会变的!2)根据数据库的位置(路径)以及用户名和密码进行连接 */Class.forName("oracle.jdbc.driver.OracleDriver");/* 路径:不同数据库连接的路径写法不尽相同,Oracle的写法: jdbc:oracle:thin:HOST:DB_NAME 其中HOST包含两部分:IP地址和端口号;本机则使用localhost或127.0.0.1 */conn=DriverManager.getConnection("jdbc:oracle:thin:192.168.0.20:1521:tarena","jsd1304","jsd1304");/* 使用SQL语句来操作数据库,若想执行SQL语句,我们需要使用一个专门处理SQL语句的类,这个类叫做Statement */Statement state=conn.createStatement();/* user_tables是Oracle用于存储当前用户创建的所有表的信息,其中一个字段叫做table_name用户保存的表名 */String sql="SELECT table_name FROM user_tables"/* 通过Statement执行查询语句,当查询完毕后,数据库会将查询结果返回,Statement会将查询结果存储到ResultSet中 */ResultSet rs=state.executeQuery(sql);while(rs.next()/按行遍历,包含了是否有下一条记录的方法hasnext()/* 按字段取值;整数参数:结果集的第几列。注意:这里从1开始,和Java对索引的习惯不同 */String tableName=rs.getString(1);System.out.println(tableName);/* 底层一定会用到网络socket和流,但我们不用关心使用字符还是字节接收,都由Statement做了 */rs.close();state.close();catch(Exception e)e.printStackTrace();finallyif(conn!=null)try conn.close(); catch (SQLException e) e.printStackTrace();u 注意事项: 养成良好的编码习惯:所有SQL关键字用纯大写,其他内容用纯小写 。2.7案例:通过JDBC创建表Connection conn=null;try/1 注册驱动Class.forName("oracle.jdbc.driver.OracleDriver");/2 打开连接,支持import java.sql.*,但全导入较耗费性能conn=DriverManager.getConnection("jdbc:oracle:thin:192.168.0.20:1521:tarena","jsd1304","jsd1304");/3 创建用于执行SQL语句的StatementStatement state=conn.createStatement();/创建建表语句String sql="CREATE TABLE Student_chang(" +"id varchar2(36) PRIMARY KEY," +"name varchar2(30)," +"age number(2)," +"sex varchar2(2)" +")"/execute()方法详见2.2节if(!state.execute(sql)System.out.println("创建表成功!");elseSystem.out.println("创建失败!"); state.close();catch (Exception e)e.printStackTrace();finallyif(conn!=null) try conn.close(); catch (SQLException e) e.printStackTrace(); 2.8案例:使用JDBC向表中插入数据Connection conn=null;tryClass.forName("oracle.jdbc.driver.OracleDriver");conn=DriverManager.getConnection("jdbc:oracle:thin:192.168.0.20:1521:tarena","jsd1304","jsd1304");Statement state=conn.createStatement();/UUID详见2.5String uuid=UUID.randomUUID().toString();System.out.println(uuid);String sql="INSERT INTO Student_chang VALUES('"+uuid +"','Chang',22,'1')" /或String sql="INSERT INTO Student_chang VALUES(sys_guid(),'chang',23,'1')"/判断insert语句是否成功,看返回值是否大于0,executeUpdate方法详见2.2if(state.executeUpdate(sql)>0)System.out.println("插入数据成功"); state.close();catch(Exception e)e.printStackTrace();finallyif(conn!=null) try conn.close(); catch (SQLException e) e.printStackTrace(); 2.9遍历Student_chang表Connection conn=null;tryClass.forName("oracle.jdbc.driver.OracleDriver");conn=DriverManager.getConnection("jdbc:oracle:thin:192.168.0.20:1521:tarena","jsd1304","jsd1304");Statement state=conn.createStatement();String sql="SELECT * FROM Student_chang"ResultSet rs=state.executeQuery(sql);while(rs.next()String id=rs.getString(1);String name=rs.getString("name");/不知第几列也可写列名int age=rs.getInt("age");String sex=rs.getString(4).equals("1")?"男":"女"System.out.println(id+","+name+","+age+","+sex); rs.close(); state.close();catch(Exception e)e.printStackTrace();finallyif(conn!=null) try conn.close(); catch (SQLException e) e.printStackTrace(); 三、JDBC核心API:PreparedStatement3.1Statement的缺点1)用Statement操作时代码的可读性和可维护性差,编写SQL语句复杂。2)Statement操作SQL语句,每执行一次都要对传入的语句编译一次,效率比较差。3)不安全可能出现SQL注入攻击,详见9.6案例step3。4)扩展:XSS攻击、html代码注入攻击、struts2 OGNL存在可以远程执行底层操作系统命令的漏洞。3.2PreparedStatement的优点1)PreparedStatement实例包含已编译的SQL语句。包含于PreparedStatement对象中的SQL语句可具有一个或多个IN参数。IN参数的值在SQL语句创建时未被指定。该语句为每个IN参数保留一个问号(“?”)作为占位符,不考虑类型。每个问号的值必须在该语句执行之前,通过适当的setString、setInt、setDouble等方法来提供。2)由于PreparedStatement对象已预编译过,所以其执行速度要快于Statement对象。因此,多次执行的SQL语句经常创建为PreparedStatement对象,以提高效率。3)PreparedStatement继承于Statement,其中三种方法:execute、executeQuery、executeUpdate都已被更改为不再需要参数了。因为我们在获取PreparedStatement时已经将SQL语句传入了。所以执行就可以,不需要再传入SQL。4)PreparedStatement可以进行批量处理。5)可以防止SQL注入攻击。u 注意事项:v 使用预编译语句,你传入的任何内容就不会和原来的语句发生任何匹配的关系,只要全使用预编译语句,你就不用对传入的数据作任何的过滤。v 对一个表只作一个操作用PreparedStatement,效率高、方便v 对表进行2种及以上的操作用Statement。3.3案例详见第五章StudentDAO类 五、DAO5.1持久类封装对象关系映射(ORM)使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中。1)表和类对应。2)表中的字段和类的属性对应。3)记录和对象对应。5.2 DAO层1)DAO:数据连接对象(DataAccessObjects)2)作用:将数据库中的数据转化为Java的对象并返回(即读数据),将Java的对象转化为数据库中表的一条数据(即写数据)。3)Java对象在这里就是所谓的实体entity,DAO要达到的目的:对数据库数据的操作面向对象化。4)实体:用Java中的对象去描述数据库中的某表中的某一条记录。比如:Student表有字段id、name、age、sex,则对应的Java类中有Student类,属性有id、name、age、sex5)实体类:用于对应数据库中的表。通常实体类的名字和数据库中表的名字一致。u 注意事项:实体类代表表,属性代表字段,对象代表一条数据。5.3 Properties类用于读取“.properties”文本文件的类,导入java.util.Properties包。1)“.properties”文件是一个纯文本文件,里面定义的内容格式有要求,必须是key=value的形式,并且以行为单位。一行只记录一条数据!2)Properties类可以方便的读取properties文件,并将内容以类似HashMap的形式进行读取。3)db.properties文件里的内容如下: jdbc.driver=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:192.168.0.20:1521:tarena jdbc.user=jsd1304 jdbc.pwd=jsd1304u 注意事项:读取的都是字符串!不用写双引号,无空格!4)getProperty(String key)方法:该方法可以从properties文件中获取数据,如:jdbc.driver=oracle.jdbc.driver.OracleDriver。获取方式是将jdbc.driver以key作为参数调用方法。返回的就是等号右面的值oracle.jdbc.driver.OracleDriver了。

    注意事项

    本文(达内学习心得:JDBC总结:系列笔记之四.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开