第八章数据库编程(netbeans版)_第1页
第八章数据库编程(netbeans版)_第2页
第八章数据库编程(netbeans版)_第3页
第八章数据库编程(netbeans版)_第4页
第八章数据库编程(netbeans版)_第5页
已阅读5页,还剩125页未读 继续免费阅读

下载本文档

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

文档简介

第八章数据库JDBC编程 2 搭建JDBC开发环境 第八章JDBC编程 数据库编程 执行带参数的SQL语句 基于连接池和数据源的访问数据库 BLOG字段的处理 分页显示 3 引子 数据库 在关系型数据库中 数据以记录 Record 和字段 Field 的形式存储在数据表 Table 中 由若干个数据表构成一个数据库 班级表 4 8 1搭建JDBC开发环境 8 1 1安装MySQL数据库 8 1 2JDBC简介 8 1 3下载安装MySQL的JDBC驱动 5 8 1 1安装MySQL数据库 1 下载 安装2 打开MySQL的托盘程序 出现在任务栏 开始 程序 MySQL MySQLSystemTrayMonitor3 启动MySQL服务器4 建表 插入 查询 打开MySQLquerybrowser5 更改配置文件my ini 支持中文 返回 6 1 下载 安装MySQL和JDBC 1 下载MySQL50 45http 202 206 223 108 downinfo 277 htmlmysql 5 0 45 win32 zip一路缺省安装安装并配置MySQL 可以在安装时配置 也可以重新配置如 记得设root的口令 比如我设的javaee端口号 缺省为33062 下载MySQL的官方管理工具mysql gui tools 5 0 r12 win32 msi3 下载安装MySQL的JDBC驱动 并将其配置到服务器的lib下 7 返回 8 3 启动MySQL服务器 法1 MySQL托盘 右键 startInstance 法2 使用MySQLAdministrator开始 程序 MySQL MySQLAdministrator用户名root密码javaee新建连接名为MySQLconnection 其实就是新建了一个database 名为mysql 新建连接 9 新建连接 10 启动 连接 11 进入MySQLAdministrator配置管理 在MySQL管理台 可以停止服务 管理 看到MySQL数据库服务器的端口 协议 所在机器的IP地址等等 返回 12 13 14 15 backup 16 Restore 17 18 4 建表 插入 查询 打开MySQLquerybrowser 1 打开 程序 MySQL MySQLBrowser或托盘 右键 MySQLBrower 返回 19 a 创建表customer 点右侧导航栏 选mysql库 右键 CreatenewTable 20 21 b 编辑表 点击customer edittable 双击字段的编辑框 22 然后观察右侧出现 mysql库下出现customer表 23 C 插入记录 点状态栏中的edit在编辑区 右键 Addrow 然后点击相应的字段编辑框 直接可以输入记录 英文数据 目前不支持中文 中文处理见下页点状态栏 applychange即提交 返回 24 5 配置MySQL支持中文字段 错误 mysql数据库无法录入中文数据 原因 因为mySQL缺省语言是latin1 修改 MySQLAdministrator startupvariable def charset填成gbk 25 上页等价于更改配置文件my ini 支持中文 错误 mysql数据库无法录入中文数据 原因 因为mySQL缺省语言是latin1 修改 C ProgramFiles MySQL MySQLServer5 0 my ini1 my ini中客户端和服务器端默认的字符编码 client 后面加上这句 客户端 default character set gbk mysql 服务器端 default character set gbk这个设置的是MYSQL自带的命令行显示和输入的 mysqld default character set gbk这个设置决定MySQL的工作环境的字符集 数据库继承MySQL设置的字符集 而表则继承数据库的字符集 字段则继承表的字符集 所以这里设置很重要 2 在设计字段时 选gbk字符集 否则往mySQL中还是输入汉字错误 以上往MySQL录入中文没有问题了 26 支持中文 续 3 改完这些之后 只要把html jsp页面上的编码方式都设置为gbk或gb2312input html中接受参数的jsp中确保jsp显示支持中文获得录入界面传进的参数确保支持中文 这样在jsp中显示MySQL没有问题了 但是从jdbc向MySQL录入或传递中文参数还有问题4 在使用jdbc的jsp页面中连接数据库的URL中声明中文编码 如下 这样才能支持从jdbc传往MySQL的中文参数StringconURL jdbc mysql localhost 3306 mysql useUnicode true例子见幻灯片44 27 设计字段时 选gbk字符集 28 点状态栏中的edit 双击字段 将beijing改为北京 再新增其它行记录然后applychanged 29 数据库建好了 我们怎么在程序中访问它呢 30 31 8 1 2JDBC简介 JDBC为多种关系数据库提供了统一访问方式作为特定厂商数据库访问API的一种高级抽象 它主要包含一些通用的接口类 真正的数据库访问操作实现是由各自数据库厂商提供的 数据库JDBC驱动程序 厂商提供的特定于数据库的访问APIJDBC通过提供一个抽象的数据库接口 使得程序开发人员在编程时可以不用绑定在特定数据库厂商的API上 大大增加了应用程序的可移植性 在实际运行过程中程序代码通过JDBC访问数据库时 仍旧需要调用特定于数据库的访问API 32 JDBC访问数据库层次结构 33 8 1 3下载安装MySQL的JDBC驱动 下载 JDBCAPI 包括两个包java sql 基本的数据库编程功能 如生成连接 执行语句以及准备语句和运行批处理查询等 还包括批处理更新 事务隔离和可滚动结果集等高级处理 javax sql 提供数据库方面的高级操作 如为连接管理 分布式事务和旧有的连接提供更好的抽象 引入了容器管理的连接池 分布式事务和行集 RowSet 等 34 java sql包中的类和接口 35 36 DriverManage类 DriverManage类以下函数均为public和static的 均抛出SQLException 37 java sql Connection类负责建立与指定数据库的连接 常用成员方法如下 1 publicStatementcreateStatement throwsSQLException用来创建Statement类对象 2 publicStatementcreateStatement intresultSetType intresultSetConcurrecy throwsSQLException方法 用来按指定的参数创建Statement类对象 3 publicDatabaseMetaDatagetMetaData throwsSQLException用来创建DatabaseMetaData对象 不同数据库系统拥有不同的特性 DatabaseMetaData类不但可以保存数据库的所有特性 并且还提供一系列成员方法获取数据库的特性 如取得数据库名称 JDBC驱动程序名 版本代号及连接数据库的JDBCURL 4 publicPreparedStatementprepareStatement Stringsql throwsSQLException用来创建PreparedStatement类对象 关于该类对象的特性在后面介绍 5 publicvoidcommit throwsSQLException用来提交对数据库执行添加 删除或修改记录 Record 的操作 Connection类 38 6 publicbooleangetAutoCommit throwsSQLException方法 用来获取Connection类对象的Auto Commit 自动提交 状态 7 publicvoidsetAutoCommit booleanautoCommit throwsSQLException方法 用来设定Connection类对象的Auto Commit 自动提交 状态 如果将Connection类对象的autoCommit设置为true 则它的每一个SQL语句将作为一个独立的事务被执行和提交 8 publicvoidrollback throwsSQLException方法 用来取消对数据库执行过的添加 删除或修改记录 Record 等操作 将数据库恢复到执行这些操作前的状态 9 publicvoidclose throwsSQLException方法 用来断开Connection类对象与数据库的连接 10 publicbooleanisClosed throwsSQLException方法 用来测试是否已关闭Connection类对象与数据库的连接 39 java sql Statement类的主要功能是将SQL命令传送给数据库 并将SQL命令的执行结果返回 Statement类提供的常用成员方法如下 1 publicResultSetexecuteQuery Stringsql throwsSQLException方法 用来执行指定的SQL查询语句 返回查询结果 如果发生数据库访问错误 则程序抛出一个SQLException异常 2 publicintexecuteUPdate Stringsql throwsSQLException方法 用来执行SQL的INSERT UPDATE和DELETE语句 返回值是插入 修改或删除的记录行数或者是0 如果发生数据库访问错误 则程序抛出一个SQLException异常 Statement类 40 3 publicbooleanexecute Stringsql throwsSQLException方法 用来执行指定的SQL语句 执行结果有多种情况 如果执行结果为一个结果集对象 则返回true 其他情况返回false 如果发生数据库访问错误 则程序抛出SQLException异常 4 publicResultSetgetResultSet throwsSQLException方法 用来获取ResultSet对象的当前结果集 对于每一个结果只调用一次 如果发生数据库访问错误 则程序抛出一个SQLException异常 41 5 publicintgetUpdateCount throwsSQLException方法 用来获取当前结果的更新记录数 如果结果是一个ResultSet对象或没有更多的结果 则返回 1 对于每一个结果只调用一次 如果发生数据库访问错误 则程序抛出一个SQLException异常 6 publicvoidclearWarnings throwsSQLException方法 用来清除Statement对象产生的所有警告信息 如果发生数据库访问错误 则程序抛出一个SQLException异常 7 publicvoidclose throwsSQLException方法 用来释放Statement对象的数据库和JDBC资源 如果发生数据库访问错误 则程序抛出一个SQLException异常 42 java sql PreparedStatement类的对象可以代表一个预编译的SQL语句 它是Statement接口的子接口 由于PreparedStatement类会将传入的SQL命令编译并暂存在内存中 所以当某一SQL命令在程序中被多次执行时 使用PreparedStatement类的对象执行速度要快于Statement类的对象 因此 将需要多次执行的SQL语句创建为PreparedStatement对象 可以提高效率 PreparedStatement对象继承Statement对象的所有功能 另外还添加一些特定的方法 prepareStatement类 43 PreparedStatement类提供的常用成员方法如下 1 publicResultSetexecuteQuery throwsSQLException方法 使用SQL指令SELECT对数据库进行记录查询操作 并返回ResultSet对象 2 publicintexecuteUpdate throwsSQLException方法 使用SQL指令INSERT DELETE和UPDATE对数据库进行添加 删除和修改记录 Record 操作 3 publicvoidsetDate intparameterIndex Datex throwsSQLException方法 用来给指定位置的参数设定日期型数值 44 4 publicvoidsetTime intparameterlndex Timex throwsSQLException方法 用来给指定位置的参数设定时间型数值 5 publicvoidsetDouble intparameterIndex doublex throwsSQLException方法 用来给指定位置的参数设定Double型数值 6 publicvoidsetFloat intparameterIndex floatx throwsSQLException方法 用来给指定位置的参数设定浮点型数值 45 7 publicvoidsetInt intparameterIndex intx throwsSQLException方法 用来给指定位置的参数设定整数型数值 8 publicvoidsetNull intparameterIndex intsqlType throwsSQLException方法 用来给指定位置的参数设定NULL型数值 46 ResultSet接口 1 first beforeFirst 将游标移动到ResultSet中第一条记录 的前面 2 last afterLast 将游标移动到ResultSet中最后一条记录 的后面 3 absolute intcolumn 将游标移动到相对于第一行的指定行 负数则为相对于最后一条记录4 relative introws 将游标移动到相对于当前行的第几行 正为向下 负为向上5 next 将游标下移一行6 previous 将游标上移一行7 insertRow 向当前ResultSet和数据库中被插入行处插入一条记录8 deleteRow 将当前ResultSet中的当前行和数据库中对应的记录删除9 updateRow 用当前ResultSet中已更新的记录更新数据库中对应的记录10 cancelUpdate 取消当前对ResultSet和数据库中所做的操作11 findColumn StringcolumnName 返回当前ResultSet中与指定列名对应的索引12 getRow 返回ResultSet中的当前行号13 refreshRow 更新当前ResultSet中的所有记录14 getMetaData 返回描述ResultSet的ResultSetMetaData对象15 isAfterLast 是否到了结尾16 isBeforeFirst 是否到了开头17 isFirst 是否第一条记录18 isLast 是否最后一条记录19 wasNull 检查列值是否为NULL值 如果列的类型为基本类型 且数据库中的值为0 那么这项检查就很重要 由于数据库NULL也返回0 所以0值和数据库的NULL不能区分 如果列的类型为对象 可以简单地将返回值与null比较20 close 关闭当前ResultSet 47 ResultSetMetaData接口 48 49 附录MySQL和java数据类型对照表 50 8 2JDBC编程4步曲 前奏 导入SQL包importjava sql 注册数据库的JDBC驱动 到JVM中 Class forName org git mm mysql Driver newInstance Class forName sun jdbc odbc JdbcOdbcDriver 连接数据库1 先定义数据库连接的URL对象StringconURL jdbc mySQL localhost 3306 test 或StringconURL jdbc odbc TestDB 2 再连接数据库例JDBCURL地址 调用DriverManager对象的getConnection 来获取一个代表数据库连接的java sql connectuion对象 Connectionconn DriverManager getConnection conURL username password 3 使用SQL语句对数据库操作例1 获得语句对象 statement对象 提供执行SQL的方法2 获得结果集 ResultSet对象 SQL语句执行的结果集 first next访问结果集记录3 获得属性 getXXX 字段名 StatementsqlStmt conn createStatement ResultSetrs sqlStmt executeQuery selectcustomeridfromcustomer rs first Stringrs getString title 获得String类型的字段title的值4 关闭数据库及各种对象conn close jdbc 子协议 Servername port databasename 51 8 2 2JDBCURL格式 JDBCURL的格式如下 jdbc 子协议 数据库定位器其中 定位器可能包括主机名 端口和数据库系统名MySQL数据库 jdbc mysql 机器名 数据库名jdbc mySQL localhost testOracle数据库 jdbc oracle thin 机器名 端口名 数据库名Access数据库 在机器上 建立ODBC数据源Class forName sun jdbc odbc JdbcOdbcDriver Access的odbc驱动con DriverManager getConnection jdbc odbc bookstore access的数据源 52 8 2 3建立连接 给定具体的JDBCURL 获取数据库连接是在DriverManager对象调用getConnection 两种 DriverManager getConnection url DriverManager getConnection url user password 需要输入用户名和密码信息进行身份认证 53 例8 1测试数据库连接是否成功P216 项目 DataWeb测试数据库连接test jsp 54 conn DriverManager getConnection jdbc mysql localhost test root javaee 连接MySQL数据库成功 程序7 1 test jsp 成功连接 连接失败 跳转到异常处理 55 56 8 3从JSP中创建和执行简单SQL语句 JDBC建立数据库连接后 就可使用SQL语句对数据库操作 1 Statement对象 提供执行SQL的方法 2 ResultSet对象 SQL语句执行结果集 3 getXXX方法 对属性操作 StatementsqlStmt conn createStatement ResultSetrs sqlStmt executeQuery selectcustomeridfromcustomer rs first Stringrs getString title 获得String类型的字段title的值 57 Statement对象 执行SQL Statement提供执行SQL的方法1 创建Statement对象 使用Connection creatStament ConnectionsqlStmt conn createStatement 2 Statement的三种SQL语句1 executeQuery 产生单个结果集 如SELECT2 executeUpdate 用于INSERT UPDATE 返回更新行数DROP DELETE 返回值为03 execute执行任意一个SQL语句 58 2 ResultSet对象 对结果集操作 代表SQL的executeQuery执行结果集 符合SQL语句中的所有行ResultSet维护指向当前数据行的光标 记录指针 ResultSet类常用成员方法 59 3 对字段操作 Statement的成员方法 publicvoidupdate类型 intColumnIndex 类型x throwsSQLExceptionpublicintget类型 intColumnIndex throwsSQLExceptionpublicintget类型 StringColumnName StatementsqlStmt conn createStatement ResultSetrs sqlStmt executeQuery selectcustomeridfromcustomer rs first Stringrs getString title 获得String类型的字段title的值或Stringrs getString 1 获得第1列的值 效果同上 列从左到右 从1开始编号 60 例 对customer表简单查询 所有记录 该表已经在前面通过MySQLQuerybrowser建立在mysql库下customer表用户root密码javaee 61 数据库mysqlcustomer表 MySQL数据库服务器 JDBC selectcustomerid address phonefromcustomer selectcustomerid firstname lastname addressfromcustomerwherefirstnamelike 张 62 customer2 jsp 程序8 3P221 顾客信息表ID地址电话 64 运行 1 启动MySQL服务器2 启动glassfish服务器3 发布customer2 jsp到glassfish上4 火狐中输入http localhost 8080 DataWeb customer2 jsp 65 8 4带参数的SQL查询 背景 前面的例子 是列出所有客户的信息如果想在查询界面 按顾客姓名查询怎么办呢 prepareStatement对象它包含的SQL语句中可以具有1 n个IN参数 待定参数IN参数在SQL语句创建时未指定 用 标识每个 的值用setXXX指定执行查询 改为均不带参 execute executeQuery executeUpdate preparedStmt conn prepareStatement selectcustomerid firstname lastname addressfromcustomerwherefirstnamelike 不是createStatement 是prepareStatementStringparm request getParameter parm 利用request获得input jsp输入的待查姓名preparedStmt setString 1 parm 设置prepareStatement的第一个 对应的待填参数sqlRst preparedStmt executeQuery 执行查询 顾客姓名 input jsp searchResult jsp 66 该表已经在前面通过MySQLQuerybrowser建立在mysql库下customer表用户root密码javaee新增两个字段firstname lastname用于姓名查询 67 启动MySQL服务器 打开MySQLQuerybrowser在右侧导航栏点击mysql库之customer表 右键 edittable加入firstname lastname两个字段 68 69 70 input jsp 查询条件顾客姓名 71 searchResult jsp 72 顾客信息表 endoftry 73 更正P222serarchResult jsp P222倒数第2行此后该程序中所有java sql Result之类的全部删去java sql如P223第1 2 3 6 等因为已经导入包了 后面直接用类名即可2 P223第6行conn DriverManager getConnection jdbc mysql localhost 3306 mysql root javaee Mysql后加入指定编码集 否则jdbc不支持向MySQL传递中文参数 jdbc mysql localhost 3306 mysql useUnicode true以保证从input jsp中通过request获得的参数支持中文4 P223中部while sqlRst next 如果下条记录不为空后面改为Stringname sqlRst getString firstname sqlRst getString lastname 删去 getBytes iso 8859 1 因为前面已经在MySQL的配置 jsp的page指令以及jdbc连接处都做了支持中文的处理 所以删去这里 74 catch SQLExceptione out println e toString finally if sqlRst null sqlRst close 关闭结果集if preparedStmt null preparedStmt close 关闭SQL语句对象if conn null conn close 关闭数据库连接对象 75 8 5基于连接池数据源的MySQL数据库访问 JDBC作为一种数据库访问技术 具有简单易用的优点 但使用这种模式进行Web应用程序开发 存在很多问题 首先 每一次Web请求都要建立一次数据库连接 建立连接是一个费时的活动 每次都得花费0 05s 1s的时间 而且系统还要分配内存资源 这个时间对于一次或几次数据库操作 或许感觉不出系统有多大的开销 可是对于现在的Web应用 尤其是大型电子商务网站 同时有几百人甚至几千人在线是很正常的事 在这种情况下 频繁的进行数据库连接操作势必占用很多的系统资源 网站的响应速度必定下降 严重的甚至会造成服务器的崩溃 不是危言耸听 这就是制约某些电子商务网站发展的技术瓶颈问题 其次 对于每一次数据库连接 使用完后都得断开 否则 如果程序出现异常而未能关闭 将会导致数据库系统中的内存泄漏 最终将不得不重启数据库 还有 这种开发不能控制被创建的连接对象数 系统资源会被毫无顾及的分配出去 如连接过多 也可能导致内存泄漏 服务器崩溃 76 8 5 1数据库连接池 connectionpool 原理 1 基本概念及原理数据库连接池的基本思想就是为数据库连接建立一个 缓冲池 预先在缓冲池中放入一定数量的连接 当需要建立数据库连接时 只需从 缓冲池 中取出一个 使用完毕之后再放回去 我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接 更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量 使用情况 为系统开发 测试及性能调整提供依据 2 服务器glassfish自带的连接池JDBC的API中没有提供连接池的方法连接池实际上是JDBC为第三方应用服务器提供的一个由数据库厂家实现的管理标准接口 我用的是glashfish的 JDBC接口层 J2EE应用 JDBCAPI 数据库JDBC驱动程序 Sun JDBC驱动层 数据库 数据库厂商 应用层 Connection ResultSet Statement 连接池 图8 10 基于连接池的数据库访问结构体系 程序员开发 PooledStatement PooledConnection PooledResultSet 78 1 配置Glassfish 3下的MySQL数据连接池 登录Glassfish 3的管理页面http localhost 4848 缺省账号admin 密码adminadmin在Glassfish服务器上建立数据连接池左侧 资源 JDBC 右侧将出现 连接池 点击新建 数据连接池名 MySQL资源类型选 javax sql ConnectionPoolDataSource厂商选 MySql下一步设置数据源名称dataSource名 mysql 修改书上的将sample改为我建的mysqlserverName localhostport 3306user rootpassword javaee 79 80 81 82 已经自动输入数据源类名 需要继续填下面的表 83 下一步设置数据源名称dataSource名 mysql 修改书上的将sample改为我建的mysqlserverName localhostport 3306user rootpassword javaee配好后 单击完成 84 85 配置完成后 确认一下自动拼接的数据库连接字串url是否正确 有时因为开源的工具有bug 可能会有问题 会在运行中出现java sql SQLException Nodatabaseselected Jdbc mysql Servername port databasename 86 测试连接池 点击连接池MySQL ping 87 测试连接池成功 88 2 创建基于连接池的GlassFish数据源 仍旧在Glassfish控制台资源 JDBC资源 新建JNDI名称 sample池名称 选刚才建的MySQL数据池确定重启Glassfish 使之生效 89 3 编测试数据源页面testDataSource jsp selectcustomerid address phonefromcustomerDBTest数据源连接结果customerid row customerid address row address phone row phone 90 8 5 3例8 6 重写customer2 jsp 变jdbc直连为数据源 1 加入数据源对象2 改为基于数据源的连接 加入数据源对象InitialContextcontext newInitialContext DataSourcedataSource DataSource context lookup java comp env sample Class forName org gjt mm mysql Driver newInstance conn DriverManager getConnection jdbc mysql localhost 3306 mysql root javaee conn dataSource getConnection 改为基于数据源的连接 91 customer2 jsp 程序8 3P221 基于连接池和数据源访问数据库 加入数据源对象InitialContextcontext newInitialContext DataSourcedataSource DataSource context lookup java comp env sample DataSourcedataSource DataSource context lookup sample netbeans6 9下直接用 Class forName org gjt mm mysql Driver newInstance conn DriverManager getConnection jdbc mysql localhost 3306 mysql root javaee conn dataSource getConnection 改为基于数据源的连接 别忘了java comp env 建的数据源都得加这个 否则命名空间找不到 92 其它的都不改 顾客信息表ID地址电话 93 94 95 元数据对象DatabseMetaData和ResultSetMeta 元数据 描述数据的数据 数据库中有多少表 表中的字段的含义 表一级 就是表的结构 ResultSetMeta对象有几列 多少个字段 getColumCount 字段的名称都是什么 getColumName 各个都是什么类型的 getColumType 数据库一级的 DatabaseMetaData对象当前数据库是什么数据库 比如oracle access等数据库的版本 一个表的信息 模式 表的名字getTables 96 DatabaseMetaData对象提供的是关于数据库的各种信息 这些信息包括 1 数据库与用户 数据库标识符以及函数与存储过程 2 数据库限制 3 数据库支持不支持的功能 4 架构 编目 表 列和视图等 2 ResultSetMeta对象 1 ResultSetMetaData存储了ResultSet的MetaData2 ResultSet是以表格的形式存在 所以getMetaData就包括了数据的字段名称 类型以及数目等表格所必须具备的信息 97 ResultSetMeta ResultSet是以表格的形式存在 ResultSetMetaData存储了ResultSet的MetaData 1 获得元数据对象ResultSet接口的 getMetaData 返回描述ResultSet的ResultSetMetaData对象包括了数据的字段名称 类型以及数目等表格所必须具备的信息2 ResultSetMetaData接口 getColumnCount 返回ResultSet中列的数目publicintgetColumCount throwsSQLException返回所有字段的数目getColumnName 返回列在数据库中的名称publicStringgetColumName intcolum throwsSQLException 根据字段的索引值取得字段的名称 colum 字段的索引值 从1开始 getColumnType 返回列的SQL类型publicStringgetColumType intcolum throwsSQLException 方法说明 根据字段的索引值取得字段的类型 返回值的定义在java sql TypeisReadOnly 表示该数据项是否为只读值isNullable 表示该列是否可以存储NULL 98 得到ResultSet的元数据对象 获得结果集的记录总数 99 顾客信息表col 获得字段名 获得字段值 100 101 l 102 8 7分页显示 数据库查询时 记录非常多 一页看不完 分页显示思路 设置一页显示的记录数intRowCount 然后按照记录总数进行计算 算出总页数 无论首页还是以后跳转的页均使用page jsp代码page jsp按当前页数 计算出结果集中的起始记录的位置 并定位到该条记录 然后按照一页的记录数读出并显示 在点击上 下页跳转时 将待跳转的页码用用request对象的参数 page 来传递而跳到指定页后 page jsp先从request中读出当前页码 然后计算应从数据集中读出的记录数 并定位到本页的起始记录的那个位置 103 ConnectionsqlCon null 数据库连接对象StatementsqlStmt null SQL语句对象ResultSetsqlRst null 结果集对象intintPageSize 一页显示的记录数intintRowCount 记录总数intintPageCount 总页数intintPage 待显示页码StringstrPage 存request传递来的当前 page 页码intPageSize 2 设置一页显示的记录数strPage request getParameter page 取得待显示页码if strPage null 表明request中没有这个参数 即为显示第一页intPage 1 else intPage Integer parseInt strPage if intPage 1 intPage 1 104 Class forName org gjt mm mysql Driver newInstance 装载JDBC驱动sqlCon DriverManager getConnection jdbc mysql localhost 3306 mysql root javaee 连接数据库sqlStmt sqlCon createStatement ResultSet TYPE SCROLL INSENSITIVE ResultSet CONCUR READ ONLY 创建语句对象 双向滚动 只读sqlRst sqlStmt executeQuery SELECTcustomerid phonefromcustomer 执行SQL语句获得结果集intRowCount sqlRst getMetaData getColumnCount 获得结果集记录总数intPageCount intRowCount intPageSize 1 计算总页数 105 页次 页条 页ID电话0 sqlRst absolute intPage 1 intPageSize 1 若不是第一页 则结果集绝对定位到当 前页的起始记录 当前页码 1 页面大小 1 inti 0 while i 106 1 上一页 下一页 107 数据库 数据库 DataBase 是指长期存储在计算机内的 有组织的 可共享的 可以表现为多种形式的数据集合 数据库中的数据具有如下特点 1 按一定的数据模型组织 描述和存储 2 具有较小的冗余度 3 具有较高的数据独立性和易扩展性 4 可为各种用户共享 数据库管理系统 DataBaseManagementSystem 简称DBMS是计算机系统软件 正如使用高级语言需要解释 编译程序的支持一样 使用数据库语言也需要一个特定的支持软件 这就是 数据库管理系统 主要任务 是科学地有效地组织和存储数据 高效地获取和管理数据 接受和完成用户提出的访问数据的各种请求 主要功能 1 数据定义功能 2 数据操纵功能 3 数据库运行控制功能 4 数据库的建立和维护功能 常见的数据管理系统 DBMS 1 1 4数据库系统 DataBaseSystem DBS拥有数据库技术支持的计算机系统 一般由数据库 数据库管理系统 及其开发工具 应用系统 数据库管理员和用户构成 数据库系统可以实现有组织地 动态地存储大量相关数据 提供数据处理和信息资源共享服务 与文件系统相比 数据库系统具有以下特点 1 数据的结构化 2 最小的冗余度 3 数据的共享 4 数据与程序独立 5 数据的安全性和完整性 数据库的基本概念 文件 是一种存放在磁盘上 可以单独操作的单位 包括可执行程序文件和非可执行文件 如文本文件 图像文件等 文件也称为是记录的集合 实体 一类特殊的可相互区别的对象 如人 地方等 属性 实体所具有的特征 如实体 学生 可以有学号 姓名 年龄 性别 年级等属性 域与数据类型 属性的取值范围称为域 取值具有的特殊的类型 称为数据类型 常用的类型包括整型 实型 日期型 字符串型 记录 对实体的描述 固定长度的域对应定长记录 变长域对应变长记录 文件与数据库的差别 文件 不要求数据是结构化的 如程序文件 一般的文本文件 文件内部由一种特定的应用程序优化 其它应用程序很难进一步扩充或优化 与程序有较强的依赖 数据库是结构化的 每个记录有相同的域名 独立性强 特别地 与程序相对独立 能被多个程序共享数据 并发操作 数据库具有一系列方便的操作 如关联 投影等 本身也利于扩充 还利于多个数据库重新组合为一个新的数据库 形成不同形式的记录集合 数据库有一个特殊的数据库管理系统进行管理 数据库的类型 模型 层次数据库网状数据库关系数据库 层次模型 每个记录表示为节点 以树的结构表示节点之间的关系 网状模型 每个记录看成一个节点 节点与节点之间建立关联 形成复杂的网状结构 如下图 关系模型 通过相互关联而又互相独立的多个二维表的形式来表示数据及其关系 当前的数据库系统基本上都是关系模型 118 在关系型数据库中 数据以记录 Record 和字段 Field 的形式存储在数据表 Table 中 由若干个数据表构成一个数据库 班级表 119 SQL语言的操作对象主要是数据表 依照SQL命令操作关系型数据库的不同功能 可将SQL命令分成 数据定义语言DDL DataDefinitionLanguage 数据操纵语言DML DataManipulationLanguage 数据查询语言DQL DataQueryLanguage 数据控制语言DCL DataControlLanguage 附录A 常用SQL语句 120 提供对数据库及其数据表的创建 修改 删除等操作 属于数据定义语言的命令有Create Alter和Drop 0 创建数据库createdatabase数据库名1 创建数据表在SQL语言中 使用CREAT

温馨提示

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

评论

0/150

提交评论