




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 Java入门 2 4Java数据库技术 4 1MySQL和JDBC4 2使用JDBC4 3实例 3 4 1MySQL和JDBC概述 MySQL是一个关系型数据库管理系统 由瑞典MySQLAB公司开发 目前属于Oracle旗下公司 MySQL最流行的关系型数据库管理系统 在WEB应用方面MySQL是最好的RDBMS RelationalDatabaseManagementSystem 关系数据库管理系统 应用软件之一 对于一般的个人使用者和中小型企业来说 MySQL提供的功能绰绰有余 4 创建数据库test createdatabasetest创建表hero CREATETABLEhero idint 11 AUTO INCREMENT namevarchar 30 hpfloat damageint 11 PRIMARYKEY id DEFAULTCHARSET utf8 插入一条记录盖伦到表中 insertintoherovalues null 盖伦 616 100 查询所有数据 select fromhero统计表中有多少条数据 selectcount fromhero显示前5条数据 select fromherolimit0 5修改 updateherosethp 818whereid 1删除 deletefromherowhereid 1 操作语句 5 4 1MySQL和JDBC JDBC JavaDatabaseConnection Java数据库连接 是一种用于执行SQL语句的JavaAPI 应用程序设计接口 它由一些Java语言写的类和界面组成 JDBC提供了一种标准的应用程序设计接口 使得开发人员使用Java语言开发完整的数据库应用程序变得极为简单 通过JDBC 开发人员几乎可以将SQL语句传递给任何一种数据库 而无需为各种数据库编写单独的访问程序 JDBC可以自动将SQL语句传递给相应的数据库管理系统 6 访问MySQL数据库需要用到第三方的类 这些第三方的类 都被压缩在一个叫做Jar的文件里 为了代码能够使用第三方的类 需要为项目导入mysql的专用Jar包 mysql connector java 5 0 8 bin jar通常都会把项目用到的jar包统一放在项目的lib目录下导包步骤 右键project property javabuildpath libaries addexternaljars 7 packagejdbc publicclassTestJDBC publicstaticvoidmain String args 初始化驱动try 驱动类com mysql jdbc Driver 就在mysql connector java 5 0 8 bin jar中 如果忘记了第一个步骤的导包 就会抛出ClassNotFoundExceptionClass forName com mysql jdbc Driver System out println 数据库驱动加载成功 catch ClassNotFoundExceptione TODOAuto generatedcatchblocke printStackTrace 初始化驱动通过Class forName com mysql jdbc Driver 初始化驱动类com mysql jdbc Driver就在mysql connector java 5 0 8 bin jar中 8 JDBC扩展了Java的功能 例如在Applet中应用JDBC 可以实现与远程数据库的连接 实现不同平台数据库之间的对话 简单地说 JDBC完成下面三个操作 1 与一个数据库建立连接 Connectioncon DriverManager getConnection jdbc odbc CallCenter sa 2 向数据库发送SQL语句 stmt con createStatement rs stmt executeQuery SELECTCID CPinfromtCustomerWHERECID z1 9 3 处理数据库返回的结果 while rs next StringtheInt rs getString CID Stringstr rs getString CPin 10 4 2使用JDBC JDBC的接口分为两个层次 一个是面向程序开发人员的JDBCAPI 另外一个是底层的JDBCDriverAPI JDBCAPI被描述成为一组抽象的Java接口 应用程序可以对某个数据库打开连接 执行SQL语句并且处理结果 最重要的接口如下 java sql DriverManager 处理驱动的调入并且对产生新的数据库连接提供支持 java sql Connection 代表对特定数据库的连接 java sql Statement 代表一个特定的容器 以对一个特定的数据库执行SQL语句 java sql ResultSet 控制对一个特定语句的行数据的存取 11 其中java sql Statement又有两个子类型 1 java sql PreparedStatement 用于执行预编译的SQL语句 2 java sql CallableStatement 用于执行对一个数据库内嵌过程的调用 JDBCDriverAPI是指java sql Driver接口 封装了不同数据库的驱动程序 像Access Foxpro SQLServer等 由于它是数据库底层处理 所以必须提供对java sql Connection java sql Statement java sql PreparedStatement和java sql ResultSet的实现 12 packagejdbc importjava sql Connection importjava sql DriverManager importjava sql SQLException publicclassTestJDBC publicstaticvoidmain String args try Class forName com mysql jdbc Driver 建立与数据库的Connection连接 这里需要提供 数据库所处于的ip 127 0 0 1 本机 数据库的端口号 3306 mysql专用端口号 数据库名称how2java 编码方式UTF 8 账号root 密码admin 连接数据库 13 接上面的代码Connectionc DriverManager getConnection jdbc mysql 127 0 0 1 3306 test characterEncoding UTF 8 root admin System out println 连接成功 获取连接对象 c catch ClassNotFoundExceptione TODOAuto generatedcatchblocke printStackTrace catch SQLExceptione TODOAuto generatedcatchblocke printStackTrace 14 packagejdbc importjava sql Connection importjava sql DriverManager importjava sql SQLException importjava sql Statement publicclassTestJDBC publicstaticvoidmain String args try Class forName com mysql jdbc Driver Statement是用于执行SQL语句的 比如增加 删除 15 Connectionc DriverManager getConnection jdbc mysql 127 0 0 1 3306 test characterEncoding UTF 8 root admin 注意 使用的是java sql Statement 不要不小心使用到 com mysql jdbc Statement Statements c createStatement System out println 获取Statement对象 s catch ClassNotFoundExceptione TODOAuto generatedcatchblocke printStackTrace catch SQLExceptione TODOAuto generatedcatchblocke printStackTrace 16 packagejdbc importjava sql Connection importjava sql DriverManager importjava sql SQLException importjava sql Statement publicclassTestJDBC publicstaticvoidmain String args try Class forName com mysql jdbc Driver Connectionc DriverManager getConnection jdbc mysql 127 0 0 1 3306 test characterEncoding UTF 8 root admin s execute执行sql语句执行成功后 用mysql front进行查看 明确插入成功 17 Statements c createStatement 准备sql语句 注意 字符串要用单引号 Stringsql insertintoherovalues null 提莫 313 0f 50 s execute sql System out println 执行插入语句成功 catch ClassNotFoundExceptione TODOAuto generatedcatchblocke printStackTrace catch SQLExceptione TODOAuto generatedcatchblocke printStackTrace 执行SQL语句之前要确保数据库test中有表hero的存在 如果没有 需要事先创建表 18 在回收垃圾语句后面加上下面语句finally 数据库的连接时有限资源 相关操作结束后 养成关闭数据库的好习惯 先关闭Statementif s null try s close catch SQLExceptione TODOAuto generatedcatchblocke printStackTrace 后关闭Connectionif c null try c close catch SQLExceptione TODOAuto generatedcatchblocke printStackTrace 数据库的连接是有限资源 相关操作结束后 养成关闭数据库的好习惯先关闭Statement后关闭Connection 19 packagejdbc importjava sql Connection importjava sql DriverManager importjava sql SQLException importjava sql Statement publicclassTestJDBC publicstaticvoidmain String args try Class forName com mysql jdbc Driver catch ClassNotFoundExceptione e printStackTrace 使用try with resource的方式自动关闭连接 20 try Connectionc DriverManager getConnection jdbc mysql 127 0 0 1 3306 test characterEncoding UTF 8 root admin Statements c createStatement Stringsql insertintoherovalues null 提莫 313 0f 50 s execute sql catch SQLExceptione TODOAuto generatedcatchblocke printStackTrace 21 Stringsql insertintoherovalues null 提莫 313 0f 50 Stringsql deletefromherowhereid 5 Stringsql updateherosetname name5 whereid 3 增 删 改语句 22 packagejdbc importjava sql Connection importjava sql DriverManager importjava sql ResultSet importjava sql SQLException importjava sql Statement publicclassTestJDBC publicstaticvoidmain String args try Class forName com mysql jdbc Driver catch ClassNotFoundExceptione e printStackTrace try Connectionc DriverManager getConnection jdbc mysql 127 0 0 1 3306 test characterEncoding UTF 8 root admin Statements c createStatement executeQuery执行SQL查询语句 23 Stringsql select fromhero 执行查询语句 并把结果集返回给ResultSetResultSetrs s executeQuery sql while rs next intid rs getInt id 可以使用字段名Stringname rs getString 2 也可以使用字段的顺序floathp rs getFloat hp intdamage rs getInt 4 System out printf d t s t f t d n id name hp damage 不一定要在这里关闭ReultSet 因为Statement关闭的时候 会自动关闭ResultSet rs close catch SQLExceptione TODOAuto generatedcatchblocke printStackTrace 在取第二列的数据的时候 用的是rs get 2 而不是get 1 这个是整个Java自带的api里唯二的地方 24 packagejdbc importjava sql Connection importjava sql DriverManager importjava sql PreparedStatement importjava sql SQLException publicclassTestJDBC publicstaticvoidmain String args try Class forName com mysql jdbc Driver catch ClassNotFoundExceptione e printStackTrace PreparedStatement也是用来执行sql语句的与创建Statement不同的是 需要根据sql语句创建PreparedStatement除此之外 还能能够通过设置参数 指定相应的值 而不是Statement那样使用字符串拼接 25 Stringsql insertintoherovalues null try Connectionc DriverManager getConnection jdbc mysql 127 0 0 1 3306 test characterEncoding UTF 8 root admin 根据sql语句创建PreparedStatementPreparedStatementps c prepareStatement sql 设置参数ps setString 1 提莫 ps setFloat 2 313 0f ps setInt 3 50 执行ps execute catch SQLExceptione TODOAuto generatedcatchblocke printStackTrace 使用参数设置 可读性好 不易犯错有预编译机制 性能比Statement更快防止SQL注入式攻击 26 packagejdbc importjava sql Connection importjava sql DriverManager importjava sql SQLException importjava sql Statement publicclassTestJDBC publicstaticvoidmain String args try Class forName com mysql jdbc Driver catch ClassNotFoundExceptione e printStackTrace try Connectionc DriverManager getConnection jdbc mysql 127 0 0 1 3306 test characterEncoding UTF 8 root admin Statements c createStatement 有事务的前提下 在事务中的多个操作 要么都成功 要么都失败 使用事务在事务中的多个操作 要么都成功 要么都失败通过c setAutoCommit false 关闭自动提交使用mit 进行手动提交 27 c setAutoCommit false 加血的SQLStringsql1 updateherosethp hp 1whereid 22 s execute sql1 减血的SQL 不小心写错写成了updata 而非update Stringsql2 updataherosethp hp 1whereid 22 s execute sql2 手动提交mit catch SQLExceptione TODOAuto generatedcatchblocke printStackTrace 28 packagecharactor publicclassHero 增加id属性publicintid publicStringname publicfloathp publicintdamage ORM ObjectRelationshipDatabaseMapping对象和关系数据库的映射简单说 一个对象 对应数据库里的一条记录例 根据id返回一个Hero对象先构建一个Hero类 29 packagejdbc importjava sql Connection importjava sql DriverManager importjava sql ResultSet importjava sql SQLException importjava sql Statement importcharactor Hero publicclassTestJDBC publicstaticHeroget intid Herohero null try Class forName com mysql jdbc Driver catch ClassNotFoundExceptione e printStackTrace try Connectionc DriverManager getConnection jdbc mysql 127 0 0 1 3306 test characterEncoding UTF 8 root admin Statements c createStatement Stringsql select fromherowhereid id 30 ResultSetrs s executeQuery sql 因为id是唯一的 ResultSet最多只能有一条记录 所以使用if代替whileif rs next hero newHero Stringname rs getString 2 floathp rs getFloat hp intdamage rs getInt 4 hero name name hero hp hp hero damage damage hero id id catch SQLExceptione TODOAuto generatedcatchblocke printStackTrace returnhero publicstaticvoidmain String args Heroh get 22 System out println h name 31 packagejdbc importjava util List publicinterfaceDAO 增加publicvoidadd Tt 修改publicvoidupdate Tt 删除publicvoiddelete intid 获取publicTget intid 查询publicListlist 分页查询publicListlist intstart intcount DAO DatabaseAccessObject数据库访问对象实际上就是运用了练习 ORM中的思路 把数据库相关的操作都封装在这个类里面 其他地方看不到JDBC的代码 32 packagejdbc importjava sql Connection importjava sql DriverManager importjava sql PreparedStatement importjava sql ResultSet importjava sql SQLException importjava sql Statement importjava util ArrayList importjava util List importcharactor Hero publicclassHeroDAO 把驱动的初始化放在了构造方法HeroDAO里 因为驱动初始化值需要执行一次 所以放在这里更合适 其他方法里也不需要写了 代码更简洁 提供了一个getConnection方法返回连接 所有的数据库操作都需要事先拿到一个数据库连接Connection 以前的做法每个方法里都会写一个 如果要改动密码 那么每个地方都需要修改 通过这种方式 只需要修改这一个地方就可以了 代码变得更容易维护 而且也更加简洁 33 publicHeroDAO try Class forName com mysql jdbc Driver catch ClassNot
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消费电子盖板玻璃产线项目经济效益和社会效益分析报告
- 废矿石废矿产品综合利用项目社会稳定风险评估报告
- 2025年全国道路运输从业人员真题及答案
- 2025年机动车授权签字人考试题库及答案
- 2025年安全生产月竞赛题(含答案)
- 资本市场生态构建-洞察与解读
- 综合客运枢纽建设项目技术方案
- 2025年食品安全考试题库(含答案)
- 2025贵州省专业技术人员公需科目大数据培训考试答案
- 城乡供水一体化项目环境影响报告书
- 洁净灯具行业跨境出海战略研究报告
- 碳酸钙在生物医药中的应用-洞察分析
- 项目公司廉政风险点及防范措施
- 无人驾驶车辆在医疗物资运输中的应用研究-洞察分析
- 暴雨过后工地复工复产方案
- TNBSIA 001-2024 建筑设备一体化管控平台建设技术要求
- JT-T-848-2013公路用复合隔离栅立柱
- 《客舱安全与应急处置》-课件:其他辅助设备
- chap5-高性能混凝土的性能-物理力学性能
- 县河长制方案
- 基于韧性原则的乡村低密度住宅规划体系构建
评论
0/150
提交评论