1、JDBCUtil.java
使用类加载器加载配置文件,赋给静态字符串变量
dbcfg.properties
className=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/user
username=root
password=root
JdbcUtil.java
package com.xiaozhi.utils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JdbcUtil
{
private static String className;
private static String url;
private static String username;
private static String password;
private static String connection;
static
{
try
{
InputStream inputStream = JdbcUtil.class.getClassLoader().getResourceAsStream("dbcfg.properties");
Properties properties = new Properties();
properties.load(inputStream);
className = properties.getProperty("className");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
connection = properties.getProperty("connection");
Class.forName(className);
} catch (Exception e)
{
throw new RuntimeException(e);
}
}
public static Connection getConnection() throws Exception{
return DriverManager.getConnection(url, username, password);
}
public static void release(Connection connection,Statement statement,ResultSet resultSet){
try
{
if(resultSet!=null){
resultSet.close();
}
} catch (SQLException e)
{
e.printStackTrace();
}
try
{
if(statement!=null){
statement.close();
}
} catch (SQLException e)
{
e.printStackTrace();
}
try
{
if(connection!=null){
connection.close();
}
} catch (SQLException e)
{
e.printStackTrace();
}
}
}
2、UserDaoMySqlImpl
1)、statement.setDate(4, new Date(user.getBirthday().getTime()));
第二个参数是一个java.sql.Date类型,需要将 java.util.Date 转化成 java.sql.Date
2)、resultSet.getString("id")
数据库里是int类型,也可以用getString取
3)、execute(String sql)
用于向数据库发送任意sql语句,例如创建数据库语句,增加列,更改列名。
package com.xiaozhi.dao.impl;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.xiaozhi.dao.UserDao;
import com.xiaozhi.domain.User;
import com.xiaozhi.utils.JdbcUtil;
public class UserDaoMySqlImple implements UserDao
{
@Override
public boolean find(String username)
{
Connection connection=null;
PreparedStatement statement=null;
ResultSet resultSet=null;
try
{
connection=JdbcUtil.getConnction();
String sql="select * from user where username=?";
statement=connection.prepareStatement(sql);
statement.setString(1,username);
resultSet=statement.executeQuery();
if(resultSet.next()){
return true;
}
} catch (Exception e)
{
e.printStackTrace();
}finally{
JdbcUtil.release(connection, statement, resultSet);
}
return false;
}
@Override
public void add(User user)
{
Connection connection=null;
PreparedStatement statement=null;
ResultSet resultSet=null;
try
{
connection=JdbcUtil.getConnction();
String sql="insert into user(username,password,email,birthday,nickname)values(?,?,?,?,?)";
statement=connection.prepareStatement(sql);
statement.setString(1,user.getUsername());
statement.setString(2, user.getPassword());
statement.setString(3, user.getEmail());
statement.setDate(4, new Date(user.getBirthday().getTime()));//这里接受的是一个java.sql.Date类型:将 java.util.Date 转化成 java.sql.Date
statement.setString(5,user.getNickname());
statement.executeUpdate();
} catch (Exception e)
{
e.printStackTrace();
}finally{
JdbcUtil.release(connection, statement, resultSet);
}
}
@Override
public User find(String username, String password)
{
Connection connection=null;
PreparedStatement statement=null;
ResultSet resultSet=null;
try
{
connection=JdbcUtil.getConnction();
String sql="select * from user where username=? and password=?";
statement=connection.prepareStatement(sql);
statement.setString(1,username);
statement.setString(2,password);
resultSet=statement.executeQuery();
if(resultSet.next()){
User user=new User();
user.setId(resultSet.getString("id"));//数据库里是int类型,可以用getString取
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
user.setEmail(resultSet.getString("email"));
user.setBirthday(resultSet.getDate("birthday"));
user.setNickname(resultSet.getString("nickname"));
return user;
}
} catch (Exception e)
{
e.printStackTrace();
}finally{
JdbcUtil.release(connection, statement, resultSet);
}
return null;
}
}
表头
表尾
3、解耦:使用类加载器
obj.properties
className=com.xiaozhi.dao.impl.UserDaoMySqlImple
ObjectFactory.java
package com.xiaozhi.factory;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import com.xiaozhi.dao.UserDao;
public class ObjectFactory
{
private static String className;
static{
try
{
InputStream inputStream= ObjectFactory.class.getClassLoader().getResourceAsStream("obj.properties");
Properties properties=new Properties();
properties.load(inputStream);
className =properties.getProperty("className");
} catch (IOException e)
{
e.printStackTrace();
}
}
private static ObjectFactory instatnce=new ObjectFactory();
private ObjectFactory(){}
public static ObjectFactory getInstance(){
return instatnce;
}
public UserDao getUserDaoImpl(){
try
{
return (UserDao) Class.forName(className).newInstance();
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}