(2014-03)JDBC和MySQL数据库.ppt_第1页
(2014-03)JDBC和MySQL数据库.ppt_第2页
(2014-03)JDBC和MySQL数据库.ppt_第3页
(2014-03)JDBC和MySQL数据库.ppt_第4页
(2014-03)JDBC和MySQL数据库.ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

Java EE企业级软件开发,JDBC与MySQL数据库,2014 洛阳师范学院 吕延庆,本节内容提纲,JDBC简介 JDBC的常用类和接口 使用JDBC API访问数据库 MySQL简介 数据库连接池 在Java Web程序中使用数据库,1. JDBC简介,Java应用程序通过JDBC(Java DataBase Connectivity,JDBC)技术访问数据库; JDBC是一个独立于特定数据库管理系统的、提供了通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库(java.sql包),使用这个类库可以以一种标准的方法、方便地访问数据库资源。 JDBC为访问不同的数据库提供了一种统一的途径,像ODBC(Open Database Connectivity,ODBC)一样,JDBC对开发者屏蔽了一些具体的细节问题。JDBC的目标是使Java应用程序开发人员使用JDBC就可以连接任何提供了JDBC驱动程序的数据库系统,并且开发人员无须对一些特定数据库系统有过多的了解,从而大大简化和加快开发过程。,JDBC简介,2. JDBC常用类和接口,JDBC主要的接口和类包括Driver接口、DriverManager类、Connection接口、Statement接口、PreparedStatement接口、CallableStatement接口、ResultSet接口以及Metadata类。 DriverManager(java.sql.DriverManager):装载驱动程序,管理应用程序与驱动程序之间的连接。 Driver(由驱动程序开发商提供):将应用程序的API请求转换为特定的数据库请求。 Connection(java.sql.Connection):将应用程序连接到特定的数据库。 Statement(java.sql.Statement):在一个给定的连接中,用于执行一个静态的数据库SQL语句。,2. JDBC常用类和接口(2),PreparedStatement(java.sql.PreparedStatement):用于执行一个含有参数的动态SQL语句,该接口为Statement接口的子接口。 CallableStatement(java.sql.CallableStatement):用于执行SQL存储过程的接口,该接口为PreparedStatement的子接口。 ResultSet(java.sql.ResultSet):SQL语句中心完后,返回的数据结果集(包括行、列)。 Metadata(包括java.sql.DatabaseMetadata和java.sql. ResultSetMetadata):关于查询结果集、数据库和驱动程序的元数据信息。,3.使用JDBC API访问数据库,使用JDBC连接数据库的基本步骤,MySQL数据库简介,MySQL简介: 较好的可移植性; 支持包括Windows、Linux、Solaris在内的多种操作系统; 为Java、PHP、.NET、C等多种编程语言提供了API; 支持多线程技术; 优化的SQL查询算法,有效地提高查询速度; 提供了TCP/IP、ODBC和JDBC等多种数据库连接途径; 提供了用于管理、检查、优化数据库操作的管理工具; 具有处理千万条记录的能力; 支持多种字符编码。,安装和配置MySQL数据库,基本的SQL语句: (1)创建数据库 创建一个名为newsdb的数据库: CREATE datebase newsdb; (2)删除数据库 删除一个名为newsdb的数据库: DROP database newsdb; (3)创建表 创建表一个数据表news。 USE newsdb; CREATE TABLE news ( id bigint(20) unsigned NOT NULL auto_increment, title varchar(100) NOT NULL, username varchar(20) NOT NULL, content text, submitTime datetime default NULL, viewCount int(10) unsigned default NULL, catalogs varchar(20) default NULL, attachment varchar(100) default NULL, PRIMARY KEY (id);,安装和配置MySQL数据库,(4)修改表 为了将属性id从TINYINT 改变为INTEGER(属性名不变),并将属性title从 VARCHAR(100) 改变为VARCHAR(200),同时也将title重命名为t。 ALTER TABLE news MODIFY id INTEGER NOT NULL, CHANGE title t VARCHAR(200); (5)删除表 删除新闻表news。 DROP TABLE news; (6)添加记录 向数据表news中添加一条记录。 INSERT INTO news (id,title,username,content,submitTime,viewCount, catalogs,attachment) VALUES (1,新闻标题,张三,新闻内容,2009-12-14 00:00:00,1,5,null); (7)查询记录 查询新闻编号id为1记录的所有属性信息。 SELECT * from news where id = 1;,安装和配置MySQL数据库,(8)删除记录 删除新闻编号id为1的记录。 DELETE FROM news WHERE id = 1; (9)修改记录 修改编号id为1的记录,其标题title为“新的标题”。 UPDATE TABLE news SET title = “新的标题“ WHERE id = 1; (10)使用存储过程 建立一个存储过程,其名称为sp_searchnews且带有一个int类型的输入参数p_id,该存储过程的功能是检索id大于参数p_id的所有news表中的记录。 CREATE DEFINER=rootlocalhost PROCEDURE sp_searchnews (in p_id int) begin select * from news where id p_id; end,使用JDBC API访问数据库,(1)加载JDBC驱动程序 在应用程序中,有2种常用的方法加载JDBC驱动程序。(以加载JDBC-ODBC桥驱动为例) 利用System类的静态方法setProperty(),方法如下: System.setProperty(“jdbc.drivers“, “sun.jdbc.odbc.JdbcOdbcDriver“); 利用Class类的类方法forName(),方法如下: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); (2)建立与数据库的连接 利用DriverManager类的类方法getConnection()来获得与特定数据库的连接实例(Connection实例)。例如与本地MySQL数据库newsdb连接,假设用户名为root,密码为passwd,方法如下。 Connection con = DriverManager.getConnection (“jdbc:mysql:/localhost:3306/newsdb?user=root,使用JDBC API访问数据库,(3)进行数据库操作 对数据库的操作是依赖于SQL语句的,每执行一条SQL语句,都需要利用Connetcion实例的createStatement()方法来创建一个Statement实例。然后通过Statement实例的execute()方法、executeQuerry()方法或者executeUpdate()等方法执行SQL语句。 例如:下面的是查询news表中所有的记录。 Statement statement = con.createStatement(); ResultSet rs = statement.executeQuerry(“SELECT * FROM news“); 下面是删除news表中id为10的记录: Statement statement = con.createStatement(); int result=statement.executeUpdate(“DELETE FROM news WHERE id=10“);,使用JDBC API访问数据库,(4)对操作结果进行分析 执行SELECT语句后,必然产生一个ResultSet结果集实例。对结果集分析是Java应用程序的最终目的。一般来说可以使用循环遍历结果集,然后使用ResultSet的getXxx()方法取得指定行指定列的数据。 while(rs.next() int id = rs.getInt(“id“); String title = rs.getString(“title“); String username = rs.getString(“username“); Date time = rs.getDate(“submitTime“); System.out.println(“编号:“ + id + “, 标题:“ + title + “,作者:“ + username + “,发布日期:“ + time); ,使用JDBC API访问数据库,(5)关闭相关连接 操作数据库完毕后,需要关闭相应连接以释放资源,具体方法如下。 /关闭ResultSet实例rs rs.close(); /关闭Statement实例statement statement.close(); /关闭Connection实例con con.close();,JDBC实现查询 (较完整实例),Class.forName(“com.mysql.jdbc.Driver“); / driver class Connection conn = DriverManager.getConnection( “jdbc:mysql:/localhost:3306/mytest“, “root“,“123456“); / JDBC url, username, password String sql =“select * from news“; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); if (rs!=null) rs.last(); System.out.println(rs.getRow(); ,数据库连接池简介,在实际应用开发中,如果JSP、Servlet等使用JDBC直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接、操作数据和关闭数据库连接等步骤。 连接并打开数据库是一件既消耗资源又费时的工作。 如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。 数据库连接池技术是解决此类问题最常用的方法。 所谓数据库连接池,就是在一个虚拟的池中,预先创建好一定数量的Connection对象等待客户端的连接,当有客户端连接时,则分配一个空闲的Connection对象给客户端连接数据库;当这个客户端请求结束时,则将Connection对象归还给池中,用来等待下一个客户端的访问。,数据库连接池(Database pool) 工作原理,工作原理: (1)预定义一定数量的连接,并存放在数据库连接池中; (2)当客户端请求一个数据库连接时,连接池将为该请求从数据库连接池中分配一个空闲的连接,而不是重新建立一个连接对象;当该请求结束后,该连接会重新回到数据库连接池中,而不是直接将其释放; (3)当连接池中的空闲连接数量低于下限时,连接池将会根据配置信息追加一定数量的连接对象,当空闲连接数量高于上限时,连接池会释放一定数量的连接。,数据库连接池使用方法,(1)基于Web服务器的数据库连接池 绝大多数Web服务器都支持数据库连接池技术,下面以Tomcat服务器为例配置访问MySQL数据库的数据库连接池,具体步骤如下。 第一步:在Web应用的META-INF下新建context.xml文件,配置数据源。,2,修改 WEB-INF/web.xml,添加如下内容: MySQL Database DBPool javax.sql.DataSource Container 说明:(此步骤在有的Java Web服务器上可省略) 这里的要与context.xml中的name属性一致,5. 数据库连接池简介,第二步:使用JNDI访问数据库连接池。 JDBC提供了javax.sql.DataSource接口,负责与数据库建立连接,在应用中无需编写连接数据库代码,便可直接从数据源(context.xml)中获得数据库连接。 在DataSource中预先建立了多个数据库连接,这些数据库连接保存在数据库连接池中,当程序访问数据库时,只需从连接池中取出空闲的连接,访问结束后,再将连接归还给连接池。DataSource对象由Web服务器(例如Tomcat)提供,不能通过创建实例的方法来获得DataSource对象,需要利用Java的JNDI(Java Naming and Directory Interface,Java命名和目录接口)来获得DataSource对象的引用,数据库连接池示例代码,public static Connection getConnection() try /Context是包中的一个接口,用于查找数据库连接池的配置文件 Context ctx = new InitialContext(); /向上转型 ctx = (Context)

温馨提示

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

评论

0/150

提交评论