(2.8)-JAVA语言程序设计(第八章 JDBC编程)_第1页
(2.8)-JAVA语言程序设计(第八章 JDBC编程)_第2页
(2.8)-JAVA语言程序设计(第八章 JDBC编程)_第3页
(2.8)-JAVA语言程序设计(第八章 JDBC编程)_第4页
(2.8)-JAVA语言程序设计(第八章 JDBC编程)_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java语言程序设计第八章JDBC编程JDBC驱动程序Java数据库程序设计基本模型Java程序数据库本章总体纲要1、JDBC基本概念2、JDBC常用API介绍3、JDBC编程步骤4、JDBC进行数据管理5、单元测试6、事务7、综合项目——银行管理系统8-1JDBC编程初识1、JDBC概述2、JDBC编程API介绍

(1)DriverManager(2)Connection

(3)Statement

(4)PreparedStatement(5)ResultSet

(6)ResultSetMetaData3、JDBC编程步骤4、DBMS下数据的操作JDBC简介全称:JavaDataBaseConnectivity为多种关系数据库提供统一的访问一次编写、处处运行Java程序JDBCMySQLSQLServerOracle6JDBC连接不同数据库的JAR包用JAVA语言实现与数据库的交互,是直接访问数据库,执行效率高。MySQLmysql-connector-java-5.1.40-bin.jarOracleojdbc.jarojdbc14.jar

ojdbc5.jar和ojdbc6.jarSQLServersqljdbc.jarsqljdbc4.jarjava.lang.ClassforName(StringclassName):返回与给定字符串名的类或接口

相关联的Class对象。——加载JDBC驱动时使用java.sql.DriverManager:管理JDBC驱动的服务类publicstaticsynchronizedConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsException:获得url对应的数据库的连接。JDBCAPI介绍JDBCAPI介绍java.sql.Connection接口常用方法StatementcreateStatementthrowsSQLException:返回一个Statement对象。PreparedStatementprepareStatement(Stringsql)throwsSQLException:返回预编译的Statement对象,即:将SQL语句提交到数据库进行预编译。CallableStatementprepareCall(Stringsql)throwsSQLException:返回CallableStatement对象,该对象用于存储过程的调用。java.sql.Connection接口控制事务的方法voidsetAutoCommit(booleanautoCommit):

关闭自动提交,打开事务voidcommit():提交事务voidrollback():回滚事务JDBCAPI介绍java.sql.Statement接口:用于执行SQL语句。包括:DDL、DCL、DML、SQL查询,当执行查询语句时返回结果集ResultSetexecuteQuery(Stringsql)throwsSQLException:执行查询语句intexecuteUpdate(Stringsql)throwsSQLException执行数据操作语言(DML)语句,如INSERT、UPDATE或DELETE,返回受影响的行数;执行数据库定义语言(DDL)语句,如:创建数据库、创建删除表等等,返回0。booleanexecute(Stringsql)throwsSQLException:执行任何SQL语句执行后,第一个结果如果是ResultSet对象,则返回true;执行后,第一个结果如果为受影响的行数或没有任何结果,则返回false。JDBCAPI介绍java.sql.PreparedStatement接口:预编译的statement对象。它是Statement的子接口允许数据库预编译SQL语句,通常SQL语句带参数。执行时

每次改变SQL命令的参数,避免数据库每次编译SQL语句,执行性能好。在执行前,需要为编译的SQL语句传入参数值voidsetXxx(intindex,value)根据传入参数值的类型不同,使用不同的方法。传入值的类型根据SQL语句参数而定。JDBCAPI介绍java.sql.ResultSet接口:定义结果集对象voidclose()throwsSQLException:释放、关闭ResultSet对象voidbeforeFisrt():将记录指针定位到首行之前,这是记录指针的初始状态。voidafterLast():将ResultSet的记录指针定位到最后一行之后。booleanabsolute

(introw):将结果集移动到第几行。(row是负数,移动到倒数第几行)booleanfirst():将ResultSet的记录指针定位到首行。booleanprevious():将ResultSet的记录指针定位到上一行。booleannext():将ResultSet的记录指针定位到下一行。booleanlast():将ResultSet的记录指针定位到最后一行。如果移动后的记录指针指向一条有效记录,则返回true。JDBC编程步骤连接数据库DriverManager.getConnection(url,user,password)con创建SQL语句执行对象con.createStatement或con.preparedStatement执行SQL语句,进行数据处理st.executeUpate或st.executeQuery需要继续处理数据关闭SQL语句执行对象st.close关闭连接con.close程序结束加载数据库驱动Class.forName(…)程序开始8-2MySQL数据库操作的常用sql命令1、创建表2、对表中的数据进行管理(1)增加记录(2)删除记录(3)修改记录(4)查询记录开发环境及开发工具1、集成开发工具IDEEclipse(数据访问层、业务逻辑层)NetBeans(表示层)2、数据库选用数据库:MySQL开发工具:USBWebServer+Navicat3、JDBC连接驱动mysql-connector-java-5.1.18-bin.jarSQL帐号:root密码:usbw8-4PreparedStatement的使用1、PreparedStatement代替Statement对数据进行操作2、PreparedStatement的优势Statement和PreparedStatement比较1、Statementcon.createStatement()stStringsql=“……….”;st.executeUpdate(sql);st.executeQuery(sql);st.execute(sql);2、PreparedStatementStringsql=“……(?,?)….”;con.preparedStatement(sql)pstpst.setInt(1,..);pst.setString(2,..);pst.executeUpdate(sql);pst.executeQuery(sql);pst.execute(sql);使用PreparedStatement的好处PreparedStatement接口,它继承自Statement。PreparedStatement提高SQL语句执行的性能。PreparedStatement实例包含已编译的SQL语句。极大地提高SQL语句执行的安全性,防止SQL注入。8-5数据库操作封装类1、面向对象代替面向过程2、把表的操作封装成类8-6单元测试1、Junit单元测试8-6单元测试1、Junit单元测试8-7对数据库操作类升级改造1、提取父类、设计子类2、面向接口的编程8-8事务管理1、什么是事务2、事务的编程举例什么是事务事务:指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。例如:A账户向B账户转帐100元

updateaccountsetmoney=money-100wherename='A';updateaccountsetmoney=money+100wherename='B';JDBC对事务的管理当JDBC获得数据库连接对象时,默认会自动向数据库提交它发送的SQL语句。connection.setAutoCommit(false);//不自动提交,开启事务mit();//提交事务connection.rollback();//回滚事务8-8-1MySQL数据库操作的常用sql命令用JDBC+GUI实现功能:1、开户、销户2、存钱、取钱3、转账4、查询账户5、日志记录与日志查询业务描述与涉及到的数据信息1、开户、销户2、存钱、取钱3、转账4、查询账户5、日志记录6、日志查询在银行里开启一个账户或注销一个账户在账户里,根据账户标识修改账户的金额A账户向B账户转某金额查询账户的所有信息账户的金额发生变化时,记录账户日志查询日志的所有信息简易银行管理系统——数据分析1、账户表account含义字段名称数据类型约束账户标识accidint主键,自增账户名称namevarchar(30)非空账户金额moneydouble非空2、日志表log

含义字段名称数据类型约束日志标识logidint

主键,自增账户标识

accid

int

非空,外部键账户金额moneydouble非空记录时间date

datetime非空简易银行管理系统——数据分析1、账户表account含义字段名称数据类型约束账户标识accidint主键,自增账户名称namevarchar(30)非空账户金额moneydouble非空2、日志表log

含义字段名称数据类型约束日志标识logidint

主键,自增账户标识

accid

int

非空,外部键账户名称

namevarchar(30)

非空账户金额moneydouble非空记录时间date

datetime非空AccountintaccidStringnamedoublemoneyLogintlogidintaccidStringnamedoublemoneyStringdate简易银行管理系统—所涉及的技术点和知识点技术点:单元测试三层架构体系事务管理综合运用前面所学的知识点:

JDBC+GUI类和对象、继承和多态常用类、集合框架异常处理单元测试单元测试是编写测试代码,用来保证程序基本模块的正确性。

JUnit是Java单元测试框架。JUnit4通过注解的方式来识别测试方法。目前支持的主要注解有:@BeforeClass全局只会执行一次,而且是第一个运行@Before在测试方法运行之前运行@Test测试方法@After在测试方法运行之后运行@AfterClass全局只会执行一次,而且是最后一个运行@Ignore忽略此方法三层架构体系表示层(UI)业务逻辑层(BLL)数据访问层(DAL)MySQLOracleSQLServer三层架构(3-tierapplication):表现层(UI)业务逻辑层(BLL)数据访问层(DAL)区分层次的目的高内聚,低耦合展现给用户的界面对数据业务逻辑处理直接操作数据库,对数据的CRUD操作……事务管理事务:指逻辑上的一组操作,这组操作的各个单元,要么全部成功,要么全部不成功。例如:A向B转帐

updatefromaccountsetmoney=money+100whereaccid=100;

updatefromaccountsetmoney=money-100whereaccid=200;当JDBC程序从数据库获得Connection对象时,默认会自动向数据库提交SQL语句。使用如下语句控制JDBC事务:connection.setAutoCommit(false);//设置事务提交方式为不自动提交mit();//提交事务connection.rollback();//回滚事务简易银行管理系统——业务分析(开户)业务功能开户、销户存钱、取钱转账查询账户(全部和单个)账户金额若发生变动,用日志记录账户现有金额查询所有日志业务逻辑分析开户业务:向account表中增加一条记录(accid自增;name和money由用户输入)向log表中增加一条记录(logid自增;accid、name、money与上同,date取系统当前时间)简易银行管理系统——业务分析(销户)业务功能开户、销户存钱、取钱转账查询账户(全部和单个)账户金额若发生变动,用日志记录账户现有金额查询所有日志业务逻辑分析销户业务:取钱(查询账户、取钱、日志记录)、删除用户从account表根据accid列查询账户信息(重点关注金额currentMoney)在account表中修改记录,根据accid将money列数值减少currentMoney从account表中按accid列删除一条记录向log表中增加一条记录(logid自增;accid、name与上同;money为0;

date取系统当前时间)简易银行管理系统——业务分析(存钱)业务功能开户、销户存钱、取钱转账查询账户(全部和单个)账户金额若发生变动,用日志记录账户现有金额查询所有日志业务逻辑分析存钱业务:在account表中查询一条记录,根据accid列的值,得到账户信息。在account表中修改一条记录,根据accid列的值,修改money列的数值,增加value元。向log表中增加一条记录(logid自增;accid与上同;name与money取自于账户[金额+value];date取系统当前时间)简易银行管理系统——业务分析(取钱)业务功能开户、销户存钱、取钱转账查询账户(全部和单个)账户金额若发生变动,用日志记录账户现有金额查询所有日志业务逻辑分析取钱业务:在account表中查询一条记录,根据accid列的值,得到账户信息。在account表中修改一条记录,根据accid列的值,修改money列的数值,减少value元。向log表中增加一条记录(logid自增;accid与上同;name与money取自于账户[金额-value];date取系统当前时间)简易银行管理系统——业务分析(转账)业务功能开户、销户存钱、取钱转账查询账户(全部和单个)账户金额若发生变动,用日志记录账户现有金额查询所有日志业务逻辑分析转账业务:A(accidOut)B(accidIn)value元在account表中查询2条记录,根据accidOut和accidIn的值,得到账户信息。在account表中修改2条记录,A账户减value元;B账户增加value元。(用事务来实现)向log表中增加2条记录(logid自增;accid分别为:

accidIn或accidOut;name与money取自于账户金额变化value元;date取系统当前时间)简易银行管理系统——业务分析(查询账户)业务功能开户、销户存钱、取钱转账查询账户(全部和单个)账户金额若发生变动,用日志记录账户现有金额查询所有日志业务逻辑分析查询所有账户业务:在account表中查询所有记录,封装成账户集合。查询单个账户业务:在account表中查询一条记录,根据accid查询账户信息,封装成账户对象。简易银行管理系统——业务分析(查询日志)业务功能开户、销户存钱、取钱转账查询账户(全部和单个)账户金额若发生变动,用日志记录账户现有金额查询所有日志业务逻辑分析查询所有日志业务:在log表中查询所有日志,封装成日志集合。简易银行管理系统——DAO层数据操作分析account表操作:[开户]

向account表中增加一条记录(id自增、name和money由用户输入)[销户、存取钱、转账]从account表根据accid列查询账户信息[销户、存取钱]在account表中修改一条记录,根据accid减少money列value元[销户]

从account表中删除一条记录,按accid列删除[查询所有账户]在account表中查询所有记录,封装成账户集合[转账]在account表中修改2条记录,根据accid减少money列value元AccountDao:publicintaddAccount(Accountac)publicAccountselectById(intaccid)publicintupdateAccount(intaccid,doublevalue)publicintdeleteAccount(intaccid)publicList<Account>selectAllAccounts()publicintturnMoney(intaccidOut,intaccidIn,doublevalue)简易银行管理系统——DAO层操作分析log表操作:[开户、销户、存取钱、转账]

向log表中增加一条记录

id自增;accid,name,money与account表的数据保持一致;date取系统当前时间[查询所有日志]

从log表中查询所有记录,封装成日志集合也可以增加查询条件:介于某段时间之间LogDao:publicintaddLog(Loglog)publicList<Log>selectAllLogs()简易银行管理系统——业务层操作分析银行业务:开户销户存钱取钱转账查询所有账户查询所有日志BankBiz:publicbooleanopenAccout(Accountac)publicbooleandelAccount(intaccid)publicbooleansaveMoney(intaccid,doublevalue)publicbooleanfetchMoney(intaccid,doublevalue)publicbooleanturnMoney(intaccidOut,intaccidIn,doublevalue)publicList<Account>selectAllAccounts()publicList<Log>selectAllLogs()实现步骤概述1、创建数据库bank及2个表:account和log2、新建JAVA项目,配置数据库开发环境3、建立几个包,搭建项目框架cn.sdut.aview——表示层——业务逻辑层cn.sdut.dao——数据访问层cn.sdut.po——实体,各层都会用到cn.sdut.util——工具包4、在po中创建2个实体类Account和Log5、在dao层中创建类:BaseDao,用于存放数据库访问共同的代码AccountDao,用于对账户表进行操作LogDao,用于对日志表进行操作6、在biz层创建BankBiz,用于对银行业务进行操作7、在表示层aView创建主类,对各项业务进行访问8、在NetBeans中引入项目,进行界面设计9、业务功能利用GUI窗口模式的逐步实现重新认识三层架构体系表示层(UI)业务逻辑层(BLL)数据访问层(DAL)MySQLOracleSQLServer展现给用户的界面对业务逻辑进行处理对数据的CRUD操作……AccountDaointaddAccount(Accountaccount)intdeleteAccount(intaccid)intupdateAccount(intaccid,doublevalue)AccountselectById(intaccid)List<Account>selectAll()intturnMoney(intaccidOut,intaccidIn,doublevalue)LogDaointaddLog(Loglog)List<Log>selectAll()BankBizbooleanopenAccount(Accountaccount)throwsInputValueException;booleandelAccount(intaccid)throws

NoSuchAccountException,…..booleansaveMoney(intaccid,doublevalue)throws

NoSuchAccount….booleanfetchMoney(intaccid,doublevalue)throws

NoSuchAccount....booleanturnMoney(intaccidOut,intaccidIn,doublevalue)throws

…List<Account>s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论