前景
记得刚刚开始教JDBC技术,发现学生接收能力还可以。可是等讲到使用工具类BaseDao时,就崩溃了。所以就整理了一份使用JDBC访问数据库BaseDao工具类。不说了,直接开干!!!
步骤
1:准备Jar包。mysql-connector-java-5.1.0-bin.jar
注意-----在项目中新建一个文件夹lib,将Jar包放入其中。并且点击Jar包右键Build Path–>Add to Build Path。
2:在项目中新建一个包---com.bdqn.common。在里面新建一个工具类BaseDao。
package com.bdqn.common;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* 封装JDBC--公有类
*
* @author 凯凯小可爱
*/
public class BaseDao {
private static String driver = "";
private static String url = "";
private static String userName = "";
private static String password = "";
protected static Connection conn = null; //连接对象
protected static ResultSet result = null; // 用来接收返回结果
protected static PreparedStatement pstm = null;
/**
* 1:加载驱动
*/
public static void init() {
try {
// 获取配置文件中(database.properties)的属性值
Properties p = new Properties();
// 获取输入流
InputStream ist = BaseDao.class.getClassLoader().getResourceAsStream("database.properties");
// 加载配置文件
p.load(ist);
// 获取对应值传递给属性
driver = p.getProperty("driver");
url = p.getProperty("url");
userName = p.getProperty("userName");
password = p.getProperty("password");
// 加载驱动
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 2:获取连接
* @return
*/
public static Connection getConnection() {
try {
conn = DriverManager.getConnection(url, userName, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 3:执行SQL,并返回结果
* @param sql
* 执行SQL
* @param obj
* SQL中的参数--数组
* @return 返回受影响行数
*/
public static int executeUpdate(String sql, Object[] obj) {
int count = 0;
init(); // 加载驱动
conn = getConnection(); // 获取连接
try {
// 进行SQL预处理
pstm = conn.prepareStatement(sql);
// 进行传参
for (int i = 0; i < obj.length; i++) {
pstm.setObject(i + 1, obj[i]);
}
// 执行SQL命令,并返回受影响的行数
count = pstm.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
// 调用关闭资源的方法
closeAll(pstm, conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
return count;
}
/**
* 3:执行SQL,并返回结果
* @param sql
* 执行SQL
* @param obj
* SQL中的参数--数组
* @return 返回结果---调用后再关闭连接
*/
public static ResultSet executeQuery(String sql, Object[] obj) {
init(); // 加载驱动
conn = getConnection(); // 获取连接
try {
// 进行SQL预处理
pstm = conn.prepareStatement(sql);
// 进行传参
for (int i = 0; i < obj.length; i++) {
pstm.setObject(i + 1, obj[i]);
}
// 执行SQL命令,并返回受影响的行数
result = pstm.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
/**
* 4:关闭资源
* @param res
* 返回的结果
* @param stmt
* 执行SQL对象
* @param conn
* 连接对象
* @throws SQLException
*/
public static void closeAll(ResultSet res, Statement stmt, Connection conn) throws SQLException {
if (res != null)
res.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
/**
* 4:关闭资源
* @param stmt
* 执行SQL对象
* @param conn
* 连接对象
* @throws SQLException
*/
public static void closeAll(Statement stmt, Connection conn) throws SQLException {
closeAll(null, stmt, conn);
}
}
3:新增database.properties配置文件。注意一定要建在src文件夹中。
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/myschool?characterEncoding=utf-8
userName=root
password=1234
4:新建com.bdqn.entity---->专门用来装实体类的实体包
package com.bdqn.entity;
/**
* 科目类
* @author 凯凯小可爱
*/
public class Subject {
private Integer subjectNo; //科目编号
private String subjectName; //科目名称
private Integer classHour; //课时
private Integer gradeID; //所属年级编号
//无参的构造函数
public Subject() {
super();
}
public Subject(Integer subjectNo, String subjectName, Integer classHour, Integer gradeID) {
super();
this.subjectNo = subjectNo;
this.subjectName = subjectName;
this.classHour = classHour;
this.gradeID = gradeID;
}
//省略对属性的封装代码。
}
5:新建com.bdqn.dao---->数据访问层的接口包
com.bdqn.dao.impl---->数据访问层的接口实现包
6:新建com.bdqn.service---->业务逻辑层的接口包
com.bdqn.service.impl---->业务逻辑层的接口实现包
7:新建com.bdqn.test---->测试包中的测试类
加油!菜鸟!!!