javaee第八章数据库编程(netbeans版).ppt
《javaee第八章数据库编程(netbeans版).ppt》由会员分享,可在线阅读,更多相关《javaee第八章数据库编程(netbeans版).ppt(114页珍藏版)》请在三一办公上搜索。
1、第八章 数据库JDBC编程,2,搭建JDBC开发环境,第八章 JDBC编程,数据库编程,执行带参数的SQL语句,基于连接池和数据源的访问数据库,BLOG字段的处理,分页显示,3,引子数据库,在关系型数据库中,数据以记录(Record)和字段(Field)的形式存储在数据表(Table)中,由若干个数据表构成一个数据库,班级表,4,8.1 搭建JDBC开发环境,安装MySQL数据库,8.1.2 JDBC简介,8.1.3 下载安装MySQL的JDBC驱动,5,安装MySQL数据库,1)下载&安装2)打开MySQL的托盘程序出现在任务栏【开始】-【程序】-MySQL-MySQLSystemTrayM
2、onitor3)启动MySQL服务器4)建表、插入、查询打开MySQL query browser 5)更改配置文件my.ini支持中文,返回,6,1)下载&安装MySQL和JDBC,1.下载MySQL50.45 一路缺省安装 安装并配置MySQL可以在安装时配置,也可以重新配置 如:记得设root的口令,比如我设的javaee 端口号,缺省为33062.下载MySQL的官方管理工具 3.下载安装MySQL的JDBC驱动,并将其配置到服务器的lib下 下载后,将压缩包内的拷贝到服务器JVM可以访问到的目录下,即服务器的lib目录下C:Program Filesglassfish-3.0.1gl
3、assfishlib(目前是),7,返回,8,3)启动MySQL服务器,法1MySQL托盘右键start Instance【法2】使用MySQL Administrator 开始程序MySQL MySQL Administrator用户名root 密码 javaee新建连接名为MySQL connection(其实就是新建了一个database,名为mysql,,新 建连接,9,新建连接,10,启动连接,11,进入MySQL Administrator配置管理,在MySQL管理台,可以停止服务、管理、看到MySQL数据库服务器的端口、协议、所在机器的IP地址等等,返回,12,4)建表、插入、查
4、询打开MySQL query browser,1.打开:程序MySQLMySQL Browser 或托盘右键MySQL Brower,返回,13,a)创建表customer,点右侧导航栏,选mysql库右键Create new Table,14,15,b)编辑表:点击customeredit table,双击字段的编辑框,16,然后观察右侧出现:mysql库下出现customer表,17,C)插入记录,点状态栏中的edit在编辑区右键Add row,然后点击相应的字段编辑框,直接可以输入记录(英文数据)目前不支持中文,中文处理见下页点状态栏apply change即提交,返回,18,5)配置M
5、ySQL 支持中文字段,【错误】mysql数据库无法录入中文数据【原因】因为mySQL缺省语言是latin1【修改】MySQL Administratorstartup variable def.char set填成 gbk,19,上页等价于更改配置文件my.ini支持中文,【错误】mysql数据库无法录入中文数据【原因】因为mySQL缺省语言是latin1【修改】C:Program FilesMySQLMySQL Server 5.0my.ini1.my.ini中客户端和服务器端默认的字符编码client后面加上这句(客户端)default-character-set=gbkmysql(服务
6、器端)default-character-set=gbk这个设置的是MYSQL自带的命令行显示和输入的mysqld default-character-set=gbk这个设置决定MySQL的工作环境的字符集!数据库继承MySQL设置的字符集,而表则继承数据库的字符集,字段则继承表的字符集!所以这里设置很重要!2.在设计字段时,选gbk字符集,否则往mySQL中还是输入汉字错误以上往MySQL录入中文没有问题了,20,支持中文(续),3.改完这些之后,只要把html、jsp页面上的编码方式都设置为gbk或 gb2312 input.html中 接受参数的jsp中 确保jsp显示支持中文 获得录入
7、界面传进的参数确保支持中文 这样在jsp中显示MySQL没有问题了,但是从jdbc向MySQL 录入或传递中文参数还有问题4.在使用jdbc的jsp页面中连接数据库的URL中声明中文编码,如下,这样才能支持从jdbc传往MySQL的中文参数String conURL=jdbc:mysql:/localhost:3306/mysql?useUnicode=true例子见幻灯片 44,21,设计字段时,选gbk字符集,22,点状态栏中的edit,双击字段,将beijing改为北京,再新增其它行记录然后applychanged,23,24,数据库建好了,我们怎么在程序中访问它呢?-JDBC,25,8
8、.1.2 JDBC简介,JDBC 为多种关系数据库提供了统一访问方式作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。真正的数据库访问操作实现是由各自数据库厂商提供的。数据库JDBC驱动程序:厂商提供的特定于数据库的访问APIJDBC通过提供一个抽象的数据库接口,使得程序开发人员在编程时可以不用绑定在特定数据库厂商的API上,大大增加了应用程序的可移植性。在实际运行过程中程序代码通过JDBC访问数据库时,仍旧需要调用特定于数据库的访问API!,26,JDBC访问数据库层次结构,27,8.1.3 下载安装MySQL的JDBC驱动,下载配置到应用服务器Glassfish的li
9、b目录下 下载后,将压缩包内的拷贝到服务器JVM可以访问到的目录下,即服务器的lib目录下(目前是C:apache-tomcat-6.0.26lib),28,8.2 JDBC编程4步曲,前奏:导入SQL包import java.sql.*;注册数据库的JDBC驱动(到JVM中)Class.forName(“org.git.mm.mysql.Driver”).newInstance()”);连接数据库 1)先定义数据库连接的URL对象 String conURL=“jdbc:mySQL:/localhost:3306/test”;或String conURL=“jdbc:odbc:TestDB”
10、;2)再连接数据库 例 JDBC URL地址,调用DriverManager对象的getConnection()来获取一个代表数据库连接的对象。Connection conn=DriverManager.getConnection(conURL,”username”,”password”)3.使用SQL语句对数据库操作 例 1)获得语句对象:statement对象:提供执行SQL的方法 2)获得结果集:ResultSet对象:SQL语句执行的结果集,first,next访问结果集记录 3)获得属性:getXXX(“字段名”)Connection sqlStmt=conn.createState
11、ment();ResultSet rs=sqlStmt.executeQuery(“select customerid from customer”)rs.first();String rs.getString(“title”);/获得String类型的字段title的值4.关闭数据库及各种对象conn.close(),jdbc:子协议/Servername:port/databasename,29,类,DriverManage类以下函数均为public和static的,均抛出SQLException,30,8.2.2JDBC URL格式,JDBC URL 的格式如下:jdbc:子协议:数据库
12、定位器 其中,定位器可能包括主机名、端口和数据库系统名MySQL数据库:jdbc:mysql:/机器名/数据库名jdbc:mySQL:/localhost/testOracle数据库:jdbc:oracle:thin机器名:端口名:数据库名 Access数据库:在机器上:建立ODBC数据源);/Access的odbc驱动 con=DriverManager.getConnection(jdbc:odbc:bookstore);/access的数据源,31,建立连接,给定具体的JDBC URL,获取数据库连接是在DriverManager对象调用getConnection()。两种:Driver
13、Manager.getConnection(url)DriverManager.getConnection(url,user,password)需要输入用户名和密码信息进行身份认证。,32,例8-1 测试数据库连接是否成功 P216,项目:DataWeb测试数据库连接test.jsp,33,conn=DriverManager.getConnection(jdbc:mysql:/localhost/test,root,javaee);%连接MySQL数据库成功!%,程序71:test.jsp,成功连接,连接失败,跳转到异常处理,34,35,8.3 从JSP中创建和执行简单SQL语句,JDBC建
14、立数据库连接后,就可以使用SQL语句对数据库操作,1.Statement对象:提供执行SQL的方法,2.ResultSet对象:SQL语句执行结果集,3.getXXX方法:对属性操作,Statement sqlStmt=conn.createStatement();ResultSet rs=sqlStmt.executeQuery(“select customerid from customer”)rs.first();String rs.getString(“title”);/获得String类型的字段title的值,36,Statement 对象执行SQL,Statement提供执行SQL
15、的方法1.创建Statement对象(使用Connection.creatStament)Connection sqlStmt=conn.createStatement();2.Statement的三种SQL语句 1)executeQuery():产生单个结果集,如SELECT 2)executeUpdate():用于 INSERT、UPDATE、返回更新行数DROP、DELETE:返回值为0 3)execute 执行任意一个SQL语句,37,2)ResultSet对象对结果集操作,代表SQL的executeQuery执行结果集符合SQL语句中的所有行ResultSet维护指向当前数据行的光标
16、记录指针,ResultSet类常用成员方法,38,3)对字段操作,Statement的成员方法:public void update类型(int ColumnIndex,类型x)throws SQLExceptionpublic int get类型(int ColumnIndex)throws SQLExceptionpublic int get类型(String ColumnName)Connection sqlStmt=conn.createStatement();ResultSet rs=sqlStmt.executeQuery(“select customerid from custo
17、mer”)rs.first();String rs.getString(“title”);/获得String类型的字段title的值或 String rs.getString(1);/获得第1列的值,效果同上,列从左到右,从1开始编号,39,例:对customer表简单查询所有记录,该 表已经在前面通过MySQL Query browser建立在mysql库下customer表用户root 密码javaee,40,数据库mysql customer表,MySQL数据库服务器,JDBC,select customerid,address,phone from customer,select cu
18、stomerid,firstname,lastname,address from customer where firstname like“张”,41,customer2.jsp(程序8-3 P221),顾客信息表 ID 地址 电话,43,运行,1.启动MySQL服务器2.启动glassfish服务器3.发布customer2.jsp到glassfish上4.火狐中输入http:/localhost:8080/DataWeb/customer2.jsp,44,8.4 带参数的SQL查询,背景:前面的例子:是列出所有客户的信息如果想在查询界面,按顾客姓名查询怎么办呢?prepareStatem
19、ent对象它包含的SQL语句中可以具有1n个IN参数待定参数IN参数在SQL语句创建时未指定,用?标识每个?的值用setXXX指定执行查询(改为均不带参)execute()executeQuery()executeUpdate(),preparedStmt=conn.prepareStatement(select customerid,firstname,lastname,address from customer where firstname like?);/不是createStatement,是prepareStatementString parm=request.getParamete
20、r(parm);/利用request获得input.jsp输入的待查姓名preparedStmt.setString(1,parm);/设置prepareStatement的第一个?对应的待填参数sqlRst=preparedStmt.executeQuery();/执行查询,顾客姓名.,input.jsp,searchResult.jsp,45,该 表已经在前面通过MySQL Query browser建立在mysql库下customer表用户root 密码javaee新增两个字段firstname、lastname用于姓名查询,46,启动MySQL服务器,打开MySQL Query bro
21、wser在右侧导航栏点击mysql库之customer表右键edit table加入firstname、lastname两个字段,47,48,49,input.jsp,查询条件 顾客姓名,50,searchResult.jsp,51,顾客信息表%/end of try,52,更正P222 serarchResult.jsp,P222倒数第2行此后该程序中所有java.sql.Result之类的全部删去java.sql如P223第1,2、3、6、等因为已经导入包了,后面直接用类名即可2.P223第6行conn=DriverManager.getConnection(jdbc:mysql:/loc
22、alhost:3306/mysql,root,javaee);Mysql后加入指定编码集,否则jdbc不支持向MySQL传递中文参数jdbc:mysql:/localhost:3306/mysql?useUnicode=true以保证从input.jsp中通过request获得的参数支持中文4.P223中部 while(sqlRst.next()/如果下条记录不为空 后面改为 String name=sqlRst.getString(“firstname”)+sqlRst.getString(“lastname”);,删去.getBytes(“iso-8859-1”)因为前面已经在MySQL的
23、配置、jsp的page指令以及jdbc连接处都做了支持中文的处理,所以删去这里,53,catch(SQLException e)out.println(e.toString();finallyif(sqlRst!=null)sqlRst.close();/关闭结果集 if(preparedStmt!=null)preparedStmt.close();/关闭SQL语句对象 if(conn!=null)conn.close();/关闭数据库连接对象%,54,8.5 基于连接池数据源的MySQL数据库访问,JDBC作为一种数据库访问技术,具有简单易用的优点。但使用这种模式进行Web应用程序开发,存
24、在很多问题:首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的Web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重
25、启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。,55,数据库连接池(connection pool)原理,1、基本概念及原理 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量、使用情况,为系统开发、测试及性能调整提供依据。2、服务器glassfish自带的连接池 JDBC的A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- javaee 第八 数据库 编程 netbeans
链接地址:https://www.31ppt.com/p-5435960.html