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