《第十五讲Java数据库连接》由会员分享,可在线阅读,更多相关《第十五讲Java数据库连接(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 数据库访问中的套接字技术数据库访问中的套接字技术 催剥疚纷藏慈嚣畜稳奸缚厕洽咀滦纵溺郊垦嗅飘吗助茬泳巧岂彪锹缆帝粗第十五讲+Java数据库连接第十五讲+Java数据库连接第第15章章 Java数据库连接数据库连接 教学目的:教学目的: 学习在学习在JAVA中
2、如何建立数据源,学习中如何建立数据源,学习对数据源的访问,对数据内容的查询及更改对数据源的访问,对数据内容的查询及更改等基本操作。等基本操作。仁裕妊墓融抚业誊仲睡照催淘蹋刺气宾寡保得锌漾牲彰书恳喳丧礁鸡型诞第十五讲+Java数据库连接第十五讲+Java数据库连接第第15章章 Java数据库连接数据库连接教学内容教学内容:1、JDBC与数据库概述与数据库概述 2、访问数据库、访问数据库3、数据库查询、数据库查询4、更新、添加、删除记录、更新、添加、删除记录5、JDBC事务支持事务支持 重点难点内容:重点难点内容:数据库的建立以及内容的查询。数据库的建立以及内容的查询。布柄妆区晾劫童卞壤玖玻哀翰冯
3、泰评夺粤正客短池趣奖肛镣挫并稽穗阻嘎第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念一、关系数据库中的基本概念一、关系数据库中的基本概念一、关系数据库中的基本概念一、关系数据库中的基本概念: :数据库:是应用程序要通过关系数据库管理系统数据库:是应用程序要通过关系数据库管理系统数据库:是应用程序要通过关系数据库管理系统数据库:是应用程序要通过关系数据库管理系统进行管理的数据的总称,通常由多个相互之间存进行管理的数据的总称,通常由多个相互之间存进行管理的数据的总称,通常由多个相互之间存进行管理的数据的总称,通常由多个相互之间存在各种关系的数据表构成。在各种关系
4、的数据表构成。在各种关系的数据表构成。在各种关系的数据表构成。数据表数据表数据表数据表数据记录数据记录数据记录数据记录数据字段数据字段数据字段数据字段主码主码主码主码外码外码外码外码微沥横宪瞩顿杖露尧乾嫂该润阐假妹逛匈然砸享牡赏柴乃拯釜提惜滥蕊铰第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 二、二、SQL简介简介 SQL最初是最初是IBM公司为关系数据库管理系公司为关系数据库管理系统统System R设计的查询语言,设计的查询语言,1986年美国年美国国家标准局的数据库委员会国家标准局的数据库委员会X3H2批准了它批准了它作为关系数据库语言的美国标准。此
5、后不久,作为关系数据库语言的美国标准。此后不久,国际标准化组织国际标准化组织ISO也将其作为关系数据库也将其作为关系数据库语言的国际标准。语言的国际标准。漓径锐勺处筋啤彤械琉市动碍杏矣扎茂巷答惯辛爷熙搓交魄牢琐沙竿博讨第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念SQL基本语句有下列几种:基本语句有下列几种:1、查询语句、查询语句SELECT DISTINCT目标字段列表目标字段列表FROMWHERE例:例:SELECT * FROM personSELECT id,name,sex,birthday FROM person赌饺铬胞骤翱绳开阿缸窒拧卖拂砷孺
6、山芭柒剖黑凛旅恨蝎拢迎寝牙湛酞讲第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念SELECT * FROM person WHERE name LIKE SELECT * FROM person WHERE name LIKE 李李李李% 2 2、插入语句、插入语句、插入语句、插入语句INSERT INTO INSERT INTO (VALUESVALUES例例例例 INSERT INTO person (id, name, sex,) INSERT INTO person (id, name, sex,) VALUES (VALUES ( CLINTCLI
7、NT , , 张三张三张三张三 , 男男男男 ) ) 3 3、修改语句、修改语句、修改语句、修改语句UPDATE UPDATE SET SET 字段字段字段字段=字段值字段值字段值字段值 ,字段,字段,字段,字段=字段值字段值字段值字段值 WHERE WHERE 导死住啪麻矫蝉弄扔葱钾倚塘哦胃童桓冒锁薯飘乾蟹腮橡税邦艺敛奢戮瞥第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念三、三、 JDBC介绍介绍JDBC(Java DataBase Connection)是)是Java数据库连接数据库连接API。简单地说,。简单地说,JDBC能能完成完成3件事:件事:与一
8、个数据库建立连接。与一个数据库建立连接。向数据库发送向数据库发送SQL语句。语句。处理数据库返回的结果。处理数据库返回的结果。北踌滥菱踊毡版掏挖脉普端岿拖虎竟悄驰奠牌馈讳逾陪冒羽肄赏败劳束礼第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 四、四、JDBCJDBC常用类与方法常用类与方法 1、DriverManager类:类: 负责管理负责管理负责管理负责管理JDBCJDBC驱动程序。使用驱动程序。使用驱动程序。使用驱动程序。使用JDBCJDBC驱动程序之驱动程序之驱动程序之驱动程序之前,必须先将驱动程序加载并向前,必须先将驱动程序加载并向前,必须先将驱动程
9、序加载并向前,必须先将驱动程序加载并向DriverManagerDriverManager注注注注册后才可以使用,同时提供方法来建立与数据库的册后才可以使用,同时提供方法来建立与数据库的册后才可以使用,同时提供方法来建立与数据库的册后才可以使用,同时提供方法来建立与数据库的连接。连接。连接。连接。 方法:方法:方法:方法: 1 1)Class.forName(StringClass.forName(String driver);driver); /加载注册驱加载注册驱加载注册驱加载注册驱动程序动程序动程序动程序 脏擒狮践偿谜菏漆浚碍笛亏唾妊喀臀鞘洗橱逼漾雾订缸插驰院颓秽鹰蚂牛第十五讲+Java
10、数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 2)static 2)static ConnectionConnection getConnection(StringgetConnection(String url,url, String String user,Stringuser,String password)password) throwsthrows SQLException;SQLException; /取得对数据库的连接。取得对数据库的连接。取得对数据库的连接。取得对数据库的连接。 3)Static3)Static DriverDriver getDriver
11、(StringgetDriver(String url)url) throwsthrows SQLExcetion; SQLExcetion; /在已经向在已经向在已经向在已经向DriverManagerDriverManager注册的注册的注册的注册的/驱动程序中寻找一个能够打开驱动程序中寻找一个能够打开驱动程序中寻找一个能够打开驱动程序中寻找一个能够打开urlurl所指定的数据库所指定的数据库所指定的数据库所指定的数据库/的驱动程序。的驱动程序。的驱动程序。的驱动程序。 饥诸擅翘棕槐拓屋浚逻脂瓶棠匀剥栅梨漠的这帝杉滓殊怨适爵辈鳞垂帘笼第十五讲+Java数据库连接第十五讲+Java数据库连接
12、补充:基本概念补充:基本概念2、Connection类类负责维护负责维护负责维护负责维护JSP/JAVAJSP/JAVA数据库程序和数据库之间数据库程序和数据库之间数据库程序和数据库之间数据库程序和数据库之间的联机。可以建立三个非常有用的类对象。常用方的联机。可以建立三个非常有用的类对象。常用方的联机。可以建立三个非常有用的类对象。常用方的联机。可以建立三个非常有用的类对象。常用方法如下:法如下:法如下:法如下: Statement Statement createStatement()createStatement() throwsthrows SQLException; SQLExcept
13、ion; /建立建立建立建立StatementStatement类对象类对象类对象类对象 statementstatement createStatement(intcreateStatement(int resultSetTyresultSetType,intpe,int resultSetConcurrency)resultSetConcurrency) throwsthrows SQLExSQLException;ception;/ 建立建立建立建立StatementStatement类对象类对象类对象类对象 斯巍耻芒崇怕没警潭蔫轿艘司搜哼胡哆卿限群屋举解贪稽糯枢纱欠艰正紊第十五讲+Ja
14、va数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念resultSetType的取值如下:的取值如下:1 1)TYPE_FORWARD_ONLYTYPE_FORWARD_ONLY 结果集不可滚动。结果集不可滚动。结果集不可滚动。结果集不可滚动。 2 2)TYPE_SCROLL_INSENSITIVETYPE_SCROLL_INSENSITIVE 结果集可滚结果集可滚结果集可滚结果集可滚动,不反映数据库的变化。动,不反映数据库的变化。动,不反映数据库的变化。动,不反映数据库的变化。 3 3)TYPE_SCROLL_SENSITIVETYPE_SCROLL_SENSITIVE 结
15、果集可滚动,结果集可滚动,结果集可滚动,结果集可滚动,反映数据库的变化。反映数据库的变化。反映数据库的变化。反映数据库的变化。 4 4)resultSetConcurrencyresultSetConcurrency值。值。值。值。 5 5)CONCUR_READ_ONLYCONCUR_READ_ONLY 不能用结果集更新不能用结果集更新不能用结果集更新不能用结果集更新数据。数据。数据。数据。 6 6)CONCUR_UPDATABLECONCUR_UPDATABLE 能用结果集更新数能用结果集更新数能用结果集更新数能用结果集更新数据。据。据。据。 米讽塑晶确般胆二扔辜单幌迸翟金介峪撮孽幂韧侨锁
16、承簿镀翁皇会霞渺烷第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 DatabaseMetaData DatabaseMetaData getMetaData()getMetaData() throws throws SQLException;SQLException; / /建立建立建立建立DatabaseMetaDataDatabaseMetaData类对象类对象类对象类对象 PreparedStatement PreparedStatement prepareStatementprepareStatement (String (String sql)s
17、ql) throwsthrows SQLException;SQLException; / /建立建立建立建立PreparedStatementPreparedStatement类对象类对象类对象类对象 boolean boolean getAutoCommit()getAutoCommit() throwsthrows SQLException SQLException /返回返回返回返回ConnectionConnection类对象的类对象的类对象的类对象的 AutoCommit AutoCommit状态状态状态状态佣写制勉必宿麦歇架茫所吧舌妙床奠晚氖大胚阉景陷着亦最笺雏概羌赃球第十五讲+
18、Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 voidclose()throwsSQLException /结束结束Connection对象对数据库的联机。对象对数据库的联机。booleanisClosed()throwsSQLException/测试是否已经关闭测试是否已经关闭Connection类类对象对数据库的联机。对象对数据库的联机。馏赞侥灼稠阜邱升栓质坊盲椭镐几伟椅迢涂蚕酥闲鸟久拓秋坍石矿贞逗达第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 3、Statement类类通过通过Statement类所提供的方法,可以类所
19、提供的方法,可以利用标准的利用标准的SQL命令,对数据库直接新增、命令,对数据库直接新增、删除或修改操作删除或修改操作方法:方法:1)ResultSetexecuteQuery(Stringsql) throwsSQLException/使用使用SELECT命命令对数据库进行查询令对数据库进行查询菠惊垫好八哇狞膨否咒述落兄酿炕饺六撂煤埂蕉迅昆嗜渐羌磺矾寝徽盖宙第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 2)intexecuteUpdate(Stringsql)throwsSQLException/使用使用INSERTDELETEUPDATE对对数据库进
20、行新增、删除和修改操作。数据库进行新增、删除和修改操作。3)voidclose()throwsSQLException/结束结束Statement类对象对数据库的联机。类对象对数据库的联机。纯氛魔亏塞可炒奸元昧甩搐渭宇纵削憨掸要踊枢士辩裁叫尸咱饱腑隙分赠第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 4、PreparedStatement类类 PreparedStatement PreparedStatement类和类和类和类和StatementStatement类的不类的不类的不类的不同之处在于同之处在于同之处在于同之处在于PreparedStateme
21、ntPreparedStatement类对象会将传入类对象会将传入类对象会将传入类对象会将传入的的的的SQLSQL命令事先编好等待使用,当有单一的命令事先编好等待使用,当有单一的命令事先编好等待使用,当有单一的命令事先编好等待使用,当有单一的SQLSQL指指指指令比多次执行时,用令比多次执行时,用令比多次执行时,用令比多次执行时,用PreparedStatementPreparedStatement类会比类会比类会比类会比StatementStatement类有效率常用方法如下:类有效率常用方法如下:类有效率常用方法如下:类有效率常用方法如下:1 1)ResultSetResultSet ex
22、ecuteQuery()executeQuery() throwsthrows SQLExSQLExceptionception /使用使用使用使用SELECTSELECT命令对数据库进行查询命令对数据库进行查询命令对数据库进行查询命令对数据库进行查询 。诽服卜造傅刷侩啊寡孪斑败暴义歼穿武抵千极丘遭眨是搓综成砸略蛀颈糜第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 2) intint executeUpdate()executeUpdate() throwsthrows SQLExceptionSQLException /使用使用INSERTDELETEU
23、PDATE对数据库对数据库进行新增、删除和修改操作。进行新增、删除和修改操作。 3)voidsetInt(intparameterIndex,intx)throwsSQLException/设定整数类型数值给设定整数类型数值给PreparedStatement类对象的类对象的IN参数参数。促哼仕怜该颖徒刷撂纫仕捉羡矗戳腿灸橇牺芜撅铃喷席淫捧泣疫腮遥狡彬第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 4 4)voidvoid setFloat(intsetFloat(int parameterIndex,floatparameterIndex,float x
24、)x) throws throws SQLExceptionSQLException /设定浮点数类型数值给设定浮点数类型数值给设定浮点数类型数值给设定浮点数类型数值给PreparedStatementPreparedStatement类类类类/对象的对象的对象的对象的ININ参数。参数。参数。参数。 5 5) voidvoid setNull(intsetNull(int parameterIndex,intparameterIndex,int sqlTypsqlTyp t throwshrows SQLExceptionSQLException /设定设定设定设定NULLNULL类型数值给
25、类型数值给类型数值给类型数值给PreparedStatementPreparedStatement类类类类/对象的对象的对象的对象的ININ参数。参数。参数。参数。 晌忻塘股贴额肮膝漾恫酗遗镊皖靛见县触杖裂双粉膝柿殿放柜搽壬异热积第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 6 6)voidvoid setString(intsetString(int parameterIndex,StringparameterIndex,String x)x) throwsthrows SQLExceptionSQLException /设定字符串类型数值给设定字符串
26、类型数值给设定字符串类型数值给设定字符串类型数值给PreparedStatementPreparedStatement类类类类/对象的对象的对象的对象的ININ参数。参数。参数。参数。 7 7)voidvoid setDate(intsetDate(int parameterIndex,DateparameterIndex,Date x)x) throwsthrows SQLExceptionSQLException /设定日期类型数值给设定日期类型数值给设定日期类型数值给设定日期类型数值给PreparedStatementPreparedStatement类对类对类对类对/象的象的象的象的I
27、NIN参数。参数。参数。参数。 却比舵瓷胚冕啥翘号私砒往木料欺雍写柏案菲惕抑久蹬雅哦威玲茅语稼姻第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 8) voidsetTime(intparameterIndex, Timex)throwsSQLException /设定时间类型数值给设定时间类型数值给PreparedStatement类对象的类对象的IN参数。参数。 未由哈痢坊请嘲漂钉砂侧蓬暇带韭唱愈携勉恶赵彼枯染逆驶肘雪师树友娠第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 5、ResultSet类类负责存储查询数据库
28、的结果。并提供一系列的方负责存储查询数据库的结果。并提供一系列的方负责存储查询数据库的结果。并提供一系列的方负责存储查询数据库的结果。并提供一系列的方法对数据库进行新增、删除和修改操作。也负责维法对数据库进行新增、删除和修改操作。也负责维法对数据库进行新增、删除和修改操作。也负责维法对数据库进行新增、删除和修改操作。也负责维护一个记录指针(护一个记录指针(护一个记录指针(护一个记录指针(CursorCursor),记录指针指向数据),记录指针指向数据),记录指针指向数据),记录指针指向数据表中的某个记录,通过适当的移动记录指针,可以表中的某个记录,通过适当的移动记录指针,可以表中的某个记录,通
29、过适当的移动记录指针,可以表中的某个记录,通过适当的移动记录指针,可以随心所欲的存取数据库,加强程序的效率。方法如随心所欲的存取数据库,加强程序的效率。方法如随心所欲的存取数据库,加强程序的效率。方法如随心所欲的存取数据库,加强程序的效率。方法如下:下:下:下:1 1)booleanboolean absolute(intabsolute(int row)row) throwsthrows SQLExSQLExceptionception /移动记录指针到指定的记录。移动记录指针到指定的记录。移动记录指针到指定的记录。移动记录指针到指定的记录。 废蝇救侍屿敢嫂拉屉累遂党翠檬卜稚映忽臀知渤腊陆林
30、裳釜储蹬锯拜斩垒第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 2 2)voidvoid beforeFirst()beforeFirst() throwsthrows SQLExceptionSQLException / /移动记录指针到第一笔记录之前。移动记录指针到第一笔记录之前。移动记录指针到第一笔记录之前。移动记录指针到第一笔记录之前。 3 3)voidvoid afterLast()afterLast() throwsthrows SQLExceptionSQLException /移动记录指针到最后一笔记录之后。移动记录指针到最后一笔记录之后。
31、移动记录指针到最后一笔记录之后。移动记录指针到最后一笔记录之后。 4 4)booleanboolean first()first() throwsthrows SQLExceptionSQLException /移移移移动记录指针到第一笔记录。动记录指针到第一笔记录。动记录指针到第一笔记录。动记录指针到第一笔记录。 5 5)booleanboolean last()last() throwsthrows SQLExceptionSQLException /移移移移动记录指针到最后一笔记录。动记录指针到最后一笔记录。动记录指针到最后一笔记录。动记录指针到最后一笔记录。 央墒蜒慷丫葡傈晚击杏彬襟豺
32、钮镁娥翔洁塔瞳谍宏螺酌植劲荔赛络奎至鸵第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念6)booleannext()throwsSQLException/移动记录指针到下一笔记录。移动记录指针到下一笔记录。7)booleanprevious()throwsSQLException/移动记录指针到上一笔记移动记录指针到上一笔记录。录。点梯丧祷丰昆扔狼影布瞻厉堵各辱店瑰设樟枉暴焰抡绝烬踌核驱浑没训嗜第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 五、五、数据库访问过程数据库访问过程 一个简单的数据库查询包括如下步骤:一个简单
33、的数据库查询包括如下步骤:载入载入JDBC数据库驱动程序,建立与数据库的数据库驱动程序,建立与数据库的连接,在建立数据库连接的前提下执行连接,在建立数据库连接的前提下执行SQL语句,取结果集和结果信息,提交事务,关语句,取结果集和结果信息,提交事务,关闭数据库。如果是更新操作,则执行闭数据库。如果是更新操作,则执行SQL语语句后没有结果集。句后没有结果集。袍恤赞掠蜡柜结霖坠芹世年缔庐阉诧狼佛瓮贬恼揩稿授仅恢丧未矗透房他第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 1、 JDBCODBC访问的流程访问的流程 JDBC Driver Mannager-JDB
34、CODBC JDBC Driver Mannager-JDBCODBC桥桥桥桥-ODBC-ODBC-数据库客户机驱动库数据库客户机驱动库数据库客户机驱动库数据库客户机驱动库-数据库服务器数据库服务器数据库服务器数据库服务器-返回查询结果,在这种访问中值的我们注意的是返回查询结果,在这种访问中值的我们注意的是返回查询结果,在这种访问中值的我们注意的是返回查询结果,在这种访问中值的我们注意的是虽然虽然虽然虽然JAVAJAVA是是是是“ “Write Once ,Run AnywhereWrite Once ,Run Anywhere” ”,但,但,但,但是如果通过这种访问的话,需要客户端必须设置是
35、如果通过这种访问的话,需要客户端必须设置是如果通过这种访问的话,需要客户端必须设置是如果通过这种访问的话,需要客户端必须设置ODBCODBC和有相应的数据库客户机的驱动。和有相应的数据库客户机的驱动。和有相应的数据库客户机的驱动。和有相应的数据库客户机的驱动。 由于不是所有的数据库服务器提供商都提供由于不是所有的数据库服务器提供商都提供由于不是所有的数据库服务器提供商都提供由于不是所有的数据库服务器提供商都提供JDBCJDBC驱动程序(给驱动程序(给驱动程序(给驱动程序(给JDBCJDBC访问提供相应的接口),访问提供相应的接口),访问提供相应的接口),访问提供相应的接口),所以就有了所以就有
36、了所以就有了所以就有了JDBCODBC Bridge:JDBCODBC Bridge: 应用程序应用程序-JDBC API-JDBC-ODBC-ODBC API-JDBC API-JDBC-ODBC-ODBC API-ODBCODBC层层-数据源。数据源。城流泌岩辊椽制魄榜轩断访漱湾完牟胰彪诲存查兼辙恒铝箍溺凶抚合耀贤第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 2 2、JDBC驱动返回查询结果驱动返回查询结果 JDBC Driver Mannager- JDBC Driver Mannager-局部局部局部局部JDBCJDBC驱动驱动驱动驱动-客户端数
37、据库客户端数据库客户端数据库客户端数据库-数据库服务数据库服务数据库服务数据库服务JDBCJDBC驱动返回查询结驱动返回查询结驱动返回查询结驱动返回查询结果器果器果器果器-返回查询结果,这种访问事实上是转换返回查询结果,这种访问事实上是转换返回查询结果,这种访问事实上是转换返回查询结果,这种访问事实上是转换JDBCJDBC调用为相应的数据库(调用为相应的数据库(调用为相应的数据库(调用为相应的数据库(Oracle, Sybase, Oracle, Sybase, Informix, DB2, Informix, DB2, 和其他的数据库数据库管理系统)和其他的数据库数据库管理系统)和其他的数据
38、库数据库管理系统)和其他的数据库数据库管理系统)的客户端的客户端的客户端的客户端APIAPI调用,这种方式的访问需要相应的数调用,这种方式的访问需要相应的数调用,这种方式的访问需要相应的数调用,这种方式的访问需要相应的数据库提供商提供相应的据库提供商提供相应的据库提供商提供相应的据库提供商提供相应的JDBCJDBC驱动程序,但是有一种驱动程序,但是有一种驱动程序,但是有一种驱动程序,但是有一种好处,可以独立于好处,可以独立于好处,可以独立于好处,可以独立于odbcodbc用于可以随处可用于可以随处可用于可以随处可用于可以随处可RunRun的客户的客户的客户的客户端的浏览器中的端的浏览器中的端的
39、浏览器中的端的浏览器中的AppletApplet程序。程序。程序。程序。亏褂鹃春艇移短窿停耗疟诗人嵌论饮竹舰冷结果撬悠黎珊勿亚盏含憎肤鞋第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 3、连接数据库、连接数据库 JDBC URLJDBC URL语法:语法:语法:语法:jdbc:jdbc:如:如:如:如:jdbc:odbc:studentdb , jdbc:dbpro:stujdbc:odbc:studentdb , jdbc:dbpro:stujdbc:odbc/:5000/stujdbc:odbc/:5000/stu建立连接建立连接建立连接建立连接Cla
40、ss.forName(Class.forName(“ “sun.jdbc.odbc.JdbcOdbcDriversun.jdbc.odbc.JdbcOdbcDriver” ”););String url=String url=“ “jdbc:odbc:studentdbjdbc:odbc:studentdb” ”; ;Connection con=DriverManager.getConnectionConnection con=DriverManager.getConnection(url,(url,” ”useruser” ”, ,” ”passpass” ”););铬量慈洽俗抵谴傅鳖遣遥
41、凑宅渭腥昧短糊蜘傻随豆郝去逾用价罕向傀驶负第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 4、了解数据库信息、了解数据库信息 可以通过取得可以通过取得可以通过取得可以通过取得DatabaseMetaDataDatabaseMetaData对象来了解对象来了解对象来了解对象来了解数据源的信息:数据源的信息:数据源的信息:数据源的信息: DatabaseMetaData bma=con.gtMetaData(); DatabaseMetaData bma=con.gtMetaData(); DatabaseMetaData DatabaseMetaData对象
42、有很多方法取得数据库的对象有很多方法取得数据库的对象有很多方法取得数据库的对象有很多方法取得数据库的基本信息(方法如下)基本信息(方法如下)基本信息(方法如下)基本信息(方法如下) getURL,getUserName(),getDatabaseProduceName(),getDatabaseProduceVersion(),isReadOnly(),getDriverName(),getDriverVersion getURL,getUserName(),getDatabaseProduceName(),getDatabaseProduceVersion(),isReadOnly(),ge
43、tDriverName(),getDriverVersion()(), getTabels( getTabels() ), getColumns getColumns(),(),(),(), getIndexInfo getIndexInfo()。()。()。()。踌拉址郭访铆荫恢匿揩努币辅釜溯魄捏短瘴尺馒辐惮鉴琼鸣营望熙贼碑褂第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 六、数据库查询六、数据库查询六、数据库查询六、数据库查询 所有所有所有所有SQLSQL语句都是通过语句都是通过语句都是通过语句都是通过StatementStatement或其子类或其子
44、类或其子类或其子类(PreparedStatement, CallableStatement )(PreparedStatement, CallableStatement )的对象的对象的对象的对象实现。实现。实现。实现。 1 1、Statement Statement Statement Statement用于一般用于一般用于一般用于一般SQLSQL查询语句的执行查询语句的执行查询语句的执行查询语句的执行 1 1)创建:)创建:)创建:)创建: Connection Connection对象的对象的对象的对象的createStatementcreateStatement方法可以方法可以方法可
45、以方法可以创建创建创建创建StatementStatement对象如:对象如:对象如:对象如: Statement stmt=con.createStatement(); Statement stmt=con.createStatement();楔叁孙散涉寿斋咯魏捏钝娜荡踏瞥染塑单木圭诽集镰稗娘磋让勘撇淹第律第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 2)执行方法如下:)执行方法如下: executeQuery,executeUpdate,execute executeQuery,executeUpdate,execute具具具具体使用如下:体使用如下
46、:体使用如下:体使用如下:String tsql=String tsql=“ “select name,age from table1select name,age from table1” ”; ; ResultSet rs=stmt.executeQuery(tsql); ResultSet rs=stmt.executeQuery(tsql); 非非非非selectselect语句如:语句如:语句如:语句如:int nRet=int nRet= stmt.executeUpdate(tsql); execute stmt.executeUpdate(tsql); execute方法用于:
47、方法用于:方法用于:方法用于:返回多个结果集。返回多个结果集。返回多个结果集。返回多个结果集。 3 3)关闭:)关闭:)关闭:)关闭:closeclose stmt.close(); stmt.close();戳跃卓铺遍题济症伐佩绸丝胡美麻戎绑豹搞税恨惋梳也割花充礁韶玻讯赘第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 2、PreparedStatement 通过通过PreparedStatement可以将可以将SQL语语句预编译,还可以内嵌参数进行预编译具体句预编译,还可以内嵌参数进行预编译具体使用如下:使用如下: String tsql=String
48、tsql=“ “Select * from table1 where Select * from table1 where id=id=” ”+nID+nID+” ” and name= and name=”+strName+strName+”; ; 或:或:或:或:PreparedStatement PreparedStatement ps=con.preparedStatement(ps=con.preparedStatement(“ “delete from delete from table1 where id=? And name=?table1 where id=? And nam
49、e=?” ”);); ps.setInt(1,nID); ps.setString(2,strName); ps.setInt(1,nID); ps.setString(2,strName); ps.executeUpdate(); ps.executeUpdate();董耸津型久律瘩首辰摧糜眉烹纶兽激饰艘灼伊绊啼忽店胀沼绰羡膳杂啦秀第十五讲+Java数据库连接第十五讲+Java数据库连接补充:基本概念补充:基本概念 七、读取结果集中的数据七、读取结果集中的数据 可以通过可以通过ResultSet类来查询结果集中类来查询结果集中的数据。如方法:的数据。如方法:next,getXXX(XXX为各
50、为各种类型种类型) 等,使用如下:等,使用如下: ResultSet rs=st.executeQuery(“Select * from table1”); while(rs.next() rs.getInt , rs.getString , 比陷翻沁陵冗嘘臂枢瞬剃战甩于目疹住署迪褥雍蠢同向炯渔能追猛斋狐但第十五讲+Java数据库连接第十五讲+Java数据库连接15.1 创建数据源 为了同数据库建立连接,首先要创建一为了同数据库建立连接,首先要创建一个个ODBC数据源。打开数据源。打开Windows中的控制面,中的控制面,对于对于WindowXP,选择,选择“性能和维护性能和维护”“管理工具管
51、理工具”“数据源(数据源(ODBC)” ;对于;对于Window2000,选择,选择“管理工具管理工具”“数据数据源(源(ODBC)”;对于;对于Window9X,选择,选择 “数据源(数据源(ODBC)”。也可以使用。也可以使用“资源管理资源管理器器”双击双击c:windowssystem32下的可执下的可执行文件行文件“odbcad32”打开打开“数据源数据源(ODBC)”。央薯床冒搀皇速浦孩苟脸悸叭具畔砒谍铭慢伪绣售皆囚悦曳眺溯陆嗅杨茸第十五讲+Java数据库连接第十五讲+Java数据库连接15.1 创建数据源建立数据源的步骤:建立数据源的步骤:打开打开打开打开“ “数据源(数据源(数据
52、源(数据源(ODBCODBC)” ”将出现将出现将出现将出现ODBCODBC数据源数据源数据源数据源管理器对话框管理器对话框管理器对话框管理器对话框 在在在在ODBCODBC数据源管理器对话框中选择数据源管理器对话框中选择数据源管理器对话框中选择数据源管理器对话框中选择“ “用户用户用户用户DSNDSN” ”,然后单击,然后单击,然后单击,然后单击“ “添加添加添加添加” ”按钮,将出现安装数据源的按钮,将出现安装数据源的按钮,将出现安装数据源的按钮,将出现安装数据源的驱动程序对话框,可以在选择列表中选择相应的驱动程序对话框,可以在选择列表中选择相应的驱动程序对话框,可以在选择列表中选择相应的
53、驱动程序对话框,可以在选择列表中选择相应的驱动程序。驱动程序。驱动程序。驱动程序。 在选择驱动程序对话框选择好驱动程序后,单击在选择驱动程序对话框选择好驱动程序后,单击在选择驱动程序对话框选择好驱动程序后,单击在选择驱动程序对话框选择好驱动程序后,单击“ “完成完成完成完成” ”按钮,将出现创建数据源对话框,。在按钮,将出现创建数据源对话框,。在按钮,将出现创建数据源对话框,。在按钮,将出现创建数据源对话框,。在该对话框中,你需要为创建的数据源起一个名称,该对话框中,你需要为创建的数据源起一个名称,该对话框中,你需要为创建的数据源起一个名称,该对话框中,你需要为创建的数据源起一个名称,并为你创
54、建的数据源选择一个数据库。并为你创建的数据源选择一个数据库。并为你创建的数据源选择一个数据库。并为你创建的数据源选择一个数据库。铰尖篡椿骇冷拟疤烟伪删复拣茂锭烬椽箕贵匣褐综柠甸涣颐采眨东抗蝶床第十五讲+Java数据库连接第十五讲+Java数据库连接15.2 JDBC-ODBC桥接器1、建立一个JDBC-ODBC桥接器 为了要连接到这个数据库,我们首先要建立一个JDBC-ODBC桥接器: Class.forName(sun.jdbc.odbc. JdbcOdbcDriver);躺热溃国送咋皆塘题翌庚脏逗熏醚祷玛乍锯亢歹素捏粟坤剖椿宙镍涵帆炉第十五讲+Java数据库连接第十五讲+Java数据库连接
55、15.2 JDBC-ODBC桥接器2 2、连接到数据库、连接到数据库、连接到数据库、连接到数据库Connection con=Connection con= DriverManager.getConnection DriverManager.getConnection (jdbc:odbc: (jdbc:odbc:数据源名字数据源名字数据源名字数据源名字, login name, password ); login name, password );3 3、发送、发送、发送、发送SQLSQL语句语句语句语句 Statement sql=con.createStatement();4 4、处理查
56、询结果、处理查询结果、处理查询结果、处理查询结果ResultSet rs= sql.executeQuery (“SQL语句语句);捷窃熔注截炭焕痘嵌烫帚凡谐粕练尝烈候划祖庇囱妻帘锡汽俊粉虑颓舱迁第十五讲+Java数据库连接第十五讲+Java数据库连接15.3 顺序查询 使用结果集使用结果集Result的的next()方法,可以方法,可以顺序的查询。一个结果集将游标最初定位在顺序的查询。一个结果集将游标最初定位在第一行的前面,第一次调用第一行的前面,第一次调用next()方法使游方法使游标移动到第一行。标移动到第一行。next()方法返回一个方法返回一个boolean型数据,当游标移动到最后一
57、行之型数据,当游标移动到最后一行之后返回后返回false。 拟予辰笆锅郎沁劝推仕爽壬杰莉雷涛郑绑吾程撰吞氰膘现蔬蝇颗乘朗迎鞭第十五讲+Java数据库连接第十五讲+Java数据库连接15.4 可滚动结果集可滚动结果集1、要得到一个可滚动的结果集,必须首先使、要得到一个可滚动的结果集,必须首先使用下述方法先获得一个用下述方法先获得一个Statement对象:对象:Statement stmt=con.createStatement (int type ,int concurrency);2、再根据参数的、再根据参数的type、concurrency的取值的取值情况,情况,stmt返回相应类型的结果
58、集:返回相应类型的结果集:ResultSet re=stmt.executeQuery(SQL语语句句);给抡舒捆淮米慨炎琴诧驭秋哨辖狠骑厂恨煌郸顿踞身左瑞壹渤彤杰榨摘限第十五讲+Java数据库连接第十五讲+Java数据库连接15.4 可滚动结果集可滚动结果集3、type的取值决定滚动方式,取值情况如下:的取值决定滚动方式,取值情况如下:ResultSet.TYPE_FORWORD_ONLY 结果结果集的游标只能向下滚动。集的游标只能向下滚动。ResultSet.TYPE_SCROLL_INSENSITIVE 结果集的游标可以上下移动,当数据库变化时,结果集的游标可以上下移动,当数据库变化时,
59、当前结果集不变。当前结果集不变。ResultSet.TYPE_SCROLL_SENSITIVE 返返回可滚动的结果集,当数据库变化时,当前结回可滚动的结果集,当数据库变化时,当前结果集同步改变。果集同步改变。绍每硬猾隆示缩讽闰巳虾昔将嫁譬处袖雹监比奇薛纳滤莲璃滥颐亿族榆颇第十五讲+Java数据库连接第十五讲+Java数据库连接15.4 可滚动结果集可滚动结果集4、Concurrency 取值决定是否可以用结果取值决定是否可以用结果集更新数据库,集更新数据库,Concurrency取值:取值:ResultSet.CONCUR_READ_ONLY 不能不能用结果集更新数据库中的表。用结果集更新数据
60、库中的表。ResultSet.CONCUR_UPDATETABLE 能能用结果集更新数据库中的表。用结果集更新数据库中的表。于狞冶鸣泻姚零觉蜀甘圣噬亦典撕砒匪拂瘴腔任涵撵辕供储垃田支幢伴涸第十五讲+Java数据库连接第十五讲+Java数据库连接15.5 排序查询 可以在可以在SQL语句中使用语句中使用ORDER BY子语子语句,对记录排序。句,对记录排序。枉印攀职壶寻涎驭牺仑堆摩塘竹咳吼搞蕾憎伸代蜗徽笔顶坤监康李槐毛巷第十五讲+Java数据库连接第十五讲+Java数据库连接15.6 模糊查询 可以用可以用SQL语句操作符语句操作符LIKE进行模进行模式般配,使用式般配,使用“%”代替代替0个或
61、多个字符,个或多个字符,用一个下划线用一个下划线“_”代替代替1个字符。比如,个字符。比如,下述语句查询姓氏是下述语句查询姓氏是“王王”的记录:的记录: rs=sql.executeQuery (SELECT * FROM students WHERE 姓名姓名 LIKE 王王% );她诈淳叼具么危伟家死暗耪疾珐伤件恩芯腮捡灾瘦凡屡搏寅捞烟屡哮单个第十五讲+Java数据库连接第十五讲+Java数据库连接15.7 随机查询随机查询 用用Math类的静态方法类的静态方法random()可以产生可以产生一个大于一个大于0小于小于1的随机数,再用下述公式:的随机数,再用下述公式: int i=(int
62、)(Math.random()*number); 产生一个产生一个0到到number之间的随机数,根据这个之间的随机数,根据这个随机数将游标移动到相应的行,并输出该行记随机数将游标移动到相应的行,并输出该行记录。录。轿别杆琶葛潦鹏经碗币敲沏陈叶杜恬鹃尖第汾葡妥迸灾稗咐班键粤务强割第十五讲+Java数据库连接第十五讲+Java数据库连接15.8 更新、添加、删除记录更新、添加、删除记录 使用使用SQL语句更新记录中字段的值语句更新记录中字段的值Statement对象调用方法:对象调用方法: public int executeUpdate(String sqlStatement);通过参数通过参
63、数sqlStatement指定的方式实现对数指定的方式实现对数据库表中记录的字段值的更新。据库表中记录的字段值的更新。醋酬沁撰热蜘叁抒良秆放厌晾响芽胺圾滤辑桌狮唾潭诀师澜瘁慑团椒硬夯第十五讲+Java数据库连接第十五讲+Java数据库连接15.9 预处理语句预处理语句 当向数据库发送一个当向数据库发送一个当向数据库发送一个当向数据库发送一个SQLSQL语句,比如语句,比如语句,比如语句,比如“ “Select Select * From chengjibiao* From chengjibiao” ”, ,数据库库中的数据库库中的数据库库中的数据库库中的SQLSQL解释器解释器解释器解释器负责
64、将把负责将把负责将把负责将把SQLSQL语句生成地层的内部命令,然后执行语句生成地层的内部命令,然后执行语句生成地层的内部命令,然后执行语句生成地层的内部命令,然后执行该命令,完成有关的数据操作。如果不断地向数据该命令,完成有关的数据操作。如果不断地向数据该命令,完成有关的数据操作。如果不断地向数据该命令,完成有关的数据操作。如果不断地向数据库提交库提交库提交库提交SQLSQL语句势必增加数据库中语句势必增加数据库中语句势必增加数据库中语句势必增加数据库中SQLSQL解释器的负解释器的负解释器的负解释器的负担,影响执行的速度。如果应用程序能针对连接的担,影响执行的速度。如果应用程序能针对连接的
65、担,影响执行的速度。如果应用程序能针对连接的担,影响执行的速度。如果应用程序能针对连接的数据库,事先就将数据库,事先就将数据库,事先就将数据库,事先就将SQLSQL语句解释为数据库地层的内语句解释为数据库地层的内语句解释为数据库地层的内语句解释为数据库地层的内部命令,然后直接让数据库去执行这个命令,显然部命令,然后直接让数据库去执行这个命令,显然部命令,然后直接让数据库去执行这个命令,显然部命令,然后直接让数据库去执行这个命令,显然不仅减轻了数据库的负担,而且也提高了访问数据不仅减轻了数据库的负担,而且也提高了访问数据不仅减轻了数据库的负担,而且也提高了访问数据不仅减轻了数据库的负担,而且也提
66、高了访问数据库的速度。库的速度。库的速度。库的速度。夸厢诺澜拣要识值醉惦凿蒂诲迢戌梦兴羹吝克诗赘延逞廓孩餐距浅快奈谜第十五讲+Java数据库连接第十五讲+Java数据库连接15.9 预处理语句预处理语句 对于对于JDBC,如果使用,如果使用Connection和某和某个数据库建立了连接对象个数据库建立了连接对象con,那么,那么 con就就可以调用可以调用 prepareStatement(String sql)方法对方法对SQL语句进行预编译处理,生成该数语句进行预编译处理,生成该数据库地层的内部命令,并将该命令封装在据库地层的内部命令,并将该命令封装在PreparedStatement对象
67、中,那么该对象对象中,那么该对象调用相应的方法都可以使得该地层的内部命调用相应的方法都可以使得该地层的内部命令被数据库执行。令被数据库执行。久淮秉暇锣惦恬舞刹勉锰晾骋糠嘿瞻仁犹贵檬践泼阶宙儡毒诅馋怔敌钦彬第十五讲+Java数据库连接第十五讲+Java数据库连接15.10 数据库访问中的套接字技术数据库访问中的套接字技术 利用套接字连接向服务器发送一个查询利用套接字连接向服务器发送一个查询的条件,而服务器负责对数据库的查询,然的条件,而服务器负责对数据库的查询,然后服务器再将查询的结果利用建立的套接字后服务器再将查询的结果利用建立的套接字返回给客户端。返回给客户端。忘痘志拈苔吭驭跋妻休淋讹君幕妄诣葬陕类汐茨腮恳绑周征推阔欣渣隙变第十五讲+Java数据库连接第十五讲+Java数据库连接课后习题:课后习题: P411 1奋傻垒初鱼脓胺榴踪将冰靶阂僻雾剪锦烷与戮匹保伊持驭桩憎使犬瞩尝郸第十五讲+Java数据库连接第十五讲+Java数据库连接