chap6_在JSP中使用数据库
JSP中使用数据库

示UpdateRecord.tag返回的有关更新记录是否成功的信息。
3、编写一个JSP页面inputDeletedISBN.jsp和一个Tag 文件DelRecord.tag。
实验结果:见附页小结:本次试验中学习了如何连接数据库,如何查询、更新、删除信息等重要知识。
评定成绩:批阅教师:年月日实验前准备使用Microsoft Access 2003创建数据库Book,然后在数据库中再创建名为bookForm的表,设置表的字段和属性,如下图所示:在表bookForm中按格式要求输入内容,如下图所示:使用JDBC-ODBC桥接器方式和数据库建立连接,将数据库Book设置为名字为information 的数据源,如下图所示:实验一:编写一个JSP页面inputMess.jsp和一个Tag文件FindBook.tag,使用JDBC查询数据库中表的记录,结果如下:inputMess.jsp的代码如下所示:<%@ page contentType="text/html;charset=GB2312" %><%@ taglib tagdir="/WEB-INF/tags" prefix="findBook"%><HTML><Body bgcolor=cyan><center><form action="">输入查询内容:<Input type=text name="findContent" value="JSP"> <Select name="condition" size=1><Option Selected value="bookISBN">ISBN<Option value="bookName">书名<Option value="bookAuthor">作者<Option value="bookPublish">出版社<Option value="bookTime">出版时间<Option value="bookAbstract">内容摘要</Select><Br><INPUT type="radio" name="findMethod" value="start">前方一致<INPUT type="radio" name="findMethod" value="end">后方一致<INPUT type="radio" name="findMethod" value="contains">包含<Input type=submit value="提交"></form><%String findContent = request.getParameter("findContent");String condition = request.getParameter("condition");String findMethod = request.getParameter("findMethod");if(findContent==null){findContent="";}if(condition==null){condition="";}if(findMethod==null){findMethod="";}%><BR>查询到的图书:<findBook:FindBook dataSource="information"tableName="bookForm"findContent="<%=findContent%>"condition="<%=condition%>"findMethod="<%=findMethod%>"/><BR><%=giveResult%></form></BODY></HTML>FindBook.tag的代码如下所示:<%@ tag import="java.sql.*" %><%@ tag pageEncoding="gb2312" %><%@ attribute name="dataSource" required="true" %><%@ attribute name="tableName" required="true" %><%@ attribute name="findContent" required="true" %><%@ attribute name="condition" required="true" %><%@ attribute name="findMethod" required="true" %><%@ variable name-given="giveResult" variable-class="ng.StringBuffer" scope="AT_END" %><%byte b[]=findContent.getBytes("iso-8859-1");findContent=new String(b);try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e){out.print(e);}Connection con;Statement sql;ResultSet rs;StringBuffer queryResult=new StringBuffer(); //查询结果String uri="jdbc:odbc:"+dataSource;try{ con=DriverManager.getConnection(uri,"","");sql=con.createStatement();String s="";if(findMethod.equals("start"))s= "select * from "+tableName+" where "+condition+" Like'"+findContent+"%'";if(findMethod.equals("end"))s= "select * from "+tableName+" where "+condition+" Like'%"+findContent+"'";if(findMethod.equals("contains"))s= "select * from "+tableName+" where "+condition+" Like'%"+findContent+"%'";rs=sql.executeQuery(s);queryResult.append("<table border=1>");queryResult.append("<tr>");queryResult.append("<th>ISBN</td>");queryResult.append("<th>图书名称</td>");queryResult.append("<th>作者</td>");queryResult.append("<th>价格</td>");queryResult.append("<th>出版社</td>");queryResult.append("<th>出版时间</td>");queryResult.append("<th>摘要</td>");queryResult.append("</tr>");int 字段个数=7;while(rs.next()){queryResult.append("<tr>");String bookISBN="";for(int k=1;k<=字段个数;k++) {if(k==7){String bookAbstract=rs.getString(k);String abs="<textarea rows=6 colums=10/>"+bookAbstract+"</textarea>";queryResult.append("<td>"+abs+"</td>");}else {queryResult.append("<td>"+rs.getString(k)+"</td>");}}}queryResult.append("</table>");jspContext.setAttribute("giveResult",queryResult);con.close();}catch(SQLException exp){jspContext.setAttribute("giveResult",new StringBuffer("请给出查询条件"));}%>实验结果如下所示:实验二:编写一个JSP页面updateRecord.jsp和两个Tag文件UpdateRecord.tag、GetRecord.tag,使用JDBC更新数据库中表的记录,结果如下:updateRecord.jsp的代码如下所示:<<%@ page contentType="text/html;charset=GB2312" %><%@ taglib tagdir="/WEB-INF/tags" prefix="getRecord" %><%@ taglib tagdir="/WEB-INF/tags" prefix="updateRecord" %><HTML><BODY bgcolor=pink><CENTER><FORM action="" name=form>输入图书的ISBN号,然后更新该图书的有关信息:<Input type=text name="bookISBN" /><Input type=submit name="ok" value="提交"/></FORM><%String bookISBN=request.getParameter("bookISBN");if(bookISBN!=null){%><getRecord:GetRecord bookISBN="<%=bookISBN%>" />输入<%=bookISBN%>的新信息>:<Font size=2><FORM action="" name=form><table><tr><td>图书名称:</td><td><Input type=text name="bookName" value="<%=oldBookName%>"></td></tr><tr><td>图书作者:</td><td><Input type=text name="bookAuthor" value="<%=oldBookAuthor%>"></td></tr><tr><td>图书价格:</td><td><Input type=text name="bookPrice" value="<%=oldBookPrice%>"></td></tr><tr><td>出版社:</td><td><Input type=text name="bookPublish" value="<%=oldBookPublish%>"></td></tr><tr><td>出版社时间(yy-mm-dd):</td><td><Input type=text name="bookTime" value="<%=oldBookTime%>"></td></tr><tr><td>图书摘要:</td><td><TextArea name="bookAbstract" rows=6,cols=12><%=oldBookAbstract%></textarea></td></tr><input type=hidden name="bookISBN" value="<%=bookISBN %>" > <tr><td><Input type=submit name="enter" value="提交"></td> </tr></table><Font></CENTER></form><% }%><%bookISBN=request.getParameter("bookISBN");String enter=request.getParameter("enter");String bookName=request.getParameter("bookName");String bookAuthor=request.getParameter("bookAuthor");String bookPrice=request.getParameter("bookPrice");String bookPublish=request.getParameter("bookPublish");String bookTime=request.getParameter("bookTime");String bookAbstract=request.getParameter("bookAbstract");boolean ok=(enter!=null);if(ok){%> <updateRecord:UpdateRecord bookISBN="<%=bookISBN%>" bookName="<%=bookName%>" bookAuthor="<%=bookAuthor%>"bookPrice="<%=bookPrice%>" bookPublish="<%=bookPublish%>"bookTime="<%=bookTime%>" bookAbstract="<%=bookAbstract%>"/> <center><h2><%= giveResult %></h2></center><% }%></BODY></HTML>UpdateRecord.tag的代码如下:<%@ tag import="java.sql.*" %><%@ tag pageEncoding="gb2312" %><%@ attribute name="bookISBN" required="true" %><%@ attribute name="bookName" required="true" %><%@ attribute name="bookAuthor" required="true" %><%@ attribute name="bookPrice" required="true" %><%@ attribute name="bookPublish" required="true" %><%@ attribute name="bookTime" required="true" %><%@ attribute name="bookAbstract" required="true" %><%@ variable name-given="giveResult" variable-class="ng.StringBuffer" scope="AT_END" %><%byte [] c=bookName.getBytes("iso-8859-1");bookName=new String(c);c=bookAuthor.getBytes("iso-8859-1");bookAuthor=new String(c);c=bookPublish.getBytes("iso-8859-1");bookPublish=new String(c);c=bookAbstract.getBytes("iso-8859-1");bookAbstract=new String(c);try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e){out.print(e);}StringBuffer str=new StringBuffer();Connection con;Statement sql;ResultSet rs;String uri="jdbc:odbc:information";try{con=DriverManager.getConnection(uri,"","");String updateCondition="UPDATE bookForm SET bookName='"+bookName+"',bookAuthor='"+bookAuthor+"',bookPrice= "+bookPrice+",bookPublish='"+bookPublish+"',bookTime='"+bookTime+"',bookAbstract='"+bookAbstract+"' WHERE bookISBN='"+bookISBN+"'";sql=con.createStatement();int m=sql.executeUpdate(updateCondition);if(m==1) {str.append("修改信息成功");}else {str.append("更新失败");}con.close();}catch(SQLException exp){str.append("更新失败"+exp);}jspContext.setAttribute("giveResult",str);%>GetRecord.tag的代码如下所示:<%@ tag import="java.sql.*" %><%@ tag pageEncoding="gb2312" %><%@ attribute name="bookISBN" required="true" %><%@ variable name-given="oldBookName" scope="AT_END" %><%@ variable name-given="oldBookAuthor" scope="AT_END" %><%@ variable name-given="oldBookPrice" scope="A T_END" %><%@ variable name-given="oldBookPublish" scope="AT_END" %><%@ variable name-given="oldBookTime" scope="AT_END" %><%@ variable name-given="oldBookAbstract" scope="AT_END" %><%try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e){out.print(e);}StringBuffer str=new StringBuffer();Connection con;Statement sql;ResultSet rs;String uri="jdbc:odbc:information";try{con=DriverManager.getConnection(uri,"","");String query="select bookName,bookAuthor,bookPrice"+",bookPublish,bookTime,bookAbstract from bookForm WHERE bookISBN='"+bookISBN+"'";sql=con.createStatement();rs=sql.executeQuery(query);if(rs.next()){jspContext.setAttribute("oldBookName",rs.getString("bookName"));jspContext.setAttribute("oldBookAuthor",rs.getString("bookAuthor"));jspContext.setAttribute("oldBookPrice",rs.getString("bookPrice"));jspContext.setAttribute("oldBookPublish",rs.getString("bookPublish"));jspContext.setAttribute("oldBookTime",rs.getString("bookTime"));jspContext.setAttribute("oldBookAbstract",rs.getString("bookAbstract"));}else{jspContext.setAttribute("oldBookName","");jspContext.setAttribute("oldBookAuthor","");jspContext.setAttribute("oldBookPrice","");jspContext.setAttribute("oldBookPublish","");jspContext.setAttribute("oldBookTime","");jspContext.setAttribute("oldBookAbstract","");}con.close();}catch(SQLException exp){jspContext.setAttribute("oldBookName","");jspContext.setAttribute("oldBookAuthor","");jspContext.setAttribute("oldBookPrice","");jspContext.setAttribute("oldBookPublish","");jspContext.setAttribute("oldBookTime","");jspContext.setAttribute("oldBookAbstract","");}jspContext.setAttribute("bookISBN",bookISBN);%>实验结果如下所示:修改信息,如下所示:重新查询一下,可以发现信息已更新:实验三:编写一个JSP页面inputDeletedISBN.jsp和一个Tag文件DelRecord.tag,使用JDBC删除数据库中表的记录,结果如下:inputDeletedISBN.jsp的代码如下所示:<%@ page contentType="text/html;charset=GB2312" %><%@ taglib tagdir="/WEB-INF/tags" prefix="deleteRecord"%><HTML><BODY><FONT size=2><FORM action="" method=post>删除记录:<br>输入被删除的图书的ISBN:<Input type="text" name="bookISBN" ><Input type="submit" name="b" value="提交"><%String bookISBN=request.getParameter("bookISBN");if(bookISBN!=null){%><deleteRecord:DeleteRecord bookISBN="<%=bookISBN%>"/><br><%=backMess%><% }%></Font></BODY></HTML>DelRecord.tag的代码如下所示:<%@ tag import="java.sql.*" %><%@ tag pageEncoding="gb2312" %><%@ attribute name="bookISBN" required="true" %><%@ variable name-given="backMess" scope="AT_END" %><%try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e){out.print(e);}Connection con;Statement sql;ResultSet rs;String uri="jdbc:odbc:information";try{con=DriverManager.getConnection(uri,"","");String condition="DELETE FROM bookForm WHERE bookISBN = '"+bookISBN+"'";sql=con.createStatement();int m=sql.executeUpdate(condition);if(m==1) {jspContext.setAttribute("backMess","ISBN是"+bookISBN+"的图书被删除");}else {jspContext.setAttribute("backMess","删除失败失败");}con.close();}catch(SQLException exp){jspContext.setAttribute("backMess","删除失败失败"+exp);}%>实验结果如下所示:重新查询一下,可以发现ISBN是20130405的图书已查询不到任何信息!实验结束!!。
JSP第六章--JSP中使用数据库

ResultSet rs=sql.executeQuery(“SELECT * FROM 表名”);
ResultSet对象使用next()方法一次看到一个数据行,用getXxx (索 引或字段名)方法获取字段值。 注: P148 注意内容。
6.4.1
顺序查询
如何知道一个表中有哪些字段?
1.与数据库建立的连接对象con调方法getMetaData返回一个DatabaseMetaData对 象. DatabaseMetaData metadata=con. getMetaData(); 2. Metadata对象再调用getColumns()方法可以将表的字段信息以行列的形式存储 在一个ResultSet对象中。
例6-9 P164
§6.7 删除记录
可以使用SQL语句删除记录。 Statement对象调用方法:
public int executeUpdate(String sqlStatement);
删除数据库表中的记录。 例如:
executeUpdate("DELETE FROM product WHERE number = '888' ");
例6-12, 6-13 P171
§6.10 事务
事务由一组SQL语句组成,所谓“事务处理”是指:应用程序保证事务中的 SQL语句要么全部都执行,要么一个都不执行。 事务是保证数据库中数据完整性与一致性的重要机制。JDBC事务处理步骤 如下:
example6_3.jsp 提交 数据源和表名
QueryTag.tag 查询数据库并返回结果
inquire.jsp调用tag查询数据库
6.4.2
随机查询
为了在结果集中可以前后移动,随机显示若干记录, 必须要返回一个可滚动的结果集。
JSP第九章 在JSP中使用数据库(新)

source d:/1000/group.sql
9.1 数据库系统-MySQL
➢删除数据库的命令:drop database <数据库名>, 例如:删除名为tiger的数据库:
drop database tiger; ➢删除表的命令:drop table <表名>,例如,使用 book数据库后,执行
软件开发环境
主讲教师 刘凡 fanliu@
第九章 在JSP中使用数据库
本章主要内容
9.1 MySQL数据库管理系统 9.2 JDBC 9.3 连接MySQL数据库 9.4 查询记录 9.5 更新、添加、删除记录 9.6 用结果集操作数据库中的表 9.7 预处理语句 9.8 事务 9.9 分页显示记录 9.10 常见数据库连接 9.11 标准化考试
9.1 数据库系统-MySQL
➢ MySQL提供的监视器(MySQL monitor),允许用户使用命令 行方式管理数据库。如果有比较好的数据库知识,特别是 SQL语句的知识,那么使用命令行方式管理MySQL数据库也是 很方便的.
➢ 需要再打开一个MS-DOS命令行窗口,并使用MS-DOS命令进入 到 bin 目 录 中 , 然 后 使 用 默 认 的 root 用 户 启 动 MySQL 监 视 器 (在安装MySQL时root用户是默认的一个用户,没有密码)。 命令如下:
ISBN varchar(100) not null , name varchar(100) CHARACTER SET gb2312, price float , PRIMARY KEY (ISBN) );
插入记录的SQL语句: insert into bookList values('7-302-01465-5','高等数学',28.67);
JSP中数据库的使用

JSP中数据库的使用JSP(Java Server Pages)是一种用于开发动态Web应用程序的Java技术,可以与数据库进行交互以实现对数据的存储、检索和更新。
下面将详细介绍在JSP中数据库的使用。
在JSP中使用数据库,需要考虑以下几个方面:1.数据库连接2.数据库操作3.数据库事务1.数据库连接:``````然后,可以使用以下代码建立与数据库的连接:```String url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "password";tryConnection conn = DriverManager.getConnection(url, username, password);} catch (SQLException e)e.printStackTrace(;} catch (ClassNotFoundException e)e.printStackTrace(;```需要根据具体的数据库类型和连接信息修改url、username和password的值。
在上述代码中,使用了MySQL数据库的连接方式,通过`Class.forName`加载数据库驱动,然后调用`DriverManager.getConnection`建立数据库连接。
连接成功后,可以使用`conn`对象进行数据库的操作。
2.数据库操作:数据库操作包括数据的增、删、改和查。
在JSP中,可以使用SQL语句来执行这些操作。
下面介绍几种常见的数据库操作。
-数据查询:查询数据库的数据可以使用`Statement`对象或`PreparedStatement`对象来执行SQL语句。
如下所示:```String sql = "SELECT * FROM users";tryStatement stmt = conn.createStatement(;ResultSet rs = stmt.executeQuery(sql);while (rs.next()//处理查询结果}} catch (SQLException e)e.printStackTrace(;```在上述代码中,使用`Statement`对象的`executeQuery`方法执行查询语句,然后通过`ResultSet`对象处理查询结果。
JSP中数据库的使用

15
基于JDBC的登陆案例
<% try • 在登录处理页面中,通过 JDBC访问数据库,判断从 { 表单中获取的用户名和密码是否正确。 Class.forName(DBDRIVER) ;
conn = DriverManager.getConnection(DBURL,"sa", "sa",) ; stmt = conn.createStatement() ; sql = "SELECT * FROM userinfo WHERE name='"+name+"' and password='"+password+"'" ; rs = stmt.executeQuery(sql) ; if(rs.next()) { // 如果有记录,则说明用户是合法的,可以登陆 flag = true ; } conn.close() ; } catch(Exception e) {} 16 %>
PreparedStatement
• PreparedStatement 继承 Statement • PreparedStatement比Statement对象使用起 来更加灵活,效率更高
Statement 接口
当 SQL 语句将运行多次时,尽 量使用PreparedStatement,以 便提高运行效率
数据库服务器
应用服务器
数据库服务器
3
JDBC程序的工作原理
Java 应用程序
• JDBC API
– 供程序员调用的接口与类,集成在 java.sql包中,如: • DriverManager类 • Connection接口 • Statement/PreparedStatement接口 • ResultSet接口
在jsp页面中对数据库进行操作的步骤

在jsp页面中对数据库进行操作的步骤
在jsp页面中对数据库进行操作的步骤:
1,创建一个数据源。
2, 加载JDBC-ODBC驱动程序。
Class.forName("com.microsoft.jdbc.sqlserver.SQLSe rverDriver");
<%
out.print(rs.getString(2)); %>
<% out.print(rs.getInt(3)); %>
<%
out.print(rs.getInt(4)); %>
<%
out.print(rs.getInt(5)); %>
关闭rs
rs.close( );
关闭st
st.close();
3,建立一个到数据库的连接。
Connection
conn=DriverManager.getConnection("jdbc:odbc:gra de");
4, 测试
out.print("成功,jdbc驱动可以用");
创建语句对象
Statement
st=conn.createStatement( );
关闭conn
conn.close();
写出sql语句
String sql=“select * from studetSet rs=st.executeQuery(sql);
把结果集以表格形式显示在页面上
<% while(rs.next()){ %>
<% }%>
JSP中实现数据库操作

第3章
在JSP中实现数据库操作
本章任务
通过案例引导的方式,掌握JSP中操作数据库
案例3-1:编写Java程序访问并显示数据库中的用户的信息 案例3-2:在JSP中编写Java代码显示数据库中的用户信息 案例3-3:编写Java类封装数据库处理代码,以供JSP等程序复用 案例3-4:查询3号操作员的信息 案例3-5:用户输入一个用户id,查询该id的用户信息并显示出来 案例3-6:综合运用前面学习的实现技术,编写程序实现对用户信息 进行增加、删除、修改、信息显示的操作
案例3-3
2.编写封装数据的实体类
public class User { private int id; private String name; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } 其他Setter/Getter方法 … }
案例3-3
运行结果
3.3 数据库交互ቤተ መጻሕፍቲ ባይዱ作的实现
固定的数据库访问语句,例如前面案例的码如:
Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery("select * from user"); 上述代码的特点是,访问语句固定,访问的结果数据也会固定,即 不会根据用户的要求改变(否则要修改程序代码)。
如果采用用Java类进行封装,在JSP需要的时候进行调用, 则可以改进上述存在的这些问题。
案例3-3
【案例3-3】编写Java类封装数据库处理代码,以供JSP等 程序复用。 为了改善对数据库访问的JSP代码,可将程序分为四个部 分: 1)封装数据库连接的共享Java类(共享工具类); 2)封装数据的Java类(实体类); 3)封装业务处理的Java类(模型类); 4)JSP主程序(主控程序)。
JSP中使用数据库ppt课件

– void close():断开连接,释放资源; – void rollback():取消SQL语句,取消当前事务中
进行的修改。 – DatabaseMetaData getMetaData():获取一个
DatabaseMetaData对象。
1
• 理解JDBC应用程序编程接口; • 掌握使用纯Java驱动程序操作数据库的编
程方法; • 掌握对数据的增加、删除、修改和查询编
程技术; • 查询记录的分页面显示; • 数据库连接池编程技术。
2
• 7.1 JDBC概述 • 7.2 JDBC应用程序接口简介 • 7.3 利用JDBC访问数据库 • 7.4 数据库操作案例 • 7.5 上机实训 • 7.6 本 章 习 题
8
• 7.2.2 Connection接口 • Connection接口是java.sql包中最重要的接口。
Connection对象代表与数据库的连接。一个应用程 序可与单个数据库有一个或多个连接,或者可与许 多数据库有连接。
• 数据库连接一旦建立,就可用来向它所涉及的数据 库发送SQL语句。Connection的作用是创建向数据 库发送SQL语句的三个接口。这三个接口分别是:
Байду номын сангаас12
• 7.2.3 Statement接口
– public boolean execute(String sql):用于执行返回 多个结果集、多个更新计数或二者结合的SQL语句。
– public int[] executeBatch():用于执行几个SQL语 句。Statement接口使用addBatch(String sql)方法 将几个SQL语句添加到一个语句块中,然后一同提 交给数据库服务器,同时执行。当执行多个SQL insert语句时效率将很高,因为一次提交比多次提 交要节省很多系统资源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ResultSet对象 对象
ResultSet对象以统一形式的列组织的 对象以统一形式的列组织的 数据行组成 Next()方法可以移动游标到下一行 方法可以移动游标到下一行 getXxx()方法可以获得字段值,参数为 方法可以获得字段值, 方法可以获得字段值 位置索引或列名 总是可以使用getString()返回字段值的 总是可以使用 返回字段值的 串表示 不可以颠倒字段的顺序
例8
21
6.分页显示记录 分页显示记录
用户使用分页方式显示ResultSet对象中的数据,就 对象中的数据, 用户使用分页方式显示 对象中的数据 必须始终保持和数据库的连接, 必须始终保持和数据库的连接,直到用户将 ResultSet对象中的数据查看完毕。我们知道,每种 对象中的数据查看完毕。 对象中的数据查看完毕 我们知道, 数据库在同一时刻都有允许的最大连接数目, 数据库在同一时刻都有允许的最大连接数目,因此当 多个用户同时分页读取数据库表的记录时, 多个用户同时分页读取数据库表的记录时,应当避免 长时间占用数据库的连接资源。 长时间占用数据库的连接资源。 com.sun.rowset包中的 包中的CachedRowSetImpl对象 包中的 对象 可以保存ResultSet对象中的数据,而且 对象中的数据, 可以保存 对象中的数据 CachedRowSetImpl对象不依赖 对象不依赖Connnection 对象, 对象, 对象不依赖 这意味着一旦把ResultSet对象中的数据保存到 这意味着一旦把 对象中的数据保存到 CachedRowSetImpl对象中后,就可以关闭和数据 对象中后, 对象中后 库的连接。 库的连接。
17
顺序查询
DatabaseMetaData对象包含了数据库的元 对象包含了数据库的元 数据的信息, 数据的信息,可以调用连接对象的 getMetaData()方法返回该对象 方法返回该对象 DatabaseMetaData metadata= = con.getMetaData(); ; Metadata对象再调用 对象再调用getColumns将表的字 对象再调用 将表的字 段信息以行列的形式存储在ResultSet对象中 段信息以行列的形式存储在 对象中 ResultSet rs= = metadata.getColumns(,,, ,,,) ,,, 例3
16
JDBC API中重要的接口和类 中重要的接口和类
名称 DrvierManager Connection Statement ResultSet 解释 处理驱动的调入并且对产生新的 数据库连接提供支持 代表对特定数据库的连接 代表一个特定的容器, 代表一个特定的容器,容纳并执 行一条SQL语句 行一条 语句 控制执行查询语句得到的结果集
18
随机查询
可滚动的结果集 Statement stmt=con.createStatement(int type, = ( , int concurrency); ); Type取值决定滚动方式 取值决定滚动方式 ResultSet.TYPE_FORWARD_ONLY ResultSet.TYPE_SCROLL_INSENSITIVE ResultSet.TYPE_SCROLL_SENSITIVE Concurrency的取值决定是否可以用结果集更新数据库 的取值决定是否可以用结果集更新数据库 ResultSet.CONCUR_READ_ONLY ResultSet.CONCUR_UPDATABLE 例4
10
使用纯Java数据库驱动程序 数据库驱动程序 使用纯
使用JDBC的应用程序所驻留的计算机 使用 的应用程序所驻留的计算机 Oracle 驱动程序 连接 JDBC SQL Server 驱动程序 MySql 驱动程序 连接 MySql数据库 数据库 SQL Server数据库 数据库 连接 Oracle数据库 数据库
第六章 在JSP中使用数据库 中使用数据库
1
内容提要
JDBC 连接数据库的常用方式 查询操作 更新、 更新、添加与删除操作 使用连接池 使用预处理语句
2
JSP中使用数据库的模式 中使用数据库的模式
Tomcat服务器 服务器 请求 用户 响应 JSP页面 页面 调用 bean 操作结果 返回结果 连接操作 数据库 服务器
Connection con=DriverManager. getConnection(“jdbc:odbc:数据源名字”, 数据源名字” 数据源名字 “uname”, “password”); 例1
9
使用纯Java数据库驱动程序 数据库驱动程序 使用纯
JDBC提供的 提供的API通过将纯 通过将纯Java数据库驱 提供的 通过将纯 数据库驱 动程序转换为DBMS所使用的专用协议 动程序转换为 所使用的专用协议 来实现和特定的DBMS交互信息,简单 交互信息, 来实现和特定的 交互信息 地说,就是JDBC可以调用本地的纯 地说,就是 可以调用本地的纯 Java驱动程序和相应的数据库建立连接 驱动程序和相应的数据库建立连接
13
和指定的数据库建立连接
调用DriverManager类的 类的getConnection方法建立连接,该方法有 方法建立连接, 调用 类的 方法建立连接 三个参数,第一个字符串是JDBC URL,格式为: 三个参数,第一个字符串是 ,格式为: Jdbc:子协议 子名称 子协议:子名称 子协议 Jdbc表示协议,子协议是驱动程序类的名称,子名称为数据库的名 表示协议, 表示协议 子协议是驱动程序类的名称, 如果是远程数据库,还应该包括网络地址,格式如下: 称,如果是远程数据库,还应该包括网络地址,格式如下: //主机名 端口;数据库名 //主机名:端口;数据库名 主机名:端口 第二个参数是用户名, 第二个参数是用户名,第三个参数是密码 String uri=“jdbc:sqlserver://IP地址 端口 地址:端口 地址 端口;DatabaseName= 数据库名” 数据库名”; String user=“”; String password=“”; Connection con=DriverManager.getConnection(uri,user,password); 例2
14
4.查询操作 查询操作
与数据库建立连接后,就可以使用JDBC提供的 提供的API和数 与数据库建立连接后,就可以使用 提供的 和数 据库交互信息,如查询、修改和更新数据库中的表等。 据库交互信息,如查询、修改和更新数据库中的表等。 创建Statement对象 创建 对象 Statement sql=con.createStatement(); 处理查询结果 Statement对象就可以调用相应的方法,实现对数据库中 对象就可以调用相应的方法, 对象就可以调用相应的方法 表的查询和修改, 并将查询结果存放在一个ResultSet 表的查询和修改 , 并将查询结果存放在一个 类声明的对象中 ResultSet rs=sql.executeQuery("SELECT * FROM score"); ;
3
1. SQL Server 2000数据库管理系统 数据库管理系统
SQL Server 2000是一个网络数据库 , 可以 是一个网络数据库, 是一个网络数据库 使远程的计算机访问它所管理的数据库。 使远程的计算机访问它所管理的数据库。安装 好SQL Server 2000后,需启动 后 需启动SQL Server 2000提供的数据库服务器 , 以便使远程的计 提供的数据库服务器, 提供的数据库服务器 算机访问它所管理的数据库。 算机访问它所管理的数据库。 如果您已经安装SQL Server 2000,可以如 如果您已经安装 , 下操作启动SQL Server 2000提供的数据库 下操作启动 提供的数据库 服务器:单击“开始” 服务器:单击“开始”→“程 序”→“Microsoft SQL Server” →“服务器 服务器 管理器” 管理器”。
4
2. JDBC
JDBC(Java DataBase Connectivity) ( ) 运行平台的核心类库中的一部分, 是 Java运行平台的核心类库中的一部分 , 运行平台的核心类库中的一部分 提供了访问数据库的API, 它由一些 提供了访问数据库的 , 它由一些Java 类和接口组成。 类和接口组成。 JDBC操作不同的数据库仅仅是连接方式上 操作不同的数据库仅仅是连接方式上 的差异而已, 一旦建立连接, 的差异而已 , 一旦建立连接 , 就可以采用 相同的方法实现数据库表的查询、 相同的方法实现数据库表的查询 、 修改和 删除等操作 使用JDBC进行如下操作: 进行如下操作: 使用 进行如下操作
与一个数据库建立连接。 与一个数据库建立连接。 向已连接的数据库发送SQL语句。 语句。 向已连接的数据库发送 语句 处理SQL语句返回的结果。 语句返回的结果。 处理 语句返回的结果
5
3.数据库连接的常用方式 数据库连接的常用方式
JDBC-ODBC桥接器 JDBC-ODBC桥接器 纯Java数 数据源 数据库) (Access数据库) 数据库
8
使用JDBC-ODBC桥接器访问数据库的步骤 桥接器访问数据库的步骤 使用 建立JDBC-ODBC桥接器 桥接器 建立
Class.forName("sun.jdbc.odbc.JdbcOdbcDrive r");
创建ODBC数据源 创建ODBC数据源 和ODBC数据源建立连接 数据源建立连接
6
JDBC-ODBC桥接器 桥接器
应用程序建立JDBC和ODBC之间的连接, 和 之间的连接, 应用程序建立 之间的连接 即所谓的建立JDBC-ODBC桥接器,而 桥接器, 即所谓的建立 桥接器 和数据库的连接由ODBC完成 和数据库的连接由 完成
7
JDBC-ODBC桥接器 桥接器
连接 使用JDBC的应用程序所驻留的计算机 的应用程序所驻留的计算机 使用 使用 应用 程序 建立桥接器 连接 JDBC ODBC ODBC数据源 数据源2 数据源 数据库) (SQL Server数据库) 数据库 ODBC数据源 数据源1 数据源 数据库) (Oracle数据库) 数据库