1. JDBC 介绍
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组由 Java 语言编写的类和接口组成。
2. JavaBean 介绍
从面向对对象和代码可维护性的角度来考虑,JSP 页面应该尽可能少得使用脚本代码。JSP 可以通过组件实现功能扩充。
JavaBean 是 Java 的可重用组件技术,能提供一定的通用功能。 JavaBean 是一种符合某些命名和设计规范的 Java 类,通过封装属性和方法而具有某种功能或者处理某个业务。使用 JavaBean 能使 JSP 页面变的清晰,降低维护的难度。
3. JavaBean 编码规范
- 该类是一个公有类,并用 package 语句声明属于某个包
- 该类实现了java.io.Serializable 接口
- 该类如果有构造方法,那么这个构造方法是公有且无参的
- 该类的属性一般是私有的
- 私有属性有公有的访问器方法
4. 基于 JDBC 连接数据库的 JavaBean 的实现
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DBUtil {
private String driver;
private String username;
private String url;
private String password;
private Connection con;
private PreparedStatement pstmt;
private ResultSet rs;
public void setDriver(String driver) {
this.driver = driver;
}
public void setUsername(String username) {
this.username = username;
}
public void setUrl(String url) {
this.url = url;
}
public void setPassword(String password) {
this.password = password;
}
public DBUtil() {
driver = "com.mysql.jdbc.Driver";
url = "jdbc:mysql://localhost:3306/book?autoReconnect=true&useSSL=false";
username = "root";
password = "password";
}
//获取连接对象
private Connection getConnection() {
try {
Class.forName(driver);
con = DriverManager.getConnection(url,username,password);
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
return con;
}
//给pstmt 的SQL语句设置参数(参数以数组形式给出)
private void setParams(String sql, String[] params) {
this.getConnection();
try {
//创建一个PreparedStatement对象,用于执行预编译的SQL语句
pstmt = con.prepareStatement(sql);
for (int i = 0; i<params.length; i++)
pstmt.setString(i+1, params[i]);
}catch(SQLException e) {
e.printStackTrace();
}
}
//执行数据库查询操作时,将返回的结果封装到List对象中
@SuppressWarnings({ "rawtypes", "unchecked" })
public List getResultList(String sql, String[] params) {
List list = new ArrayList();
try {
this.setParams(sql, params);
ResultSet rs = pstmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
while(rs.next()) {
Map m = new HashMap();
for (int i = 1; i<=rsmd.getColumnCount(); i++) {
String colName = rsmd.getColumnName(i);
m.put(colName, rs.getString(colName));
}
list.add(m);
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
close();
}
return list;
}
@SuppressWarnings("rawtypes")
public Map getMap(String sql, String[] params) {
List list = getResultList(sql, params);
if(list.isEmpty()) return null;
else return (Map)list.get(0);
}
//更新数据库时调用的update 方法
public int update (String sql, String[] params) {
int recNo = 0; //表示受影响的记录行数
try {
this.setParams(sql, params); //根据sql 和 params ,设置 pstmt 对象
recNo = pstmt.executeUpdate(); // 执行更新操作
}catch (Exception e) {
e.printStackTrace();
}finally {
close();
}
return recNo;
}
//关闭对象
private void close() {
try {
if(rs!= null)
rs.close();
if(pstmt != null)
pstmt.close();
if(con != null)
con.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
Reference
- Java Web 开发技术教程
请多多指教!