《09:JSP中使用数据库.ppt》由会员分享,可在线阅读,更多相关《09:JSP中使用数据库.ppt(54页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、在JSP中使用数据库第7章学习目标 知识点:掌握怎样在JSP中使用JDBC实现数据库的连接、查询、修改等操作。重点:掌握连接数据库的常用两种方式:JDBC-ODBC桥接器方式和加载纯Java数据库驱动程序方式。难点:怎样实现数据库表的分页查询。关键实践:编写jsp页面,使用JavaBean实现数据库表的分页查询。重点介绍掌握使用JDBC连接数据库的两种方法掌握使用statement对象执行SQL语句掌握使用ResultSet对象对结果集操作 JDBCJDBC(Java Java DataBaseDataBase ConnectivityConnectivity)是是JavaJava运运行行平平
2、台台的的核核心心类类库库中中的的一一部部分分,提提供供了了访访问问数数据据库库的的APIAPI,它它由由一一些些JavaJava类类和和接接口口组成。组成。JDBCJDBC操操作作不不同同的的数数据据库库仅仅仅仅是是连连接接方方式式上上的的差差异异而而已已,使使用用JDBCJDBC的的应应用用程程序序一一旦旦和和数数据据库库建建立立连连接接,就就可可以以使使用用JDBCJDBC提提供供的的APIAPI操作数据库操作数据库 .我们经常使用我们经常使用JDBCJDBC进行如下操作:进行如下操作:n 与一个数据库建立连接。与一个数据库建立连接。n向已连接的数据库发送向已连接的数据库发送SQLSQL语
3、句。语句。n 处理处理SQLSQL语句返回的结果。语句返回的结果。1.JDBC简介2.2.连接数据库的常用方式连接数据库的常用方式 JDBC-ODBC桥驱动程序(JDBC-ODBC Bridge)将JDBC调用映射为ODBC调用使JDBC能够访问ODBC数据源效率相对低下加载Java数据库驱动程序(Pure JDBC Driver)它直接将JDBC请求转换为指定数据库协议可接收的请求,并进行调用,完全使用java语言实现与数据库通信。本地API和Java驱动程序(JDBC-Native API Bridge)这类驱动程序使用JDBC驱动程序和厂商提供的专用API的混合形式来访问数据库Java驱
4、动程序中间件(JDBC-middleware)使用一个独立于数据库的协议将翻译的JDBC请求发送给一个服务器中间件,该中间件将JDBC请求转换为指定的数据库协议接收的请求需要使用第三方服务器中间件连接数据库的常用方式连接数据库的常用方式 JDBC-ODBC桥Java应用程序ODBC驱动程序数据库图8-1 JDBC-ODBC桥JDBC驱动程序Java应用程序中间件数据库图8-2 纯Java驱动程序连接数据库的常用方式连接数据库的常用方式 JDBC驱动程序Java应用程序厂商提供的专有API数据库图8-3 本机代码和java驱动程序Java应用程序JDBC驱动程序数据库图8-4 本机协议驱动程序3
5、 连接数据库的两种方式介绍 1.1.一种常见方式是使用一种常见方式是使用JDBC-ODBCJDBC-ODBC桥接器桥接器 2.2.另一种是另一种是加载加载JavaJava数据库驱动程序数据库驱动程序编程方式编程方式 3.1 JDBC-ODBC桥接器_1 使使用用JDBC-ODBC桥桥接接器器方方式式的的机机制制是是,应应用用程程序序只只需需建建立立JDBC和和ODBC之之间间的的连连接接,而而和和数数据据库库的的连连接由接由ODBC去完成。去完成。3.1 JDBC-ODBC桥接器_2 使用使用JDBC-ODBCJDBC-ODBC桥接器访问数据库的步骤桥接器访问数据库的步骤:n建立建立JDBC-
6、ODBC桥接器桥接器 try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException e)out.print(e);n 创建创建ODBC数据源数据源 Windows控制面板控制面板_管理工具管理工具_ ODBC数据源数据源n 和和ODBC数据源建立连接数据源建立连接 Connection con=DriverManager.getConnection(“jdbc:odbc:数数据据源源名名字字”,“登录名登录名”,“密码密码”);例:showByJdbc.jsp3.2 使用Java数据库驱动程序_1 用用
7、Java语语言言编编写写的的数数据据库库驱驱动动程程序序称称作作Java数数据据库库驱动程序。驱动程序。JDBC可可以以调调用用本本地地的的Java数数据据库库驱驱动动程程序序和和相相应应的数据库建立连接的数据库建立连接。使使用用纯纯JavaJava驱驱动动程程序序方方式式和和数数据据库库建建立立连连接的两个步骤接的两个步骤:n加载纯加载纯Java驱动程序(驱动程序(以连接以连接SQL Server 2000为例)为例)连接连接Oracle用的纯用的纯Java驱动程序驱动程序%Oracle%ora92jdbclib classes12.jar 将将其其复复制制到到Tomcat所所用用的的JDK
8、的的jrelibext文文件件夹夹中中或或Tomcat的的安安装装目录目录commonlib中。中。n 和指定的数据库建立连接和指定的数据库建立连接 try Class.forName(oracle.jdbc.driver.OracleDriver).newInstance();catch(Exception e)out.print(e);3.2 使用Java数据库驱动程序_2 例:showByOracleDriver.jsp4 4 查询记录查询记录 与与数数据据库库建建立立连连接接后后,就就可可以以使使用用JDBCJDBC提提供供的的APIAPI和和数数据据库库交交互互信信息息,如如查查询询
9、、修修改改和和更更新新数数据据库库中中的的表表等等。对对一一个个数据库中表进行查询操作的具体步骤:数据库中表进行查询操作的具体步骤:n 创建创建SQLSQL语句对象语句对象tryStatementsql=con.createStatement();catch(SQLExceptione)System.out.println(e);n 处理查询结果处理查询结果 sqlsql对对象象可可以以调调用用相相应应的的方方法法实实现现对对数数据据库库中中表表的的查查询询和和修修改改,并并将将查询结果存放在一个查询结果存放在一个ResultSetResultSet类声明的对象中类声明的对象中。ResultS
10、etrs=sql.executeQuery(“SELECT*FROM表名表名”);ResultSetResultSet对对象象使使用用nextnext()方方法法一一次次看看到到一一个个数数据据行行,用用getXxxgetXxx (索索引或字段名引或字段名)方法获取字段值。方法获取字段值。注注:P139:P139 注意内容。注意内容。ResultSet接口的常用方法:方法名称功能描述next()移动指针到下一行previous()移动指针到上一行first()/beforeFirst()移动指针到第一行/第一行之前last()/afterLast()移动指针到最后一行/最后一行之后absolu
11、te()移动指针到指定行relative()移动指针到相对于当前行的指定行getRow()查看当前行的索引编号,行号从1开始findColumn()查看指定列名的索引编号close()释放ResultSet实例占用的资源4.1 4.1 顺序查询顺序查询&如何知道一个表中有哪些字段如何知道一个表中有哪些字段?1.1.与与数数据据库库建建立立的的连连接接对对象象concon调调方方法法getMetaDatagetMetaData返返回回一一个个DatabaseMetaDataDatabaseMetaData对对象象.DatabaseMetaDatametadata=con.getMetaData(
12、);2.2.MetadataMetadata对对象象再再调调用用getColumnsgetColumns()()方方法法可可以以将将表表的的字字段段信信息息以以行行列列的的形形式式存存储储在一个在一个ResultSetResultSet对象中。对象中。ResultSettableMessage=metadata.getColumns(null,null,“employee“,null);ResultSettableMessage=metadata.getColumns(null,SYSTEM,“SCORE“,null);表的字段信息以行列的形式存储在表的字段信息以行列的形式存储在tableMe
13、ssagetableMessage对象中对象中.该该对对象象使使用用next()next()方方法法和和getXxxgetXxx (索索引引)方方法法查查看看该该行行中中信信息息,第第4 4列列是是字段名。字段名。例例7-3 P140main.jsp 提交提交 数据源和表名数据源和表名inquireOne.jsp,inquireTwo.jsp调用调用JavaBeanJavaBean查询数据库查询数据库 QueryBeanOne.java,QueryBeanTwo.java查询数据库并返回结果查询数据库并返回结果 DatabaseMetaDataDatabaseMetaData对象对象Stude
14、ntdboscore学号Studentdboscore姓名Studentdboscore数学成绩Studentdboscore物理成绩Studentdboscore英语成绩4.2 4.2 随机查询随机查询&为为了了在在结结果果集集中中可可以以前前后后移移动动,随随机机显显示示若若干干记记录录,必须要返回一个可滚动的结果集。必须要返回一个可滚动的结果集。Statementstmt=con.createStatement(inttype,intconcurrency);ResultSetre=stmt.executeQuery(SQL语句句);inttype,intconcurrency取取值情况
15、及情况及ResultSet常用方法常用方法见p145。例例7-4 P146(RandomQueryBean.java,main7_4.jsp)4.2 4.2 随机查询随机查询&Statementstmt=con.createStatement(inttype,intconcurrency);ResultSetre=stmt.executeQuery(SQL语句句);type取值意义ResultSet.TYPE_FORWEAR_ONLY结果集的游标只能向下滚动ResultSet.TYPE_SCROLL_INSENSITIVE结果集的游标可以上下移动,当数据库发生变化时,当前结果集不变Result
16、Set.TYPE_SCROLL_SENSITIVE结果集的游标可以上下移动,当数据库发生变化时,当前结果集同步改变Concurrency取值意义ResultSet.CONCUR_READ_ONLY不能用结果集更新数据库中的表ResultSet.CONCUR_UPDATABLE能用结果集更新数据库中的表4.3 4.3 条件查询条件查询&在在JSPJSP页页面面中中输输入入查查询询条条件件,JavaBeanJavaBean文文件件可可以以根根据据JSPJSP提交的条件进行查询。提交的条件进行查询。SELECT*FROM SCORE Where SELECT*FROM SCORE Where 学号学
17、号=00010001;例例7-5 P150ConditionQuery.javainputConditon.jspinquireNumber.jspinquirePersonName.jspinquireMathScore.jsp4.4 4.4 排序查询排序查询&可可以以在在SQLSQL语语句句中中使使用用ORDER ORDER BYBY子子语语句句,对对记记录录排排序序。在在JSPJSP页页面面中中输输入入排排序序方方式式,JavaBeanJavaBean文文件件可可以以根根据据JSPJSP提提交的数据进行交的数据进行排序排序查询。查询。select*from score order by
18、select*from score order by 数学成绩数学成绩;例例7-6 P154(OrderQuery.java,choiceType.jsp)4.5 4.5 模糊查询模糊查询&在在JSPJSP页页面面中中输输入入模模糊糊查查询询条条件件,TagTag文文件件可可以以根根据据JSPJSP提交的条件进行模糊查询。提交的条件进行模糊查询。&在在SQLSQL语语句句中中用用likelike进进行行模模式式匹匹配配,%代代替替零零个个或或多多个个字符,下划线代替一个字符等。字符,下划线代替一个字符等。select*from score where select*from score whe
19、re 姓名姓名 LIKE LIKE 王王%;比如,下述语句查询产品名称中含有比如,下述语句查询产品名称中含有“机机”的记录:的记录:rsrs=sql.executeQuery(SELECTsql.executeQuery(SELECT*FROM product WHERE name LIKE%*FROM product WHERE name LIKE%机机%);%);例例7-7 P156(KeyWordQuery.java,keyWord.jsp,show.jsp)5 5 更新记录更新记录 可以使用可以使用SQLSQL语句更新记录中字段的值。语句更新记录中字段的值。Statement对象调用方
20、法:对象调用方法:publicintexecuteUpdate(StringsqlStatement);通通过过参参数数sqlStatement指指定定的的方方式式实实现现对对数数据据库库表表中中记记录录的字段值更新。的字段值更新。例如:例如:executeUpdate(UPDATEproductSETprice=6866WHEREname=海海尔电视机机);例例7-8 P159 renew.jsp RenewBean.java6 6 添加记录添加记录 可以使用可以使用SQL语句添加新的记录。语句添加新的记录。Statement对象调用方法:对象调用方法:publicintexecuteUpd
21、ate(StringsqlStatement);通通过过参参数数sqlStatement指指定定的的方方式式实实现现向向数数据据库库表表中中添添加新的记录。加新的记录。例如:例如:executeUpdateexecuteUpdate(“INSERT INTO score(INSERT INTO score(字段列表字段列表)VALUES()VALUES(对应的具体记录值)对应的具体记录值)”););例例7-8P161add.jspAddBean.java7 7 删除记录删除记录 可以使用可以使用SQL语句删除记录。语句删除记录。Statement对象调用方法:对象调用方法:publicinte
22、xecuteUpdate(StringsqlStatement);删除数据库表中的记录。删除数据库表中的记录。例如:例如:executeUpdate(“DELETEFROMWHERE);executeUpdate(DELETEexecuteUpdate(DELETE FROM product WHERE number=888);FROM product WHERE number=888);例例7-8P162delete.jspDelBean.java更新。添加。删除更新。添加。删除 记录记录例7-8mainPage.jsprenew.jspadd.jspdelete.jspRenewBean.
23、javaAddBean.javaDelBean.java8.8.使用预处理语句使用预处理语句 0。JSP数据库访问语句的执行数据库访问语句的执行每当向数据库发送一个每当向数据库发送一个SQL语句语句1.数据库中的数据库中的SQL解释器负责将解释器负责将SQL语句生成底层的内部命令语句生成底层的内部命令2.然后执行该命令,完成数据库操作然后执行该命令,完成数据库操作 如如果果不不断断地地向向数数据据库库提提交交SQL语语句句势势必必增增加加数数据据库库中中SQL解解释释器器的的负负担担,影响执行的速度。影响执行的速度。如如果果应应用用程程序序能能够够针针对对连连接接的的数数据据库库,实实现现就就
24、将将SQL语语句句解解释释为为数数据据库库底底层层的的内内部部命命令令,然然后后直直接接让让数数据据库库去去执执行行这这个个命命令令,就就可可以以减减轻轻数数据据库库的的负担,提高数据库访问速度负担,提高数据库访问速度8.8.使用预处理语句使用预处理语句 1。预处理语句优点。预处理语句优点(1)(1)JavaJava提提供供了了更更高高效效率率的的数数据据库库操操作作机机制制,就就是是PreparedStatementPreparedStatement对对象象,该对象被习惯地称作预处理语句对象。该对象被习惯地称作预处理语句对象。(2)(2)连接对象连接对象concon调用调用PreparedS
25、tatement prepareStatement(String sql)方方 法法 对对 参参 数数 sqlsql指指 定定 的的 SQLSQL语语 句句 进进 行行 预预 编编 译译 处处 理理.该该 方方 法法 返返 回回 一一 个个PreparedStatement对象对象.PreparedStatement pre=con.prepareStatement(String sql);(3)(3)只要编译好了只要编译好了PreparedStatementPreparedStatement对象,那么该对象可以随时地执行方法对象,那么该对象可以随时地执行方法:ResultSet execut
26、eQuery()boolean execute()int executeUpdate()例例7-9 P167 PreparedQuery.java pre.jsp8.8.使用预处理语句使用预处理语句 2。使用。使用统统配符配符 在在对对SQL进进行行预预处处理理时时可可以以使使用用统统配配符符“?”来来代代替替字字段段的的值值,只只要要在在预预处处理理语语句句执执行之前再行之前再设设置置统统配符所表示的具体配符所表示的具体值值即可。例如:即可。例如:pre=con.prepareStatement(SELECT*FROM product WHERE price?);pre.setDouble(
27、1,6565);(设设置置统统配符配符“?”的的值值)功能等同于功能等同于 pre=con.prepareStatement(SELECT*FROM message WHERE price 6565);使用通配符可使得应用程序更容易动态地改变使用通配符可使得应用程序更容易动态地改变SQL语句中关于字段值的条件语句中关于字段值的条件 预处预处理理语语句句设设置置统统配符配符“?”的的值值的常用方法的常用方法见见p169.预处理语句设置通配符”?”的常用方法Void setDate(int parameterIndex,Date x)Void setDouble(int parameterInde
28、x,double x)Void setFloat(int parameterIndex,Float x)Void setInt(int parameterIndex,Int x)Void setLong(int parameterIndex,long x)Void setString(int parameterIndex,String x)例例7-10P170AddRecordBean.javapre2.jsp10.10.基于基于CachedRowSetCachedRowSet分页显示记录分页显示记录Statement-Statement-ResultSetResultSet紧密的绑定紧密的绑
29、定一旦连接对象关闭,一旦连接对象关闭,ResultSetResultSet数据立刻消失数据立刻消失分页显示分页显示要要求求ResultSetResultSet始始终终保保持持和和数数据据库库的的连连接接,直直到到用用户户将将ResultSetResultSet对象中的数据查看完毕对象中的数据查看完毕数数据据库库同同一一时时间间允允许许的的最最大大连连接接数数目目有有限限,应应避避免免长长时时间间占占用数据库的连接资源用数据库的连接资源CachedRowSetImplCachedRowSetImpl对对象象可可以以保保存存ResultSetResultSet对对象象中中的的数数据据,而而且且Ca
30、chedRowSetImplCachedRowSetImpl对对象象不不依依赖赖ConnnectionConnnection 对对象象,这这意意味味着着一一旦旦把把ResultSetResultSet对对象象中中的的数数据据保保存存到到CachedRowSetImplCachedRowSetImpl对象后,就可以关闭和数据库的连接。对象后,就可以关闭和数据库的连接。10.10.基于基于CachedRowSetCachedRowSet分页显示记录分页显示记录CachedRowSetImplCachedRowSetImpl对对象象可可以以保保存存ResultSetResultSet对对象象中中的的
31、 数数 据据,而而 且且 CachedRowSetImplCachedRowSetImpl对对 象象 不不 依依 赖赖ConnnectionConnnection 对对象象,这这意意味味着着一一旦旦把把ResultSetResultSet对对象象中中的的数数据据保保存存到到CachedRowSetImplCachedRowSetImpl对对象象后后,就就可可以关闭和数据库的连接。以关闭和数据库的连接。CachedRowSetImplCachedRowSetImpl rowSetrowSet=new=new CachedRowSetImplCachedRowSetImpl();();rowSet
32、.populate(resultSetrowSet.populate(resultSet););10.10.基于基于CachedRowSetCachedRowSet分页显示记录分页显示记录假设CachedRowSetImpl对象中有m行记录,准备每页显示n行,那么总页数计算如下:如果m除以n的余数大于0,总页数等于m除以n的商加一;如果mm除以n的余数等于0,总页数等于m除以n的商;如果准备显示第p页的内容,应当把CachedRowSetImpl对象中的游标移动到第(p-1)n+1行记录处例例7-11P173ShowRecordBypage.javachoiceDatabase.jspshow
33、ByPage.jsp11.11.连接连接SQL server数据库数据库加载驱动程序Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver);建立连接Connection con=DriverManager.getConnection(jdbc:sqlserver:/主机host:端口号;DatabaseName=数据库名,用户名,密码);12.连接连接MySql数据库数据库 加载MySql驱动程序:try Class.forName(com.mysql.jdbc.Driver)catch(Exception e)建立连接try
34、String uri=“jdbc:mysql:/localhost/数据库名;String user=“用户名;String password=“密码;con=DriverManager.getConnection(uri,user,password);catch(SQLException e)More2022/12/27北方民族大学 网络程序设计 白静35 掌握两种不同的数据库连接方式掌握两种不同的数据库连接方式掌握两种不同的数据库连接方式掌握两种不同的数据库连接方式 通过通过通过通过JDBCJDBCJDBCJDBC查询数据库查询数据库查询数据库查询数据库 通过通过通过通过JDBCJDBCJ
35、DBCJDBC更新数据库更新数据库更新数据库更新数据库 学会使用学会使用学会使用学会使用DatabaseMeatDataDatabaseMeatDataDatabaseMeatDataDatabaseMeatData获取表字段获取表字段获取表字段获取表字段 利用预处理语句查询、更新数据库利用预处理语句查询、更新数据库利用预处理语句查询、更新数据库利用预处理语句查询、更新数据库 利用结果集更新数据库利用结果集更新数据库利用结果集更新数据库利用结果集更新数据库 学会不同数据库的连接方式学会不同数据库的连接方式学会不同数据库的连接方式学会不同数据库的连接方式学习完本章后,我们应该能够2022/12/
36、27北方民族大学 网络程序设计 白静36 自己动手编写连接数据库的网络程序自己动手编写连接数据库的网络程序自己动手编写连接数据库的网络程序自己动手编写连接数据库的网络程序 调试、运行连接数据库的网络程序调试、运行连接数据库的网络程序调试、运行连接数据库的网络程序调试、运行连接数据库的网络程序学习完本章后,我们还应该能够作业调试运行以下两个程序1:“用结果集更新数据库”;2:“使用通配符&预处理语句查询数据库”JDBC中的常用接口和类(java.sql包)驱动程序接口Driver 使用java.lang.Class类的静态方法forName(String className)加载要连接数据库的D
37、river类,该方法的入口参数为要加载Driver类的完整包名。成功加载后,会将Driver类的实例注册到DriverManager类中,如果失败,将抛出ClassNotFoundException异常。try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);/加载JDBC-ODBC桥接器驱动程序catch(ClassNotFoundException e)out.print(e);附件JDBC中的常用接口驱动程序管理器DriverManager负责管理JDBC驱动程序的基本服务,是JDBC的管理层,作用于用户和驱动程序之间,负责跟踪可用的驱动程序,并在
38、数据库和驱动程序之间建立连接。getConnection(String url,String user,String password)setLoginTimeout(int seconds)println(String message)Connection con=DriverManager.getConnection(jdbc:odbc:mymoon,system,yijie);/建立与数据库连接,mymoon为数据源名附件DriverManager类提供的常用方法如表:方法名称功能描述getConnection(String url,String user,String password
39、)静态方法,用来获得数据库连接setLoginTimeout(int seconds)静态方法,用来设置每次等待建立数据库连接的最长时间setLogWriter(java.io.PrintWriter out)静态方法,用来设置日志的输出对象println(String message)静态方法,用来输出指定消息到当前的JDBC附件JDBC中的常用接口数据库连接接口Connection负责与特定的数据库的连接,在连接的上下文中可以执行SQL语句并返回结果,还可以通过getMetaData()方法获得由数据库提供的相关信息,如数据表、存储过程和连接功能等信息。Connection con=Dri
40、verManager.getConnection(jdbc:odbc:mymoon,system,yijie);Statement sql=con.createStatement();/创建Statement对象附件Connection类提供的常用方法如表:方法名称功能描述createStatement()创建并返回一个Statement实例,通常在执行无参数的SQL语句时创建该实例prepareStatement()创建并返回一个PreparedStatement实例prepareCall()创建并返回一个CallableStatement实例setAutoCommit()/getAutoC
41、ommit()设置/查看当前Connection的自动提交模式close()关闭数据库连接附件JDBC中的常用接口Statement接口用于执行静态的SQL语句,并返回执行结果。对于insert、update和delete语句,调用executeUpdate(String sql)方法,而select语句则调用executeQuery(String sql)方法,并返回一个永远不能为null的ResultSet实例。JDBC中的常用接口PreparedStatement接口用于执行动态的SQL语句,即包含参数的SQL语句。通过它的实例执行的SQL语句,将被预编译并保存到内存中,从而可以反复并且
42、高效的执行该SQL语句。executeQuery()executeUpdate()setXxx()clearParameters()close()附件JDBC中的常用接口CallableStatement接口用来调用数据库的存储过程。附件JDBC中的常用接口访问结果集接口ResultSet通过该接口的实例可以获得检索结果集,以及对应数据表的相关信息,例如列名和类型等,ResultSet实例通过执行查询数据库的语句生成。first()方法last()方法previous()方法next()方法getRow()方法附件ResultSet接口的常用方法:方法名称功能描述next()移动指针到下一行p
43、revious()移动指针到上一行first()/beforeFirst()移动指针到第一行/第一行之前last()/afterLast()移动指针到最后一行/最后一行之后absolute()移动指针到指定行relative()移动指针到相对于当前行的指定行getRow()查看当前行的索引编号findColumn()查看指定列名的索引编号close()释放ResultSet实例占用的资源附件JDBC编程一:数据库URL要连接一个数据库,必须指定数据库以及相应的参数。JDBC使用和网络URL类似的语法来描述数据库。格式如下:Jdbc:subprotocol:data source identif
44、ier其中subprotocol表示数据库的驱动程序名data source identifier表示数据源的有关信息。例(1)是一个利用JDBC-ODBC桥访问名为student的ODBC源数据库:jdbc:odbc:student附件例(2):使用特定的用户名和密码访问数据库:jdbc:odbc:university?user=admin&password=123456(3)连接其他数据库,例如连接SQL Server数据库:“jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=university”其中microsoft:sqlse
45、rver表示Microsoft公司的SQL Server 的JDBC驱动程序,1433表示SQL Server 2000提供数据库连接的端口号。附件数据库URL(4)通过数据库URL,也可连接网络数据库,格式如下:Jdbc:subprotocol:/hostname:portdbname?parameter1=value¶meter2=value2其中,hostname表示数据库服务器的名称,port表示连接数据库所使用的端口号,dbname表示要连接数据库的名称,parameter1=value1表示参数值的设定,如用户名、密码等。如下就是一个访问网络数据库的示例:jdbc:micr
46、osoft:sqlserver:/localhost:1433;datebasename=university?user=admin&password=123456附件8.8.用结果集操作数据库中的表用结果集操作数据库中的表 JSP修改数据库的两种方式:修改数据库的两种方式:u利用利用SQL语句更新、插入语句更新、插入u利用内存中的利用内存中的ResultSet对象更新对象更新u操作由操作系统自动转化为相应的操作由操作系统自动转化为相应的SQL语句语句u优点:不必熟悉有关更新、插入的优点:不必熟悉有关更新、插入的SQL语句,方便编写代码语句,方便编写代码u缺点:必须事先返回结果集缺点:必须事先
47、返回结果集Connnection con=riverManager.getConnection(jdbc:odbc:mystar,);Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet rs=sql.executeQuery(SELECT*FROM product);附件8.8.用结果集操作数据库中的表用结果集操作数据库中的表 u利用内存中的利用内存中的ResultSet对象更新对象更新Connnection con=riverManage
48、r.getConnection(jdbc:odbc:mystar,);Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet rs=sql.executeQuery(SELECT*FROM product);1。更新记录中的列值。更新记录中的列值 结果集结果集rs的游标移动到第的游标移动到第n行行 rs.absolute(n);结果集将第结果集将第n行的行的p列的列值更新列的列值更新 updateInt(String columnName,in
49、t x)更多更多方法见下页方法见下页 更新数据库中的表更新数据库中的表 rs.absolute(3);rs.updateString(name,IBM笔记本笔记本);rs.updateRow();附件结果集将第n行的p列的列值更新通过列名更新通过列号更新updateInt(String columnName,int x)updateInt(int columnIndex,int x)updateLong(String columnName,int x)updateLong(int columnIndex,int x)updateDouble(String columnName,int x)up
50、dateDouble(int columnIndex,int x)updateString(String columnName,int x)updateString(int columnIndex,int x)updateBoolean(String columnName,int x)updateBoolean(int columnIndex,int x)updateDate(String columnName,int x)updateDate(int columnIndex,int x)附件8.8.用结果集操作数据库中的表用结果集操作数据库中的表 u利用内存中的利用内存中的ResultSet