本周我们在结束了JAVA基础知识学习的基础上,主要学习了JDBC以及JSP基础知识部分的学习。
学会了用Eclipse链接数据库并进行数据的增删改查,也实现了运用eclipse编写简单的web运用读取数据库信息。
1.JDBC中的通用格式
package daoImpl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @author 青鸟 数据库操作基类
*/
public class DBHelper {
// 创建连接对象
Connection conn = null;
// 创建PreparedStatement对象
PreparedStatement pstmt = null;
// 创建结果集ResultSet
ResultSet rs = null;
// 数据库驱动
public final static String DRIVER = "com.mysql.jdbc.Driver";
// url
public final static String URL = "jdbc:mysql://localhost:3306/book";
// 数据库用户名
public final static String DBNAME = "root";
// 数据库密码
public final static String DBPASS = "";
/**
* 获取数据库连接
*
* @return
* @throws ClassNotFoundException
* @throws SQLException
* Connection
*/
public Connection getConn() throws ClassNotFoundException, SQLException {
try {
// 注册驱动
Class.forName(DRIVER);
// 获得数据库连接
conn = DriverManager.getConnection(URL, DBNAME, DBPASS);
} catch (Exception e) {
e.printStackTrace();
}
// 返回连接
return conn;
}
/**
* 释放资源
*
* @param conn
* 数据库连接
* @param pstmt
* PreparedStatement对象
* @param rs
* 结果集
*/
public void closeAll(Connection conn, PreparedStatement pstmt, ResultSet rs) {
/* 如果rs不空,关闭rs */
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/* 如果pstmt不空,关闭pstmt */
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/* 如果conn不空,关闭conn */
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 查询
*
* @param sql
* 预编译的 SQL 语句
* @param param
* 预编译的 SQL 语句中的‘?’参数的字符串数组
* @return 影响的条数
*/
public ResultSet executeQuerySQL(String preparedSql, Object[] param) {
/* 处理SQL,执行SQL */
try {
// 得到数据库连接
conn = getConn();
// 得到PreparedStatement对象
pstmt = conn.prepareStatement(preparedSql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
// 为预编译sql设置参数
pstmt.setObject(i + 1, param[i]);
}
}
// 执行SQL语句,获取结果集ResultSet
rs = pstmt.executeQuery();
} catch (ClassNotFoundException e) {
// 处理ClassNotFoundException异常
e.printStackTrace();
} catch (SQLException e) {
// 处理SQLException异常
e.printStackTrace();
}
return rs;
}
/**
* 增、删、改的操作,不能执行查询
*
* @param sql
* 预编译的 SQL 语句
* @param param
* 预编译的 SQL 语句中的‘?’参数的字符串数组
* @return 影响的行数
*/
public int executeSQL(String preparedSql, Object[] param) {
// 创建连接对象
Connection conn = null;
// 创建PreparedStatement对象
PreparedStatement pstmt = null;
// 创建并初始化返回值
int num = 0;
/* 处理SQL,执行SQL */
try {
// 得到数据库连接
conn = getConn();
// 得到PreparedStatement对象
pstmt = conn.prepareStatement(preparedSql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
// 为预编译sql设置参数
pstmt.setObject(i + 1, param[i]);
}
}
// System.out.println(preparedSql);
// 执行SQL语句,获得影响行数
num = pstmt.executeUpdate();
} catch (ClassNotFoundException e) {
// 处理ClassNotFoundException异常
e.printStackTrace();
} catch (SQLException e) {
// 处理SQLException异常
e.printStackTrace();
} finally {
// 释放资源
closeAll(conn, pstmt, null);
}
return num;
}
}
2.JSP:Java Server Page(java服务器页面),是一个动态的网页技术标准。
3.Tomcat 是个 Web 容器,对外提供获取 Web 资源的服务,在其容器中可以管理静态的 Web 资源,除此之外,还可以解析 JSP 文件,将其解析为 Web 静态资源,供浏览器访问,与 Web 服务器相比,它更加的轻量级。
4.Scriptlet
<%%>
可以包裹任意的 Java 代码
<%=%>
直接输出内容,一般其中可以是变量、表达式,注意这种 Scriptlet 后面是没有结束符号 ; 的。
<%!%>
在此内部定义变量、定义方法、定义类等,现在不用了。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@include file="head.jsp" %>
<h1>content</h1>
<%@include file="foot.jsp" %>
<jsp:include />
5.Page 指令
ContentType 和 pageEncoding
定义页面的流模式和字符编码方式<%
String str = "HELLO";
%>
<jsp:include page="head.jsp"></jsp:include>
<h1><%=str %>,CONTENT</h1>
<jsp:include page="foot.jsp"></jsp:include>
<%
String ageStr = request.getParameter("age");
String name = request.getParameter("name");
int age = Integer.valueOf(ageStr);
if (age < 18) {
%>
<jsp:forward page="n18.jsp?name=<%=name %>"/>
<%
} else {
%>
<jsp:forward page="y18.jsp">
<jsp:param value="<%=name %>" name="name"/>
</jsp:forward>
<%
}
%>
6.
静态包含 include
include 是包含页面的指令,属于静态页面引入。
页面引入的好处在于:可以把多个页面共同的部分抽象出来定义。
<%@include file="head.jsp" %>
<h1>content</h1>
<%@include file="foot.jsp" %>
动态包含
<jsp:include />
<%
String str = "HELLO";
%>
<jsp:include page="head.jsp"></jsp:include>
<h1><%=str %>,CONTENT</h1>
<jsp:include page="foot.jsp"></jsp:include>
在实际的开发中,我们一般都是用动态的引入。
7.
跳转指令
在之前学习的跳转中,都是客户端浏览器发起的页面跳转,可以 A 标签、Submit按钮提交、或者 JavaScript 脚本去完成。
jsp:forward
使用 jsp:forward 进行服务器端的页面跳转。
<%
String ageStr = request.getParameter("age");
String name = request.getParameter("name");
int age = Integer.valueOf(ageStr);
if (age < 18) {
%>
<jsp:forward page="n18.jsp?name=<%=name %>"/>
<%
} else {
%>
<jsp:forward page="y18.jsp">
<jsp:param value="<%=name %>" name="name"/>
</jsp:forward>
<%
}
%>
jsp:forward 属于服务器内部的请求跳转,不会在浏览器的地址栏留下任何跳转的痕迹。
ps:
地址栏不改变的跳转属于服务器跳转;
地址栏改变的跳转属于客户端跳转;
一般使用服务器端的跳转进行业务逻辑的处理,完成目标视图的输出。