连接数据库(JDBC)和增删改查(CRUD)的封装

1、配置文件,mysql.properties

driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/blog
name=root
password=1

2、封装JDBC和CRUD的类,JDBC.java

简要描述这个类中的内容:

(1)单例模式,饿汉方式

(2)读取配置文件

(3)连接数据库,获得Connection对象

(4)DML(增删改操作)和DQL(查询操作)

package util;

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.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

/**
 * 1、和数据库建立连接
 * 2、处理DB_Dao传送过来的sql语句,包括增删改查
 */
public class JDBC {
	//饿汉模式
	private static JDBC jdbc = new JDBC();
	private String driver;
	private String url;
	private String name;
	private String password;
	private Connection conn;
	
	public static void main(String[] args) {
		JDBC jdbc = new JDBC();
	}
	/**
	 * 单例模式,私有化构造方法
	 */
	private JDBC(){
		readProperties();
	}
	
	//获得JDBC对象的公开方法
	public static JDBC getInstance(){
		return jdbc;
	}
	
	//读取配置文件
	private void readProperties(){
		try {
			Properties p = new Properties();
			InputStream is = JDBC.class.getResourceAsStream("mysql.properties");
			p.load(is);
			is.close();
			driver = p.getProperty("driver");
			url = p.getProperty("url");
			name = p.getProperty("name");
			password = p.getProperty("password");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//连接数据库
	private Connection conn(){
		try {
			Class.forName(driver);
			return DriverManager.getConnection(url,name,password);
			
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 增删改操作
	 * @return 返回受影响的行数
	 */
	private int DML(String sql,Object...paras){
		PreparedStatement ps = null;
		try {
			conn = conn();
			ps = conn.prepareStatement(sql);	
			return ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(ps != null){
				try {
					ps.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			
			if(conn != null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		
		return 0;
	}
	
	
	public int insert(String sql,Object...paras){
		
		return DML(sql,paras);
	}
	
	public int update(String sql,Object...paras){
		
		return DML(sql,paras);
	}
	
	public int delete(String sql,Object...paras){
		
		return DML(sql,paras);
	}
	
	private List<Map<String,Object>> DQL(String sql,Object...paras){
		List<Map<String,Object>> lists = new ArrayList<Map<String,Object>>();
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			conn = conn();
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			//对结果集进行操作
			ResultSetMetaData rsmd = rs.getMetaData();
			int columnCount = rsmd.getColumnCount();
			while(rs.next()){
				Map<String,Object> map = new HashMap<String,Object>();
				for(int j=1;j<=columnCount;j++){
					map.put(rsmd.getColumnName(j), rs.getObject(j));
				}
				lists.add(map);
			}
			return lists;
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null){
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(ps != null){
				try {
					ps.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(conn != null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		
		return null;
	}
	
	public List<Map<String,Object>> query(String sql,Object...paras){
		return DQL(sql,paras);
	}
	
}

3、如何使用

(1)数据库创建表t_blog(其中date是datetime类型)

(2)创建实体类Blog

package entity;

import java.util.Date;


public class Blog {

	private Integer id;
	private String title;
	private String content;
	private String type;
	private Date date;
	
	
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	
	
}

(3)创建Run类,Run.java

package run;


import java.sql.Timestamp;
import java.util.Date;

import entity.Blog;
import util.JDBC;

public class Run {
	public static void main(String[] args) {
		/*实例化Blog对象*/
		Blog blog = new Blog();
		
		/*实例化JDBC对象*/
		JDBC jd =JDBC.getInstance();
		
		/*初始化blog对象*/
		blog.setId(10);
		blog.setTitle("JAVA学习之JDBC");
		blog.setContent("一点都不难");
		blog.setType("编程语言");
		//设置成当前系统Data
		blog.setDate(new Date());
		
		/*用变量接收设置好的对象属性*/
		Integer id = blog.getId();
		String title = blog.getTitle();
		String content = blog.getContent();
		String type = blog.getType();
		Date date = blog.getDate();
		//Java中Date类型保存到数据库中的datetime类型要转化一下
		 long longTime = date.getTime();
	     Timestamp datetime = new Timestamp(longTime);
		
		/*将对象保存到数据库中*/
		//自定义sql语句
		String sql = "INSERT INTO t_blog (`id`,`title`,`content`,`type`,`date`) VALUE (?,?,?,?,?)";
		jd.insert(sql, id,title,content,type,datetime);
		
	}
}	

(4)Run的执行结果

4、如何升级

在Run中,要保存一条数据是如此的麻烦:

(1)实例化对象

(2)初始化对象属性

(3)自定义sql语句

(4)执行sql语句,要传参

升级:https://blog.csdn.net/Carl_changxin/article/details/82114202

猜你喜欢

转载自blog.csdn.net/Carl_changxin/article/details/82112563
今日推荐