使用jdbc保存一个对象到mysql中
jdbc.properties 文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/shop
jdbc.user=root
jdbc.password=root
sql 文件
create database shop;
create table user (
id int primary key AUTO_INCREMENT,
user_name varchar(20),
nick_name varchar(20),
passwd varchar(20),
birthday varchar(20)
)
User.java
package shop.model;
import java.util.Date;
/**
* user类
* @author zhengwu
*
*/
public class User {
private int id;
private String name;
// 昵称
private String nickName;
private String passWord;
// 出生日期,在数据库中用时间戳表示
private Date BirthDay;
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 String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public Date getBirthDay() {
return BirthDay;
}
public void setBirthDay(Date birthDay) {
BirthDay = birthDay;
}
}
UserDao.java
package shop.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import shop.model.User;
import shop.util.DbUtil;
/**
* 实现User的增删查改操作
* 思考怎样才能让该类具有较好的扩展性,实现简单的orm 的操作
* @author zhengwu
*
*/
public class UserDao {
Connection conn=DbUtil.getConnection();
public void save(User user){
PreparedStatement preStmt=null;
try {
preStmt=conn.prepareStatement("INSERT INTO "
+ " user (user_name,nick_name,passwd,birthday) values(?,?,?,?)");
preStmt.setString(1, user.getName());
preStmt.setString(2, user.getNickName());
preStmt.setString(3, user.getPassWord());
preStmt.setString(4,String.valueOf(user.getBirthDay().getTime()));
preStmt.execute();
} catch (SQLException e) {
System.out.println("存储user失败");
e.printStackTrace();
}finally{
DbUtil.closeConn(conn);
if(preStmt!=null){
try {
preStmt.close();
preStmt=null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
DbUtil.java
package shop.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
*数据库处理工具类
*知识点:
*创建jdbc连接的步骤
*Properties 的使用
*此处connection设置成单例不知道是否合适(其实也无大碍,一般都是使用之后立即关闭的,用的时又重新new)
*
* @author zhengwu
*
*/
public class DbUtil {
private static Properties prop=PropertiesUtil.getJdbcProp();
private static String driver=prop.getProperty("jdbc.driver");
private static String url=prop.getProperty("jdbc.url");
private static String user=prop.getProperty("jdbc.user");
private static String password=prop.getProperty("jdbc.password");
private static Connection conn=null;
/**
* 获得Connection
* @return
*/
public static Connection getConnection(){
if(conn==null){
try {
Class.forName(driver).newInstance();
conn=DriverManager.getConnection(url,user,password);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.out.println("没有导入jdbc驱动");
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
}
return conn;
}
/**
* 关闭Connection
* @param conn
*/
public static void closeConn(Connection conn){
if(conn!=null){
try {
conn.close();
conn=null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 获得Statement
* @param conn
* @return
*/
public static Statement getSment(Connection conn){
Statement stmt=null;
try {
stmt= conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
return stmt;
}
/**
* 关闭statement
* @param stmt
*/
public static void close(Statement stmt){
if(stmt!=null){
try {
stmt.close();
stmt=null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 获得ResultSet
* @param stmt
* @param sql
* @return
*/
public static ResultSet getResultSet(Statement stmt,String sql){
ResultSet resultSet=null;
try {
resultSet=stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return resultSet;
}
/**
* 关闭ResultSet
* @param resultSet
*/
public static void closeResultSet(ResultSet resultSet){
if(resultSet!=null){
try {
resultSet.close();
resultSet=null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
PropertiesUtil.java
package shop.util;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
/**
* 返回jdbc的配置文件信息
* Properties 的使用方法
* @author zhengwu
*
*/
public class PropertiesUtil {
private static Properties prop;
public static Properties getJdbcProp(){
if(prop == null){
try {
prop=new Properties();
prop.load(PropertiesUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"));
} catch (FileNotFoundException e) {
System.out.println("jdbc properties iss not found");
e.printStackTrace();
} catch (IOException e) {
System.out.println("jdbc properties file is wrong");
e.printStackTrace();
}
}
return prop;
}
}
userDao.Test.java
package test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import shop.dao.UserDao;
import shop.model.User;
public class UserDaoTest {
public static void main(String[] args){
User u=new User();
u.setName("zheng");
u.setNickName("rocky");
u.setPassWord("root");
Date birhtd=null;
try {
SimpleDateFormat formate=new SimpleDateFormat("YY/MM/dd");
birhtd=formate.parse("1990/03/14");
} catch (ParseException e) {
e.printStackTrace();
}
u.setBirthDay(birhtd);
UserDao userDao=new UserDao();
userDao.save(u);
}
}
为了不处理简单起见将birthDay直接改成了String类型。日期时间的处理稍后处理
还只实现了save方法,之后会继续实现其他方法。