《JDBC和MySQL数据库.ppt》由会员分享,可在线阅读,更多相关《JDBC和MySQL数据库.ppt(24页珍藏版)》请在三一办公上搜索。
1、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为访问不同的数
2、据库提供了一种统一的途径,像ODBC(Open Database Connectivity,ODBC)一样,JDBC对开发者屏蔽了一些具体的细节问题。JDBC的目标是使Java应用程序开发人员使用JDBC就可以连接任何提供了JDBC驱动程序的数据库系统,并且开发人员无须对一些特定数据库系统有过多的了解,从而大大简化和加快开发过程。,JDBC简介,2.JDBC常用类和接口,JDBC主要的接口和类包括Driver接口、DriverManager类、Connection接口、Statement接口、PreparedStatement接口、CallableStatement接口、ResultSet接口
3、以及Metadata类。DriverManager():装载驱动程序,管理应用程序与驱动程序之间的连接。Driver(由驱动程序开发商提供):将应用程序的API请求转换为特定的数据库请求。Connection():将应用程序连接到特定的数据库。Statement():在一个给定的连接中,用于执行一个静态的数据库SQL语句。,2.JDBC常用类和接口(2),PreparedStatement():用于执行一个含有参数的动态SQL语句,该接口为Statement接口的子接口。CallableStatement():用于执行SQL存储过程的接口,该接口为PreparedStatement的子接口。R
4、esultSet():SQL语句中心完后,返回的数据结果集(包括行、列)。Metadata(包括和java.sql.ResultSetMetadata):关于查询结果集、数据库和驱动程序的元数据信息。,3.使用JDBC API访问数据库,使用JDBC连接数据库的基本步骤,MySQL数据库简介,MySQL简介:较好的可移植性;支持包括Windows、Linux、Solaris在内的多种操作系统;为Java、PHP、.NET、C等多种编程语言提供了API;支持多线程技术;优化的SQL查询算法,有效地提高查询速度;提供了TCP/IP、ODBC和JDBC等多种数据库连接途径;提供了用于管理、检查、优化
5、数据库操作的管理工具;具有处理千万条记录的能力;支持多种字符编码。,安装和配置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 NUL
6、L,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 MO
7、DIFY 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;,
8、安装和配置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)be
9、ginselect*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)建立与数据库的连接利用DriverMa
10、nager类的类方法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实例。然
11、后通过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 n
12、ews 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
13、.out.println(编号:+id+,标题:+title+,作者:+username+,发布日期:+time);,使用JDBC API访问数据库,(5)关闭相关连接操作数据库完毕后,需要关闭相应连接以释放资源,具体方法如下。/关闭ResultSet实例rsrs.close();/关闭Statement实例statementstatement.close();/关闭Connection实例concon.close();,JDBC实现查询(较完整实例),Class.forName();/driver classConnection conn=DriverManager.getConnectio
14、n(jdbc:mysql:/localhost:3306/mytest,root,“123456);/JDBC url,username,passwordString 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直接访问数据库中的数据,每一次数据访
15、问请求都必须经历建立数据库连接、操作数据和关闭数据库连接等步骤。连接并打开数据库是一件既消耗资源又费时的工作。如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。数据库连接池技术是解决此类问题最常用的方法。所谓数据库连接池,就是在一个虚拟的池中,预先创建好一定数量的Connection对象等待客户端的连接,当有客户端连接时,则分配一个空闲的Connection对象给客户端连接数据库;当这个客户端请求结束时,则将Connection对象归还给池中,用来等待下一个客户端的访问。,数据库连接池(Database pool)工作原理,工作原理:(1)预定义一定数量的连接,并存放在
16、数据库连接池中;(2)当客户端请求一个数据库连接时,连接池将为该请求从数据库连接池中分配一个空闲的连接,而不是重新建立一个连接对象;当该请求结束后,该连接会重新回到数据库连接池中,而不是直接将其释放;(3)当连接池中的空闲连接数量低于下限时,连接池将会根据配置信息追加一定数量的连接对象,当空闲连接数量高于上限时,连接池会释放一定数量的连接。,数据库连接池使用方法,(1)基于Web服务器的数据库连接池绝大多数Web服务器都支持数据库连接池技术,下面以Tomcat服务器为例配置访问MySQL数据库的数据库连接池,具体步骤如下。第一步:在Web应用的META-INF下新建context.xml文件,
17、配置数据源。,2,修改 WEB-INF/web.xml,添加如下内容:MySQL Database DBPool javax.sql.DataSource Container说明:(此步骤在有的Java Web服务器上可省略)这里的要与context.xml中的name属性一致,5.数据库连接池简介,第二步:使用JNDI访问数据库连接池。JDBC提供了接口,负责与数据库建立连接,在应用中无需编写连接数据库代码,便可直接从数据源(context.xml)中获得数据库连接。在DataSource中预先建立了多个数据库连接,这些数据库连接保存在数据库连接池中,当程序访问数据库时,只需从连接池中取出空
18、闲的连接,访问结束后,再将连接归还给连接池。DataSource对象由Web服务器(例如Tomcat)提供,不能通过创建实例的方法来获得DataSource对象,需要利用Java的JNDI(Java Naming and Directory Interface,Java命名和目录接口)来获得DataSource对象的引用,数据库连接池示例代码,public static Connection getConnection()try/Context是javax.name包中的一个接口,用于查找数据库连接池的配置文件Context ctx=new InitialContext();/向上转型ctx=
19、(Context)ctx.lookup(java:comp/env);DataSource ds=(DataSource)ctx.lookup(DBPool);conn=ds.getConnection();catch(Exception e)e.printStackTrace();return conn;,数据库连接池使用方法,(2)独立于Web服务器的数据库连接池 尽管现在大部分的应用服务器都提供了自己的数据库连接池方案,但有些时候,若我们的Web应用是一个独立的应用程序,并不是普通的Web/Java EE应用,而且是单独运行的,无须应用服务器的支持。这种情况下,应用程序就需要建立独立的数据库连接池方案了。这里,介绍如何利用Apache的DBCP建立独立于Web服务器的数据库连接池。第一步:下载必需的JAR包,分别是:DBCP包,目前最新版本为1.4,下载地址:;Pool包,目前最新版本为,下载地址:。将上述两个JAR文件加载到应用环境变量中即可使用它们创建独立于Web服务器的数据库连接池了。第二步:使用DBCP创建数据库连接池公共类。在创建数据库连接池公共类时,可以使用XML文件来传入需要的参数或者.properties资源文件。(具体配置步骤,将在后面讲 Spring框架时进行),Questions&Answers,
链接地址:https://www.31ppt.com/p-6510348.html