java基础1-jdbc

使用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方法,之后会继续实现其他方法。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值