0.准备工作

开发工具: MySQL数据库, intelliJ IDEA2017.

准备jar包: mysql-connector-java-5.1.28-bin.jar(其他均可)

1. 数据库数据准备

2. 项目结构图示

3.代码

实体类Book.java

package com.zzuli.entity;

import java.util.Date;

/**
*
* 图书实体类
* Created by hejjon on 2019/5/25.
*/
public class Book {
private int id;
private String bookName;
private String author;
private Date pubDate; // 出版日期 util.Date public Book() {
} public Book(int id, String bookName, String author, Date pubDate) {
this.id = id;
this.bookName = bookName;
this.author = author;
this.pubDate = pubDate;
} public Book(String bookName, String author, Date pubDate) {
this.bookName = bookName;
this.author = author;
this.pubDate = pubDate;
} public int getId() {
return id;
} public String getBookName() {
return bookName;
} public String getAuthor() {
return author;
} public Date getPubDate() {
return pubDate;
} public void setId(int id) {
this.id = id;
} public void setBookName(String bookName) {
this.bookName = bookName;
} public void setAuthor(String author) {
this.author = author;
} public void setPubDate(Date pubDate) {
this.pubDate = pubDate;
} @Override
public String toString() {
return "Book{" +
"id=" + id +
", bookName='" + bookName + '\'' +
", author='" + author + '\'' +
", pubDate=" + pubDate +
'}';
}
}

Dao层接口 BookDao.java

package com.zzuli.dao;

import com.zzuli.entity.Book;

import java.util.List;

/**
* Created by hejjon on 2019/5/25.
*/
public interface BookDao { /**
* 增添图书
* @param book 要添加的book对象
* @return
*/
int insertBook(Book book); /**
* 删除指定id的图书
* @param id 要删除的图书的id
* @return
*/
int deleteBook(int id); /**
* 修改图书
* @param book 修改后的图书
* @return
*/
int updateBook(Book book); /**
* 查找指定书名的图书
* @param bookName
* @return
*/
Book selectBookByName(String bookName); List<Book> selectAllBook();
}

Dao层实现类: BookDaoImpl.java

package com.zzuli.dao.impl;

import com.zzuli.dao.BookDao;
import com.zzuli.entity.Book; import java.sql.*;
import java.util.ArrayList;
import java.util.List; /**
* Created by hejjon on 2019/5/25.
*/
public class BookDaoImpl implements BookDao { private final String jdbcDriver = "com.mysql.jdbc.Driver";
private final String url = "jdbc:mysql://localhost:3306/db_book";
private final String userName = "root";
private final String password = "123123"; @Override
public int insertBook(Book book) {
int n = 0;
String sql = "insert into t_book values (default,?,?,?)";
Connection conn = null;
PreparedStatement ps = null;
java.sql.Date pubDate = null;
try {
// 加载驱动
Class.forName(jdbcDriver);
// 获取连接
conn = DriverManager.getConnection(url, userName, password);
// 创建会话
ps = conn.prepareStatement(sql);
// 设置 ? 的值
ps.setString(1, book.getBookName());
ps.setString(2, book.getAuthor());
pubDate = new java.sql.Date(book.getPubDate().getTime());
ps.setDate(3, pubDate);
// 执行sql
n = ps.executeUpdate(); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally { // 关闭数据库资源
try {
if (null != ps) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (null != conn) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return n;
} @Override
public int deleteBook(int id) {
String sql = "delete from t_book where id=?";
int n = 0;
Connection conn = null;
PreparedStatement ps = null; try {
// 加载驱动
Class.forName(jdbcDriver);
// 获取连接
conn = DriverManager.getConnection(url, userName, password);
// 创建会话
ps = conn.prepareStatement(sql);
// 设置 ? 的值
ps.setInt(1, id);
// 执行sql
n = ps.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (null != ps) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (null != conn) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} return n;
} @Override
public int updateBook(Book book) {
String sql = "update t_book set bookName=?, author=?, pubDate=? where id=?";
int n = 0;
Connection conn = null;
PreparedStatement ps = null;
try {
// 加载驱动
Class.forName(jdbcDriver);
// 获取连接
conn = DriverManager.getConnection(url, userName, password);
// 创建会话
ps = conn.prepareStatement(sql);
ps.setString(1, book.getBookName());
ps.setString(2, book.getAuthor());
ps.setDate(3, new java.sql.Date(book.getPubDate().getTime()));
ps.setInt(4, book.getId());
n = ps.executeUpdate(); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (null != ps) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (null != conn) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return n;
} @Override
public Book selectBookByName(String bookName) {
String sql = "select * from t_book where bookName=?";
Book book = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 加载驱动
Class.forName(jdbcDriver);
// 获取连接
conn = DriverManager.getConnection(url, userName, password);
// 创建会话
ps = conn.prepareStatement(sql);
ps.setString(1, bookName);
rs = ps.executeQuery(); if (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("bookName");
String author = rs.getString("author");
java.util.Date pubDate = rs.getDate("pubDate");
book = new Book(id, name, author, pubDate);
} } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (null != ps) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (null != conn) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return book;
} @Override
public List<Book> selectAllBook() {
String sql = "select * from t_book";
List<Book> list = new ArrayList<>();
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null; try {
// 加载驱动
Class.forName(jdbcDriver);
// 获取连接
conn = DriverManager.getConnection(url, userName, password);
// 创建会话
ps = conn.prepareStatement(sql);
// 获取结果集
rs = ps.executeQuery();
// 遍历结果集
while (rs.next()) {
int id = rs.getInt("id");
String bookName = rs.getString("bookName");
String author = rs.getString("author");
Date pubDate = rs.getDate("pubDate"); Book book = new Book(id, bookName, author, pubDate);
list.add(book);
} } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (null != ps) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (null != conn) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} return list;
}
}

测试类:Test.java

package com.zzuli.test;

import com.zzuli.dao.BookDao;
import com.zzuli.dao.impl.BookDaoImpl;
import com.zzuli.entity.Book; import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; /**
* 测试类
* Created by hejjon on 2019/5/25.
*/
public class Test {
public static void main(String[] args) {
// testInsert();
// testDelete();
// sestUpdate();
// testSelect(); testSelectAllBook(); } private static void testSelectAllBook() {
BookDao bookDao = new BookDaoImpl(); List<Book> list = new ArrayList<>(); list = bookDao.selectAllBook(); for (Book book : list) {
System.out.println(book);
}
} // 测试按书名查找图书
public static void testSelect() {
BookDao bookDao = new BookDaoImpl();
Book book = bookDao.selectBookByName("西游记"); System.out.println(book);
} // 测试修改图书方法
public static void testUpdate() {
// 创建dao层实现类对象
BookDao bookDao = new BookDaoImpl();
String dateStr = "1788-06-15";
Date pubDate = null;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
pubDate = df.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
} Book book = new Book(2, "西游记", "吴承恩", pubDate); int i = bookDao.updateBook(book); if (i > 0) {
System.out.println("图书修改成功");
} else {
System.out.println("图书修改失败");
}
} // 测试删除图书方法
public static void testDelete() {
BookDao bookDao = new BookDaoImpl();
int i = bookDao.deleteBook(5); if (i > 0) {
System.out.println("删除图书成功");
} else {
System.out.println("删除图书失败");
}
} // 测试添加图书方法
public static void testInsert() {
// 创建dao层实现类对象
BookDao bookDao = new BookDaoImpl();
String dateStr = "1678-09-24";
Date pubDate = null;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
pubDate = df.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
} Book book = new Book("鹿鼎记", "张三", pubDate); int i = bookDao.insertBook(book); if (i > 0) {
System.out.println("图书添加成功");
} else {
System.out.println("图书添加失败");
}
}
}

4.总结:

java.sql.Date, java.util.Date, String 之间的相互转换:
// String ---> java.util.Date       parse()方法
String DateStr = "1997-02-24";
Date date = null;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
date = df.parse(DateStr);
} catch (ParseException e) {
e.printStackTrace();
} // java.util.Date ---> String format()方法
System.out.println(df.format(date)); // 1997-02-24 System.out.println(System.currentTimeMillis()); // 1558864421743 // java.util.Date ---> java.sql.Date
java.util.Date utilDate = new java.util.Date(1558864204513L); // 是long类型 L别丢了 java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
System.out.println(utilDate); // Sun May 26 17:50:04 CST 2019
System.out.println(sqlDate); // 2019-05-26
 

 

JDBC简单增删改查实现(单表)的更多相关文章

  1. MySQL:记录的增删改查、单表查询、约束条件、多表查询、连表、子查询、pymysql模块、MySQL内置功能

    数据操作 插入数据(记录): 用insert: 补充:插入查询结果: insert into 表名(字段1,字段2,...字段n) select (字段1,字段2,...字段n) where ...; ...

  2. MySQL 增删改查(单表)

    1.sql 新增语句 表中插入数据 insert into + 表名 values(字段1value1,字段2value1,字段3value1),(字段1value2,字段2value2,字段3val ...

  3. Oracle使用JDBC进行增删改查 表是否存在

    Oracle使用JDBC进行增删改查 数据库和表 table USERS (   USERNAME VARCHAR2(20) not null,   PASSWORD VARCHAR2(20) ) a ...

  4. Mybatis实现简单增删改查

    Mybatis的简单应用 学习内容: 需求 环境准备 代码 总结: 学习内容: 需求 使用Mybatis实现简单增删改查(以下是在IDEA中实现的,其他开发工具中,代码一样) jar 包下载:http ...

  5. ado.net的简单数据库操作(三)——简单增删改查的实际应用

    果然,在犯困的时候就该写写博客,写博客就不困了,哈哈! 上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦. 实例描述:在数据 ...

  6. 国产化之路-统信UOS + Nginx + Asp.Net MVC + EF Core 3.1 + 达梦DM8实现简单增删改查操作

    专题目录 国产化之路-统信UOS操作系统安装 国产化之路-国产操作系统安装.net core 3.1 sdk 国产化之路-安装WEB服务器 国产化之路-安装达梦DM8数据库 国产化之路-统信UOS + ...

  7. JDBC基础学习(一)—JDBC的增删改查

    一.数据的持久化     持久化(persistence): 把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,数据持久化意味着将内存中的数据保存到硬盘上加以固化,而持久化的实现过程大多通过各 ...

  8. SQL Server -- 回忆笔记(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询

    SQL Server知识点回忆篇(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询 1. insert 如果sql server设置的排序规则不是简体中文,必须在简体中文字符串前加N, ...

  9. Redis:五种数据类型的简单增删改查

    Redis简单增删改查例子 例一:字符串的增删改查 #增加一个key为ay_key的值 127.0.0.1:6379> set ay_key "ay" OK #查询ay_ke ...

随机推荐

  1. SLF4J使用,slf4j-api、slf4j-log4j12以及log4j的关系

    SLF4J不同于其他日志类库,与其它有很大的不同.SLF4J(Simple logging Facade for Java)不是一个真正的日志实现,而是一个抽象层( abstraction layer ...

  2. Java-JUC(十五):synchronized执行流程分析

    一.锁对象及 synchronized 的使用 synchronized 通过互斥锁(Mutex Lock)来实现,同一时刻,只有获得锁的线程才可以执行锁内的代码. 锁对象分为两种: 实例对象(一个类 ...

  3. git 相关流程和报错解决

    git 相关流程: 预先配置: gitroot $ git config user.name XXXgitroot $ git config user.email XXX@XXX.com git re ...

  4. Kafka架构与原理

    前言 kafka是一个分布式消息队列.具有高性能.持久化.多副本备份.横向扩展能力.生产者往队列里写消息,消费者从队列里取消息进行业务逻辑.一般在架构设计中起到解耦.削峰.异步处理的作用. kafka ...

  5. PHP & JS 链接跳转的几种方式

    网站开发中,我们经常需要使用链接跳转,比如登录成功后,自动跳转到首页等等,下面方面介绍 PHP & JS 的几种链接跳转方式 PHP <?php header("Locatio ...

  6. ES6 - 数组扩展(扩展运算符)

    扩展运算符 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算(函数),将一个数组转为用逗号分隔的参数序列. rest: 变量将多余的参数放入数组中. spread(扩展): ...

  7. 面试突击(六)——JVM如何实现JAVA代码一次编写到处运行的?

    声明:本文图片均来自网络,我只是进行了选择,利用一图胜千言的力量来帮助自己快速的回忆相关的知识点 JVM是 JAVA Virtual Machine 三个英文单词的首字母缩写,翻译成中文就是Java虚 ...

  8. golang几种常用配置文件使用方法总结(yaml、toml、json、xml、ini)

    原文连接: https://blog.csdn.net/wade3015/article/details/83351776 yaml配置文件的使用方法总结 首先介绍使用yaml配置文件,这里使用的是g ...

  9. C++ Map运用实例

    C++ Map运用实例 #include <map> #include <string> #include <iostream> #include <ioma ...

  10. c++内存管理5-虚拟内存4区结构图

    我们常说的32位系统为每个进程分配4G虚拟内存空间(而MMU负责把这些个4G虚拟内存映射到实际内存条的物理内存),其实只有0~3G才是真正完全属于进程本身,是我们所说的用户区:3~4G这1G是所有进程 ...