第四章 JSP和JavaBean访问数据库

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/Mythology_px/article/details/82634291

JavaBean

     符合Java规范的类都是JavaBean

  • 封装数据
    • 按照面向对象(OOP)原则,属性与数据库表字段相对应
    • 属性私有
    • 具有public的set/get方法
  • 封装业务
    • 具有实现特定功能的方法和方法实现
    • 通常与一个封装数据的JavaBean对应

           数据库

--创建student表
create table student(
       stuno number(11) primary key ,
       sname varchar2(20) not null,
       bir date
);
commit;
select * from student;
--添加数据
insert into student values(1,'陈圆圆','23-2月-1880');
insert into student values(2,'李师师','23-2月-1770');
insert into student values(3,'赵飞燕','23-2月-1666');
commit;

​​​​​​​           JavaBean

package com.entity;

import java.sql.Date;

/*
 * 创建学生对象,属性与数据库student表字段相对应
 */
public class Student {
	private int stuno;//学生编号
	private String sname; // 姓名
	private Date bir;// 出生年月
	
	// 构造方法
	public Student() {
		super();
	}	
	public Student(int stuno, String sname, Date bir) {
		super();
		this.stuno = stuno;
		this.sname = sname;
		this.bir = bir;
	}

	//提供公有的get()和set()方法
	public int getStuno() {
		return stuno;
	}
	public void setStuno(int stuno) {
		this.stuno = stuno;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public Date getBir() {
		return bir;
	}
	public void setBir(Date bir) {
		this.bir = bir;
	}
	
	@Override
	public String toString() {
		return "Student [stuno=" + stuno + ", sname=" + sname + ", bir=" + bir
				+ "]";
	}
	
}
package com.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/*
 * Oracle数据库连接的工具类
 */
public class DBOracle {
	private static String driver = "oracle.jdbc.driver.OracleDriver"; // 数据库驱动类完全限定名
	private static String url = "jdbc:oracle:thin:@localhost:1521:orcl";	// 数据库连接字符串
	private static String user = "Micro"; // 用户名
	private static String password = "mjsw"; // 密码
	
	private static Connection conn = null;
	private static Statement exeSQL = null;
	//加载驱动以及连接数据库
	public static Statement getOracleConn() throws ClassNotFoundException, SQLException{
		// 加载驱动
		Class.forName(driver);
		// 获取数据库连接
		conn = DriverManager.getConnection(url, user, password);
		// 创建执行SQL载体
		exeSQL = conn.createStatement();
		return exeSQL;
	}
	
	//关闭数据库连接
	public static void closeOracleConn() throws SQLException{
		if(conn!=null && exeSQL!=null){
			exeSQL.close();
			conn.close();
		}
	}
}

​​​​​​​           JSP访问数据库

<%@ page language="java" import="java.util.*,com.entity.*,com.util.*,java.sql.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
 	 <title></title>
  </head>
  
  <body>
  	<%
  		// 连接数据库,获取数据库执行体对象
  		Statement exeSQL = DBOracle.getOracleConn();
  		// 执行SQL语句查询,返回结果集
  		String sql = "select * from student";
  		ResultSet rs = exeSQL.executeQuery(sql);
  		// 创建对象集合
  		List<Student> list = new ArrayList<Student>();
  		// 遍历结果集,并将数据存入集合
  		while(rs.next()){
  			// 获取数据
  			int stuno = rs.getInt(1);
  			String sname = rs.getString(2);
  			java.sql.Date bir = rs.getDate(3);
  			// 存入集合
  			list.add(new Student(stuno, sname, bir));
  		}
  		//关闭连接
  		rs.close();
  		DBOracle.closeOracleConn();
  		// 循环遍历集合
  		for(Student stu : list){
  		/*
  			input标签和println都属于循环体,
  			但是input是标签,所以不能写在脚本标签中,标签中的值,也可以通过表达式标签赋值
  			所以使用了脚本标签的拼接,使标签和Java语句并存于循环体中
  		*/
  	%>
  			<input type="text" value="<%=stu.getSname() %>"/><br />
  	<%
			System.out.println(stu);
  		}		
  	 %>

  </body>
</html>

 

JSP动作标签

  • 将 JavaBean 嵌入 JSP 页面
  • 设置和获取 JavaBean 的属性
  • 将用户请求转发给其他页面
  • 将其他页面的内容嵌入当前页面

Java标准动作

       <jsp:useBean></jsp:useBean>  ---- 定义Java实体类

       <jsp:setProperty />  ----设置JavaBean的属性值

       <jsp:getProperty />  ----获取JavaBean的属性值

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
 	 <title>标准动作</title>
  </head>
  
  <body>
  	<!--用标准动作标签使用useBean-->
  	<!--创建Student对象,名字为stu,作用域为整个页面-->
  	<jsp:useBean id="stu" class="com.entity.Student" scope="page"></jsp:useBean>
  	
  	<!--给名字为stu的对象的sname属性赋值墨渐生微-->
  	<jsp:setProperty property="sname" name="stu" value="墨渐生微"/>
  	
  	<!--获取名字为stu的对象的sname属性的值,并输出到页面-->
  	<jsp:getProperty property="sname" name="stu"/><br />
  	<!--也可以将获取的值作为标签的值-->
  	<input value="<jsp:getProperty property="sname" name="stu"/>"/>	
  </body>
</html>

       <jsp:forward></jsp:forward>  ----跳转页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
 	 <title>跳转</title>
  </head>
  
  <body>
  	<!--界面请求跳转标签-->
  	<jsp:forward page="index.jsp"></jsp:forward>
  </body>
</html>

       <jsp:include></jsp:include>  ----引入页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
 	 <title>index.jsp</title>
  </head>
  
  <body>
  	墨渐生微
  	<%
  		String str = "欢迎关注";
  	 %>
  </body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
 	 <title>include标准动作</title>
  </head>
  
  <body>
  	<jsp:include page="index.jsp"></jsp:include>
  	<%
  		//error: 动态引入,在运行期间引入被引入页面所生成的HTML,完全是独立的页面运行,所以数据不能共享
  		// str 是在index页面定义的String变量,include标准动作引入,不能实现数据共享,不能访问str字符串
  		//out.write(str);
  	 %>
  </body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
 	 <title>include指令</title>
  </head>
  
  <body>
  	<%@include file="index.jsp" %>
  	<%
  		//right:  静态引入,在翻译期间,直接将被引入页面copy到相应的位置,相当于是同一个界面,所以数据是共享的  
  		// str是在index页面定义的String变量,include指令引入,可以实现数据共享,能访问str字符串
  		out.write(str);
  	 %>
  </body>
</html>

猜你喜欢

转载自blog.csdn.net/Mythology_px/article/details/82634291