320 likes | 436 Views
JSP. Java Server Pages. www.huanghuai.edu.cn. 数据库编程. 主要内容: SQL 基础知识 JDBC 基础知识 数据库编程的基本步骤(重点) 每一步的具体实现(重点). 动态 web 最大的特点:可以操作数据库 jsp 属于动态 web 程序 - 可以操作数据库 - jdbc. JDBC 基础知识. JDBC 由一些 Java 语言编写的类和接口组成,是一种可用于执行 SQL 语句的 Java API 。
E N D
JSP Java Server Pages www.huanghuai.edu.cn
数据库编程 • 主要内容: • SQL基础知识 • JDBC基础知识 • 数据库编程的基本步骤(重点) • 每一步的具体实现(重点)
动态web最大的特点:可以操作数据库 jsp属于动态web程序-可以操作数据库-jdbc
JDBC基础知识 • JDBC由一些Java语言编写的类和接口组成,是一种可用于执行SQL语句的Java API。 • 为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以很方便地将各种SQL语句传送到任何的关系数据库中。
JDBC的基本结构 Java应用程序 JDBC API JDBC驱动程序管理器 JDBC Driver API JDBC-ODBC 桥驱动程序 SQL实现的 JDBC驱动程序 ORACLE实现的 JDBC驱动程序 MYSQL实现的 JDBC驱动程序 MYSQL数据库 ODBC数据源 ORACLE数据库 SQL数据库
JDBC中的主要类和接口 JDBC由一系列的类和接口组成,包括连接、sql语句和结果集等,分别用于实现建立与数据库的连接、向数据库发出查询请求、处理数据库返回结果等功能。 java.sql包中访问数据库的重要接口和类 类: DriverMananger SQLException 接口: Driver Connection Statement ResultSet PreparedStatement
JDBC访问数据库的基本步骤 1、引入SQL类 2、创建数据库 3、加载JDBC驱动程序 4、创建数据库连接 5、创建Statement 6、执行Statement 7、处理查询结果集 8、关闭数据库连接
SQL基础知识 SQL是结构化查询语言(Structured Query Language)的缩写。 SQL是用于对存放在计算机数据库中的数据进行组织、管理和检索的一种工具; 是针对一种特定类型的数据库-关系数据库使用的。 SQL的常用语句: 1、Select 2、Insert into 3、Delete 4、Update 5、Create table 6、Drop table
JDBC访问数据库的基本过程 1、加入sql包 2、引入驱动
JDBC访问数据库的基本过程-加载JDBC驱动程序 3.1)加载jdbc-odbc桥驱动程序 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); 3.2)加载microsoft sql server JDBC驱动程序 Class.forName(“ com.microsoft.jdbc.sqlserver.SQLServerDriver”); 3.3) 加载mysql JDBC驱动程序 Class.forName(“com.jdbc.mysql.Driver”); 以上操作时如果找不到驱动程序,会抛出ClassNotFoundException异常,要对异常进行处理。
JDBC访问数据库的基本过程 4、创建数据库连接 调用DriverManager类的静态方法 getConnection(String connect_string) Connection con =DriverManager.getConnection(url,user,pwd); 其中url用于定位数据库,参数格式为:jdbc:<subprotocol>:<subname> 常用的url实例有: jdbc:oracle:thin:@host:1521:orcl jdbc:microsoft:sqlserver://host;DataName=student jdbc:odbc:datasoucer jdbc:mysql://host/myDB
JDBC访问数据库的基本过程 5、创建Statement 创建SQL语句对象,以便执行用户定义的SQL语句。 Statement st=con.createStatement() throws SQLException; Statement st=con.createStatement(int ResultSetType,int ResultSetConcurrency) throws SQLException; 其中参数resultsettype有三个取值 TYPE_FORWORD_ONLY,只可向前滚动; TYPE_SCROLL_INSENSITIVE,双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。 TYPE_SCROLL_SENSITIVE,双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据。参数ResultSetConcurrency有两个取值 ResultSet.CONCUR_READ_ONLY不能用结果集更新数据 ResultSet.CONCUR_UPDATABLE可以执行数据库的新增、修改、和移除。
JDBC访问数据库的基本过程 6、执行Statement SQL语句分为两大类:一类是数据定义和更新语句,用Statement中定义的executeUpdate()成员方法执行;另一类是SELECT查询语句,用Statement中定义的executeQuery()成员方法执行。 ResultSet rs=st.executeQuery("select * from stu");
JDBC访问数据库的基本过程 7、处理查询结果集 Statement执行SQL语句后,将返回一个结果集对象ResultSet。每个ResultSet对象都有一个游标指向结果集的当前位置,游标的初始位置是在结果集的第一行之前。 ResultSet中定位游标的方法主要有: absolute(int row) afterLast() beforeFirst() first() isAfterLast() isBeforeFirst() isFirst() isLast() last() next() previous() 及其他很多方法和操作。
JDBC访问数据库的基本过程 8、关闭数据库连接 rs.close();//关闭记录集 st.close();//关闭语句 con.close();//关闭连接
<%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.sql.*"%> <%! // 定义数据库驱动 String DBDRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ; // 定义数据库连接地址 String DBURL = "jdbc:odbc:mldn" ; // 定义数据库连接对象,属于java.sql包中的接口 Connection conn = null ; // 定义Statement对象,用于操作数据库 Statement stmt = null ; // 定义一字符串变量,用于保存SQL语句 String sql = null ; %> <%
try{ Class.forName(DBDRIVER) ; // 1、加载驱动程序 conn = DriverManager.getConnection(DBURL) ; // 2、连接数据库 stmt = conn.createStatement() ; // 3、操作数据库 // 为sql变量赋值// 插入语句 sql = "INSERT INTO person (name,password,age) VALUES ('LH','zzzzzz',28)" ; // sql = "UPDATE person SET name='李华',password='www.hhxy.cn' WHERE id=3" ; // 更新语句 // sql = “DELETE FROM person WHERE id=4” ; // 按ID删除 stmt.executeUpdate(sql) ; // 通过Statement执行此SQL语句 } catch(Exception e) {out.println("数据库驱动程序加载失败!!!") ; } try// 4、关闭数据库 {stmt.close() ; conn.close() ;} catch(Exception e) {out.println(“数据库关闭失败!!!”) ; } %>
stmt = conn.createStatement() ; // 编写查询的SQL语句 sql = "SELECT id,name,password,age FROM person" ; // 查询数据库,此方法返回ResultSet对象 rs = stmt.executeQuery(sql) ; while(rs.next()) { int id = rs.getInt(1) ; String name = rs.getString(2) ; String password = rs.getString(3) ; int age = rs.getInt(4) ; %> <h2>ID:<%=id%>,姓名:<%=name%>, 密码:<%=password%>,年龄:<%=age%></h2> 查询
<table border="1" width="80%"> <tr><td>ID</td><td>姓名</td> <td>密码</td><td>年龄</td> </tr> <% while(rs.next()) { int id = rs.getInt(1) ; String name = rs.getString(2) ; String password = rs.getString(3) ; int age = rs.getInt(4) ; %> <tr> <td><%=id%></td><td><%=name%></td> <td><%=password%></td><td><%=age%></td> </tr> <%} %> </table>
<form action="login_conf.jsp" method="post"> <table> <tr><td colspan="2">用户登陆</td></tr> <tr><td>用户名:</td> <td><input type="text" name="uname"></td> </tr> <tr><td>密 码:</td> <td><input type="password" name="upassword"></td> </tr> <tr><td colspan="2"> <input type="submit" value="登陆"> <input type="reset" value="重置"> </td> </tr> </table> </form>
数据库连接步骤 数据库连接用到的类和方法 复习
用户输入个人信息,保存到数据库 实例1:用户注册 接收客户端的输入内容 将数据插入数据库 提示用户注册成功 用户注册 用户名: 密 码: register.jsp register_conf.jsp 提交 注册
插入数据 tom,123 插入数据 张三,123
实例2:用户登录 接收客户端输入 查询数据库是否有此记录 正确输出欢迎。。。 用户注册 用户名: 密 码: login.jsp Login_conf.jsp 提交 注册
输入数据库中的数据:tom,123 张三,123 输入其他数据,用户名:fs’ or ‘x’=‘x
PreparedStatement接口继承Statement,并与之在两方面有所不同:PreparedStatement接口继承Statement,并与之在两方面有所不同: PreparedStatement 继承了 Statement 的所有功能。另外它还添加了一整套方法。executeQuery 和execute、 executeUpdate已被更改以使之不再需要参数。 该语句为每个 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供。 PreparedStatement
1、创建 PreparedStatement 对象 以下的代码段(其中 con 是 Connection 对象)创建包含带两个参数占位符的 SQL 语句的 PreparedStatement 对象: PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?"); pstmt 对象包含语句 "UPDATE table4 SET m = ? WHERE x = ?",它已发送给DBMS,并为执行作好了准备。
2、传递 参数 在执行 PreparedStatement 对象之前,必须设置每个 ? 参数的值。这可通过调用 setXXX 方法来完成,其中 XXX 是与该参数相应的类型。 例如,如果参数具有Java 类型 long,则使用的方法就是 setLong。setXXX 方法的第一个参数是要设置的参数的序数位置,第二个参数是设置给该参数的值。 例如,以下代码将第一个参数设为 123456789,第二个参数设为 100000000: pstmt.setLong(1, 123456789); pstmt.setLong(2, 100000000);
3.执行 resultset rs = pstmt .executequery(); pstmt.executeUpdate(); 修改用户登录程序
登录:通过数据库验证,并将用户名保存在session中登录:通过数据库验证,并将用户名保存在session中 留言管理:查询、添加、修改、删除 主要技术:jsp基础语法,request对象、response对象、session对象、jdbc操作、html表单 作业:留言管理模块
实例3:留言管理程序 登录 login.jsp:表单 login_conf.jsp:接收表单参数,连接数据库进行验证,成功将用户名保存在session中跳转到login_success.jsp,失败转到login.jsp login_success.jsp:验证用户是否登录,打印欢迎信息,给出超超链接到list_notes.jsp
留言管理 list_notes.jsp:验证用户是否登录,列出全部数据,连接增加、修改、删除、查询 insert.jsp:验证用户是否登录。表单,插入新的留言,返回list_notes.jsp的超链接 insert_do.jsp:验证用户是否登录,向数据库插入数据 update.jsp:验证用户是否登录,取出要修改的记录,将记录填写在表单中 update_do.jsp:验证用户是否登录,接收修改后的内容,并在数据库中更新 delete_do.jsp:验证用户是否登录,从数据库中删除信息