1.创建配置文件 daoconfig.properties
代码
<
# key=value 其中 key 不可以重复
userDaoFactory=cn.zsc.jdbc.dao.impl.UserDaoJdbcImpl
>
2.创建实体类 User.java
代码
import java.util.Date;
public class User {
private int id ;
private String name ;
private Date biethday ;
private float money ;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBiethday() {
return biethday;
}
public void setBiethday(Date biethday) {
this.biethday = biethday;
}
public float getMoney() {
return money;
}
public void setMoney(float money) {
this.money = money;
}
}
3. 创建接口 UserDao.java
代码
package cn.zsc.jdbc.dao;
import java.sql.SQLException;
import cn.zsc.jdbc.domain.User;
// 创建接口
public interface UserDao {
public void addUser(User user) ;
public User getUser(int uid);
public User getUser(String username,String password);
public void delUser(int uid);
public void updateUser(User user);
}
4.创建实现接口类 UserDaoJdbcImpl.java
代码
package cn.zsc.jdbc.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import cn.zsc.jdbc.JdbcUtils;
import cn.zsc.jdbc.dao.DaoException;
import cn.zsc.jdbc.dao.UserDao;
import cn.zsc.jdbc.domain.User;
//接口的实现类
public class UserDaoJdbcImpl implements UserDao {
@Override
public void addUser(User user) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConn();
String sql = "insert into user(name,birthday,money) values(?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1, user.getName());
ps.setDate(2, new java.sql.Date(user.getBiethday().getTime()));
ps.setFloat(3, user.getMoney());
ps.executeUpdate();
}catch(SQLException e){
// 为了不让业务逻辑层处理该异常,
throw new DaoException(e.getMessage(),e) ;
} finally {
JdbcUtils.free(rs, ps, conn);
}
}
@Override
public User getUser(int uid) {
User user = new User();
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConn();
String sql = "select id,name,birthday,money from user where id= ?";
ps = conn.prepareStatement(sql);
ps.setInt(1, uid);
rs = ps.executeQuery();
while(rs.next()){
user.setId(rs.getInt("id"));
user.setBiethday(rs.getDate("birthday"));
user.setName(rs.getString("name"));
}
}catch(SQLException e){
// 为了不让业务逻辑层处理该异常,
throw new DaoException(e.getMessage(),e) ;
} finally {
JdbcUtils.free(rs, ps, conn);
}
return user ;
}
@Override
public User getUser(String username, String password) {
return null;
}
@Override
public void delUser(int uid) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConn();
String sql = "delete from user where id=";
ps.setInt(1, uid);
ps.executeUpdate();
}catch(SQLException e){
// 为了不让业务逻辑层处理该异常,
throw new DaoException(e.getMessage(),e) ;
} finally {
JdbcUtils.free(rs, ps, conn);
}
}
@Override
public void updateUser(User user) {
}
}
5.创建接口工厂 DaoFactory.java
代码
package cn.zsc.jdbc.dao;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class DaoFactory {
// 注意 对象的 创建顺序
private static UserDao userDao = null;
private static DaoFactory instance = new DaoFactory();
private DaoFactory() {
try {
Properties prop = new Properties();
// InputStream inStream = new FileInputStream(new File("src/daoconfig.properties"));
// 优点:文件不一定要和路径绑定,只要文件从在于 ClassPath 中 就可以找得到
InputStream inStream = DaoFactory.class.getClassLoader().getResourceAsStream("daoconfig.properties");
prop.load(inStream);
// 从配置文件中获得的 value 值 都是字符串(String)
String userDaoClzz = prop.getProperty("userDaoFactory");
// 通过反射方式 创建对象
Class clazz = Class.forName(userDaoClzz);
userDao = (UserDao) clazz.newInstance();
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static DaoFactory getInstance() {
return instance;
}
public static UserDao getUserDao(){
return userDao ;
}
}
6.自定义异常处理类 DaoException.java
代码
public class DaoException extends RuntimeException {
private static final long serialVersionUID = 1L;
public DaoException() {
}
public DaoException(String message) {
super(message);
}
public DaoException(Throwable cause) {
super(cause);
}
public DaoException(String message, Throwable cause) {
super(message, cause);
}
}
7.代码测试类 UserDaoTest.java
代码
<
import java.util.Date;
import cn.zsc.jdbc.domain.User;
public class UserDaoTest {
public static void main(String[] args) {
UserDao userDao = DaoFactory.getInstance().getUserDao();
User user = new User();
user.setName("dao name1");
user.setBiethday(new Date());
user.setMoney(1000f);
userDao.addUser(user);
userDao.getUser(2);
user.setMoney(4000f);
}
}
8.数据库创建连接类 JdbcUtils.java
代码
<
package cn.zsc.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
// 该工具类不需要被继承
public final class JdbcUtils {
private static String url = "jdbc:mysql://localhost:3306/db_jdbc";
private static String user = "root";
private static String password = "admin";
//不允许被创建
private JdbcUtils(){
}
static{
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundException e){
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConn() throws SQLException{
return DriverManager.getConnection(url, user, password);
}
public static void free(ResultSet rs,Statement st,Connection conn){
try {
if(rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if(st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if(conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
>