收藏 分享(赏)

第十五讲+Java数据库连接.ppt

上传人:czsj190 文档编号:4611727 上传时间:2019-01-04 格式:PPT 页数:49 大小:454KB
下载 相关 举报
第十五讲+Java数据库连接.ppt_第1页
第1页 / 共49页
第十五讲+Java数据库连接.ppt_第2页
第2页 / 共49页
第十五讲+Java数据库连接.ppt_第3页
第3页 / 共49页
第十五讲+Java数据库连接.ppt_第4页
第4页 / 共49页
第十五讲+Java数据库连接.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

1、第15章 Java数据库连接,15.1 创建数据源 15.2 JDBC-ODBC桥接器 15.3 顺序查询 15.4 可滚动结果集 15.5 排序查询 15.6 模糊查询 15.7 随机查询 15.8 更新、添加、删除记录 15.9 预处理语句 15.10 数据库访问中的套接字技术,第15章 Java数据库连接,教学目的:学习在JAVA中如何建立数据源,学习对数据源的访问,对数据内容的查询及更改等基本操作。,第15章 Java数据库连接,教学内容: 1、JDBC与数据库概述 2、访问数据库 3、数据库查询 4、更新、添加、删除记录 5、JDBC事务支持 重点难点内容: 数据库的建立以及内容的查

2、询。,补充:基本概念,一、关系数据库中的基本概念: 数据库:是应用程序要通过关系数据库管理系统进行管理的数据的总称,通常由多个相互之间存在各种关系的数据表构成。 数据表 数据记录 数据字段 主码 外码,补充:基本概念,二、SQL简介SQL最初是IBM公司为关系数据库管理系统System R设计的查询语言,1986年美国国家标准局的数据库委员会X3H2批准了它作为关系数据库语言的美国标准。此后不久,国际标准化组织ISO也将其作为关系数据库语言的国际标准。,补充:基本概念,SQL基本语句有下列几种: 1、查询语句 SELECT DISTINCTWHERE 例: SELECT * FROM pers

3、on SELECT id,name,sex,birthday FROM person,补充:基本概念,SELECT * FROM person WHERE name LIKE 李% 2、插入语句 INSERT INTO (VALUES 例 INSERT INTO person (id, name, sex,) VALUES (CLINT, 张三, 男) 3、修改语句 UPDATE SET 字段=字段值 ,字段=字段值 WHERE ,补充:基本概念,三、 JDBC介绍 JDBC(Java DataBase Connection)是Java数据库连接API。简单地说,JDBC能完成3件事: 与一个

4、数据库建立连接。 向数据库发送SQL语句。 处理数据库返回的结果。,补充:基本概念,四、JDBC常用类与方法1、DriverManager类: 负责管理JDBC驱动程序。使用JDBC驱动程序之前,必须先将驱动程序加载并向DriverManager注册后才可以使用,同时提供方法来建立与数据库的连接。 方法: 1)Class.forName(String driver); /加载注册驱动程序,补充:基本概念,2)static Connection getConnection(String url,String user,String password) throwsSQLException; /取

5、得对数据库的连接。 3)Static Driver getDriver(String url) throws SQLExcetion; /在已经向DriverManager注册的/驱动程序中寻找一个能够打开url所指定的数据库/的驱动程序。,补充:基本概念,2、Connection类 负责维护JSP/JAVA数据库程序和数据库之间 的联机。可以建立三个非常有用的类对象。常用方 法如下: Statement createStatement() throws SQLException; /建立Statement类对象 statement createStatement(int resultSetT

6、ype,int resultSetConcurrency) throws SQLException; / 建立Statement类对象,补充:基本概念,resultSetType的取值如下: 1)TYPE_FORWARD_ONLY 结果集不可滚动。 2)TYPE_SCROLL_INSENSITIVE 结果集可滚动,不反映数据库的变化。 3)TYPE_SCROLL_SENSITIVE 结果集可滚动,反映数据库的变化。 4)resultSetConcurrency值。 5)CONCUR_READ_ONLY 不能用结果集更新数据。 6)CONCUR_UPDATABLE 能用结果集更新数据。,补充:基

7、本概念,DatabaseMetaData getMetaData()throws SQLException; /建立DatabaseMetaData类对象 PreparedStatement prepareStatement(String sql) throws SQLException; /建立PreparedStatement类对象 boolean getAutoCommit() throwsSQLException /返回Connection类对象的 AutoCommit状态,补充:基本概念,void close() throws SQLException /结束Connection对象

8、对数据库的联机。 boolean isClosed() throws SQLException /测试是否已经关闭Connection类对象对数据库的联机。,补充:基本概念,3、Statement类 通过Statement类所提供的方法,可以利用标准的SQL命令,对数据库直接新增、删除或修改操作 方法: 1)ResultSet executeQuery(String sql) throws SQLException /使用SELECT命令对数据库进行查询,补充:基本概念,2)int executeUpdate(String sql) throws SQLException /使用INSERTD

9、ELETEUPDATE对数据库进行新增、删除和修改操作。 3)void close() throws SQLException /结束Statement类对象对数据库的联机。,补充:基本概念,4、PreparedStatement类 PreparedStatement类和Statement类的不同之处在于PreparedStatement类对象会将传入的SQL命令事先编好等待使用,当有单一的SQL指令比多次执行时,用PreparedStatement类会比Statement类有效率常用方法如下: 1)ResultSet executeQuery() throws SQLException /使

10、用SELECT命令对数据库进行查询 。,补充:基本概念,2) int executeUpdate() throws SQLException /使用INSERTDELETEUPDATE对数据库进行新增、删除和修改操作。 3)void setInt(int parameterIndex,int x) throws SQLException /设定整数类型数值给PreparedStatement类对象的IN参数 。,补充:基本概念,4)void setFloat(int parameterIndex,float x) throws SQLException /设定浮点数类型数值给PreparedS

11、tatement类/对象的IN参数。 5) void setNull(int parameterIndex,int sqlTyp throws SQLException /设定NULL类型数值给PreparedStatement类/对象的IN参数。,补充:基本概念,6)void setString(int parameterIndex,String x) throws SQLException /设定字符串类型数值给PreparedStatement类/对象的IN参数。 7)void setDate(int parameterIndex,Date x) throws SQLException

12、/设定日期类型数值给PreparedStatement类对/象的IN参数。,补充:基本概念,8)void setTime(int parameterIndex,Time x) throws SQLException /设定时间类型数值给PreparedStatement类对象的IN参数。,补充:基本概念,5、ResultSet类 负责存储查询数据库的结果。并提供一系列的方法对数据库进行新增、删除和修改操作。也负责维护一个记录指针(Cursor),记录指针指向数据表中的某个记录,通过适当的移动记录指针,可以随心所欲的存取数据库,加强程序的效率。方法如下: 1)boolean absolute(i

13、nt row) throws SQLException /移动记录指针到指定的记录。,补充:基本概念,2)void beforeFirst() throws SQLException /移动记录指针到第一笔记录之前。 3)void afterLast() throws SQLException /移动记录指针到最后一笔记录之后。 4)boolean first() throws SQLException /移动记录指针到第一笔记录。 5)boolean last() throws SQLException /移动记录指针到最后一笔记录。,补充:基本概念,6)boolean next() thr

14、ows SQLException /移动记录指针到下一笔记录。 7)boolean previous() throws SQLException /移动记录指针到上一笔记 录。,补充:基本概念,五、数据库访问过程一个简单的数据库查询包括如下步骤:载入JDBC数据库驱动程序,建立与数据库的连接,在建立数据库连接的前提下执行SQL语句,取结果集和结果信息,提交事务,关闭数据库。如果是更新操作,则执行SQL语句后没有结果集。,补充:基本概念,1、 JDBCODBC访问的流程 JDBC Driver Mannager-JDBCODBC桥-ODBC-数据库客户机驱动库-数据库服务器-返回查询结果,在这种

15、访问中值的我们注意的是虽然JAVA是“Write Once ,Run Anywhere”,但是如果通过这种访问的话,需要客户端必须设置ODBC和有相应的数据库客户机的驱动。由于不是所有的数据库服务器提供商都提供JDBC驱动程序(给JDBC访问提供相应的接口),所以就有了JDBCODBC Bridge:应用程序-JDBC API-JDBC-ODBC-ODBC API-ODBC层-数据源。,补充:基本概念,2、JDBC驱动返回查询结果 JDBC Driver Mannager-局部JDBC驱动-客户端数据库-数据库服务JDBC驱动返回查询结果器-返回查询结果,这种访问事实上是转换JDBC调用为相应

16、的数据库(Oracle, Sybase, Informix, DB2, 和其他的数据库数据库管理系统)的客户端API调用,这种方式的访问需要相应的数据库提供商提供相应的JDBC驱动程序,但是有一种好处,可以独立于odbc用于可以随处可Run的客户端的浏览器中的Applet程序。,补充:基本概念,3、连接数据库 JDBC URL 语法:jdbc: 如:jdbc:odbc:studentdb , jdbc:dbpro:stujdbc:odbc/:5000/stu 建立连接 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); String url=“jdbc

17、:odbc:studentdb”; Connection con=DriverManager.getConnection (url,”user”,”pass”);,补充:基本概念,4、了解数据库信息可以通过取得DatabaseMetaData对象来了解数据源的信息:DatabaseMetaData bma=con.gtMetaData();DatabaseMetaData对象有很多方法取得数据库的基本信息(方法如下) getURL,getUserName(),getDatabaseProduceName(),getDatabaseProduceVersion(),isReadOnly(),ge

18、tDriverName(),getDriverVersion(), getTabels(), getColumns(), getIndexInfo()。,补充:基本概念,六、数据库查询所有SQL语句都是通过Statement或其子类(PreparedStatement, CallableStatement )的对象实现。1、Statement Statement用于一般SQL查询语句的执行 1)创建:Connection对象的createStatement方法可以 创建Statement对象如:Statement stmt=con.createStatement();,补充:基本概念,2)执行

19、方法如下: executeQuery,executeUpdate,execute具体使用如下:String tsql=“select name,age from table1”;ResultSet rs=stmt.executeQuery(tsql);非select语句如:int nRet=stmt.executeUpdate(tsql); execute方法用于:返回多个结果集。3)关闭:close stmt.close();,补充:基本概念,2、PreparedStatement 通过PreparedStatement可以将SQL语句预编译,还可以内嵌参数进行预编译具体使用如下: Stri

20、ng tsql=“Select * from table1 where id=”+nID+” and name=”+strName+”;或:PreparedStatement ps=con.preparedStatement(“delete from table1 where id=? And name=?”);ps.setInt(1,nID); ps.setString(2,strName);ps.executeUpdate();,补充:基本概念,七、读取结果集中的数据可以通过ResultSet类来查询结果集中的数据。如方法:next,getXXX(XXX为各种类型) 等,使用如下:Resu

21、ltSet rs=st.executeQuery(“Select * from table1”);while(rs.next() rs.getInt , rs.getString , ,15.1 创建数据源,为了同数据库建立连接,首先要创建一个ODBC数据源。打开Windows中的控制面,对于WindowXP,选择“性能和维护”“管理工具”“数据源(ODBC)” ;对于Window2000,选择“管理工具”“数据源(ODBC)”;对于Window9X,选择 “数据源(ODBC)”。也可以使用“资源管理器”双击c:windowssystem32下的可执行文件“odbcad32”打开“数据源(OD

22、BC)”。,15.1 创建数据源,建立数据源的步骤: 打开“数据源(ODBC)”将出现ODBC数据源管理器对话框 在ODBC数据源管理器对话框中选择“用户DSN”,然后单击“添加”按钮,将出现安装数据源的驱动程序对话框,可以在选择列表中选择相应的驱动程序。 在选择驱动程序对话框选择好驱动程序后,单击“完成”按钮,将出现创建数据源对话框,。在该对话框中,你需要为创建的数据源起一个名称,并为你创建的数据源选择一个数据库。,15.2 JDBC-ODBC桥接器,1、建立一个JDBC-ODBC桥接器为了要连接到这个数据库,我们首先 要建立一个JDBC-ODBC桥接器:Class.forName(“sun

23、.jdbc.odbc.JdbcOdbcDriver“);,15.2 JDBC-ODBC桥接器,2、连接到数据库 Connection con=DriverManager.getConnection (“jdbc:odbc:数据源名字“,“login name“,“ password “); 3、发送SQL语句 Statement sql=con.createStatement(); 4、处理查询结果 ResultSet rs=sql.executeQuery (“SQL语句“);,15.3 顺序查询,使用结果集Result的next()方法,可以顺序的查询。一个结果集将游标最初定位在第一行的前

24、面,第一次调用next()方法使游标移动到第一行。next()方法返回一个boolean型数据,当游标移动到最后一行之后返回false。,15.4 可滚动结果集,1、要得到一个可滚动的结果集,必须首先使 用下述方法先获得一个Statement对象: Statement stmt=con.createStatement(int type ,int concurrency); 2、再根据参数的type、concurrency的取值 情况,stmt返回相应类型的结果集: ResultSet re=stmt.executeQuery(SQL语句);,15.4 可滚动结果集,3、type的取值决定滚动方

25、式,取值情况如下: ResultSet.TYPE_FORWORD_ONLY 结果集的游标只能向下滚动。 ResultSet.TYPE_SCROLL_INSENSITIVE 结果集的游标可以上下移动,当数据库变化时,当前结果集不变。 ResultSet.TYPE_SCROLL_SENSITIVE 返回可滚动的结果集,当数据库变化时,当前结果集同步改变。,15.4 可滚动结果集,4、Concurrency 取值决定是否可以用结果 集更新数据库,Concurrency取值: ResultSet.CONCUR_READ_ONLY 不能用结果集更新数据库中的表。 ResultSet.CONCUR_UPD

26、ATETABLE 能用结果集更新数据库中的表。,15.5 排序查询,可以在SQL语句中使用ORDER BY子语 句,对记录排序。,15.6 模糊查询,可以用SQL语句操作符LIKE进行模式般配,使用“%”代替0个或多个字符,用一个下划线“_”代替1个字符。比如,下述语句查询姓氏是“王”的记录:rs=sql.executeQuery(“SELECT * FROM students WHERE 姓名 LIKE 王% “);,15.7 随机查询,用Math类的静态方法random()可以产生一个大于0小于1的随机数,再用下述公式:int i=(int)(Math.random()*number);产

27、生一个0到number之间的随机数,根据这个随机数将游标移动到相应的行,并输出该行记录。,15.8 更新、添加、删除记录,使用SQL语句更新记录中字段的值 Statement对象调用方法:public int executeUpdate(String sqlStatement); 通过参数sqlStatement指定的方式实现对数 据库表中记录的字段值的更新。,15.9 预处理语句,当向数据库发送一个SQL语句,比如“Select * From chengjibiao”,数据库库中的SQL解释器负责将把SQL语句生成地层的内部命令,然后执行该命令,完成有关的数据操作。如果不断地向数据库提交SQ

28、L语句势必增加数据库中SQL解释器的负担,影响执行的速度。如果应用程序能针对连接的数据库,事先就将SQL语句解释为数据库地层的内部命令,然后直接让数据库去执行这个命令,显然不仅减轻了数据库的负担,而且也提高了访问数据库的速度。,15.9 预处理语句,对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么 con就可以调用 prepareStatement(String sql)方法对SQL语句进行预编译处理,生成该数据库地层的内部命令,并将该命令封装在PreparedStatement对象中,那么该对象调用相应的方法都可以使得该地层的内部命令被数据库执行。,15.10 数据库访问中的套接字技术,利用套接字连接向服务器发送一个查询的条件,而服务器负责对数据库的查询,然后服务器再将查询的结果利用建立的套接字返回给客户端。,课后习题:P411 1,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报