java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家。
jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate、Mybatis。
但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的时候才能更好的去理解这些成熟的框架是如何去实现增删改查的。
回归正题,先来看看我们的开发环境:
Java语言、Eclipse开发工具、Mysql数据库、Navicat数据库可视化工具。
开发环境的安装搭建及使用请自己查阅资料(很简单的),这里不详细阐述。
第一步,创建数据库,利用Navicat数据库可视化工具随便建立一个数据库,在库中建立一张表,表里给几个字段(记得给个id字段,唯一主键,自增序列),再随便给上两条数据便好,用来测试功能,如图:

第二步,打通数据库(这个例子希望大家自己动手敲敲,耽误不了多少时间,熟悉一下jdbc如何和数据库打交道,故以图示之),如图:

第三步,改造DBUtil类,方便在dao层获得数据库的连接,代码如下:
1 package com.czgo.db;
2
3 import java.sql.Connection;
4 import java.sql.DriverManager;
5 import java.sql.SQLException;
6
7 public class DBUtil
8 {
9 private static final String URL = "jdbc:mysql://127.0.0.1:3306/imooc";
10 private static final String UNAME = "root";
11 private static final String PWD = "root";
12
13 private static Connection conn = null;
14
15 static
16 {
17 try
18 {
19 // 1.加载驱动程序
20 Class.forName("com.mysql.jdbc.Driver");
21 // 2.获得数据库的连接
22 conn = DriverManager.getConnection(URL, UNAME, PWD);
23 }
24 catch (ClassNotFoundException e)
25 {
26 e.printStackTrace();
27 }
28 catch (SQLException e)
29 {
30 e.printStackTrace();
31 }
32 }
33
34 public static Connection getConnection()
35 {
36 return conn;
37 }
38 }
第四步,创建实体类(如上图,大家观察包的分配,我们将采用MVC思想设计本实例,有关于mvc的设计思想,请大家自行学习,这里不多说)代码如下:
1 package com.czgo.model;
2
3 import java.io.Serializable;
4
5 /**
6 * 实体类:女神类
7 *
8 * @author AlanLee
9 *
10 */
11 public class Goddess implements Serializable
12 {
13 private static final long serialVersionUID = 1L;
14
15 /**
16 * 唯一主键
17 */
18 private Integer id;
19 /**
20 * 姓名
21 */
22 private String name;
23 /**
24 * 手机号码
25 */
26 private String mobie;
27 /**
28 * 电子邮件
29 */
30 private String email;
31 /**
32 * 家庭住址
33 */
34 private String address;
35
36 public Integer getId()
37 {
38 return id;
39 }
40
41 public void setId(Integer id)
42 {
43 this.id = id;
44 }
45
46 public String getName()
47 {
48 return name;
49 }
50
51 public void setName(String name)
52 {
53 this.name = name;
54 }
55
56 public String getMobie()
57 {
58 return mobie;
59 }
60
61 public void setMobie(String mobie)
62 {
63 this.mobie = mobie;
64 }
65
66 public String getEmail()
67 {
68 return email;
69 }
70
71 public void setEmail(String email)
72 {
73 this.email = email;
74 }
75
76 public String getAddress()
77 {
78 return address;
79 }
80
81 public void setAddress(String address)
82 {
83 this.address = address;
84 }
85 }
第五步,dao层的实现(这里由于是小例子没有写dao接口,实际工作中大型项目应该是要写dao接口的,便于程序的维护和扩展),代码如下:
package com.czgo.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.czgo.db.DBUtil;
import com.czgo.model.Goddess;
/**
* 数据层处理类
*
* @author AlanLee
*
*/
public class GoddessDao
{
/**
* 查询全部女神
*
* @return
* @throws SQLException
*/
public List<Goddess> query()
{
List<Goddess> goddessList = new ArrayList<Goddess>();
// 获得数据库连接
Connection conn = null;
ResultSet rs = null;
PreparedStatement ptmt = null;
try
{
conn = DBUtil.getConnection();
StringBuilder sb = new StringBuilder();
sb.append("select id,name,mobie,email,address from goddess");
// 通过数据库的连接操作数据库,实现增删改查
ptmt = conn.prepareStatement(sb.toString());
rs = ptmt.executeQuery();
Goddess goddess = null;
while (rs.next())
{
goddess = new Goddess();
goddess.setId(rs.getInt("id"));
goddess.setName(rs.getString("name"));
goddess.setMobie(rs.getString("mobie"));
goddess.setEmail(rs.getString("email"));
goddess.setAddress(rs.getString("address"));
goddessList.add(goddess);
}
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
try
{
if (rs != null)
{
rs.close();
}
if (ptmt != null)
{
ptmt.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}
return goddessList;
}
/**
* 查询单个女神
*
* @return
* @throws SQLException
*/
public Goddess queryById(Integer id)
{
Goddess g = null;
Connection conn = null;
PreparedStatement ptmt = null;
ResultSet rs = null;
try
{
conn = DBUtil.getConnection();
String sql = "" + " select * from imooc_goddess " + " where id=? ";
ptmt = conn.prepareStatement(sql);
ptmt.setInt(1, id);
rs = ptmt.executeQuery();
while (rs.next())
{
g = new Goddess();
g.setId(rs.getInt("id"));
g.setName(rs.getString("name"));
g.setMobie(rs.getString("mobie"));
g.setEmail(rs.getString("email"));
g.setAddress(rs.getString("address"));
}
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
try
{
if (rs != null)
{
rs.close();
}
if (ptmt != null)
{
ptmt.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}
return g;
}
/**
* 添加女神
*
* @throws SQLException
*/
public void addGoddess(Goddess goddess)
{
// 获得数据库连接
Connection conn = null;
PreparedStatement ptmt = null;
try
{
conn = DBUtil.getConnection();
String sql = "insert into goddess(name,mobie,email,address) values(?,?,?,?)";
ptmt = conn.prepareStatement(sql);
ptmt.setString(1, goddess.getName());
ptmt.setString(2, goddess.getMobie());
ptmt.setString(3, goddess.getEmail());
ptmt.setString(4, goddess.getAddress());
ptmt.execute();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
try
{
if (ptmt != null)
{
ptmt.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
/**
* 修改女神资料
*
* @throws SQLException
*/
public void updateGoddess(Goddess goddess)
{
Connection conn = null;
PreparedStatement ptmt = null;
try
{
conn = DBUtil.getConnection();
String sql = "update goddess set name=?,mobie=?,email=?,address=? where id=?";
ptmt = conn.prepareStatement(sql);
ptmt.setString(1, goddess.getName());
ptmt.setString(2, goddess.getMobie());
ptmt.setString(3, goddess.getEmail());
ptmt.setString(4, goddess.getAddress());
ptmt.execute();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
try
{
if (ptmt != null)
{
ptmt.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
/**
* 删除女神
*
* @throws SQLException
*/
public void deleteGoddess(Integer id)
{
Connection conn = null;
PreparedStatement ptmt = null;
try
{
conn = DBUtil.getConnection();
String sql = "delete from goddess where id=?";
ptmt = conn.prepareStatement(sql);
ptmt.setInt(1, id);
ptmt.execute();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
try
{
if (ptmt != null)
{
ptmt.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
}
第六步,控制层的实现(控制层在此处用来模仿控制层和界面,直接在这里构建数据,如果是界面的数据则通过请求传递接收参数即可,控制层的代码大家可以根据实际情况去更改完善,这里只是给大家抛砖引玉,做个简单的测试,时间比较紧,希望大家理解),代码如下:
1 package com.czgo.action;
2
3 import java.sql.SQLException;
4 import java.util.List;
5
6 import com.czgo.dao.GoddessDao;
7 import com.czgo.model.Goddess;
8
9 /**
10 * 控制层,直接在这里构建数据,界面的数据则通过请求传递接收即可,亦是同理
11 *
12 * @author AlanLee
13 *
14 */
15 public class GoddessAction
16 {
17 /**
18 * 新增女神
19 *
20 * @param goddess
21 * @throws Exception
22 */
23 public void add(Goddess goddess) throws Exception
24 {
25 GoddessDao dao = new GoddessDao();
26 goddess.setName("苍井空");
27 goddess.setMobie("52220000");
28 goddess.setEmail("52220000@qq.com");
29 goddess.setAddress("北京红灯区");
30 dao.addGoddess(goddess);
31 }
32
33 /**
34 * 查询单个女神
35 *
36 * @param id
37 * @return
38 * @throws SQLException
39 */
40 public Goddess get(Integer id) throws SQLException
41 {
42 GoddessDao dao = new GoddessDao();
43 return dao.queryById(id);
44 }
45
46 /**
47 * 修改女神
48 *
49 * @param goddess
50 * @throws Exception
51 */
52 public void edit(Goddess goddess) throws Exception
53 {
54 GoddessDao dao = new GoddessDao();
55 dao.updateGoddess(goddess);
56 }
57
58 /**
59 * 删除女神
60 *
61 * @param id
62 * @throws SQLException
63 */
64 public void del(Integer id) throws SQLException
65 {
66 GoddessDao dao = new GoddessDao();
67 dao.deleteGoddess(id);
68 }
69
70 /**
71 * 查询全部女神
72 *
73 * @return
74 * @throws Exception
75 */
76 public List<Goddess> query() throws Exception
77 {
78 GoddessDao dao = new GoddessDao();
79 return dao.query();
80 }
81
82 /**
83 * 测试是否成功
84 *
85 * @param args
86 * @throws SQLException
87 */
88 public static void main(String[] args) throws SQLException
89 {
90 GoddessDao goddessDao = new GoddessDao();
91
92 List<Goddess> goddessList = goddessDao.query();
93
94 for (Goddess goddess : goddessList)
95 {
96 System.out.println(goddess.getName() + "," + goddess.getMobie() + "," + goddess.getEmail());
97 }
98 }
99 }
最后,让我们看一下main方法的运行结果是否成功:

这样,一个简单的java jdbc 连接mysql数据库 实现增删改查便完成了,大家可以在查询的基础上试着去做一个高级查询,也就是多条件查询来巩固jdbc的使用。时间比较紧,所以没有给大家一一测试增删改查的功能,闲着没事做蛋疼的可以都去测试一下,如果发现问题,希望能够指正小Alan,小Alan有空的时候便去修正博文中的一些错误。
补充:
小Alan在评论中和一些哥们扯了些疑问,看完文章后,记得看下面的评论,自己去思考一下,如何去完善我和哥们讨论的这些问题,技术永远是学不完的,关键是解决问题的思路和方法,这样不管遇到什么难题或者新技术都是可以迎难而上的,也是在公司工作的生存之道。
最新改动时间:2016年7月23日
可爱博主:AlanLee
博客地址:http://www.cnblogs.com/AlanLee
本文出自博客园,欢迎大家加入博客园。
java jdbc 连接mysql数据库 实现增删改查的更多相关文章
- 通过jdbc连接MySql数据库的增删改查操作
一.获取数据库连接 要对MySql数据库内的数据进行增删改查等操作,首先要获取数据库连接 JDBC:Java中连接数据库方式 具体操作如下: 获取数据库连接的步骤: 1.先定义好四个参数 String ...
- 使用JDBC连接MySQL数据库操作增删改查
目录 1.首先这个Myeclipse的包名以及一些实现的类(这样子写是我的习惯) 2.接下来我们创建数据库(MySQL) 3.在数据库里面添加数据 4.首先是BaseDao,这个是重中之重,注意那个数 ...
- 【转载】通过JDBC对MySQL数据库的增删改查
通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...
- C++ API方式连接mysql数据库实现增删改查
这里复制的 http://www.bitscn.com/pdb/mysql/201407/226252.html 一.环境配置 1,装好mysql,新建一个C++控制台工程(从最简单的弄起,这个会了, ...
- 【C#】使用NHibernate连接MySQL数据库及增删改查
学习资料 http://www.sikiedu.com/course/51/task/891/show https://www.codeproject.com/Articles/26123/NHibe ...
- 使用nodejs连接mysql数据库实现增删改查
首先要有数据库 使用xampp 或者 phpstudy 可以傻瓜式安装 新建一个项目文件夹 之后在这个目录下初始化package.json (npm init) 先在项目中安装mysql 和 ex ...
- 使用NHibernate连接MySQL数据库及增删改查
学习资料 http://www.sikiedu.com/course/51/task/891/show https://www.codeproject.com/Articles/26123/NHibe ...
- 连接mysql数据库实现增删改查(一)
在python中我们通过pymysql来连接数据库,具体实现如下 ''' 连接mysql数据库 此类进行封装了一些基础的操作数据库方法 ''' import pymysql from Homework ...
- php 连接mysql数据库以及增删改查
php 连接数据库 一般是用面向对象的方法,需要先创建一个对象,即造一个连接对象,然后再写sql语句,(增改查删),最后执行sql语句 其中在创建连接对象时 我们用到的是MySQLI 是不区分大小写 ...
随机推荐
- Add和AddRange的区别
Add和AddRange区别 Add和AddRange Add:将指定的对象添加到……中 AddRange:向……末尾,添加数组 - 在群体操作时,使用AddRange取代Add 用AddRange可 ...
- 在Winform开发中使用日程控件XtraScheduler(2)--深入理解数据的存储
在上篇随笔<在Winform开发中使用日程控件XtraScheduler>中介绍了DevExpress的XtraScheduler日程控件的各种使用知识点,对于我们来说,日程控件不陌生,如 ...
- 孙鑫MFC学习笔记12:文件读写
1.指向常量的指针 2.指针常量 3.C语言对文件操作是在缓冲区,在缓冲区满或文件关闭时写入文件 读取相同 4.fflush刷新缓冲区,使缓冲区数据写入文件 5.fseek改变文件指针偏移量 6.st ...
- 泛函编程(35)-泛函Stream IO:IO处理过程-IO Process
IO处理可以说是计算机技术的核心.不是吗?使用计算机的目的就是希望它对输入数据进行运算后向我们输出计算结果.所谓Stream IO简单来说就是对一串按序相同类型的输入数据进行处理后输出计算结果.输入数 ...
- 新一代编程:scala泛函编程技术-唠叨
准备了半年后,终于决定在这里开始我的scala编程技术学习体验撰写之旅.初步打算在这里把我学习.体验.掌握scala编程的过程与有兴趣的朋友分享.我想,虽然我这不是正式论文或者教课书之类的,但写个开场 ...
- java 用 jxl poi 进行excel 解析 *** 最爱那水货
/** * 解析excel文件 ,并把数据放入数组中 格式 xlsx xls * @param path 从ftp上下载到本地的文件的路径 * @return 数据数组集合 */ public Lis ...
- JS json的使用
json的定义 json能够通过4种基本数据类型以及2种结构化数据表示 字符串 "footbar" 不能使用单引号 数值 125.4 只支持10进制 布尔 true fals ...
- percona server 5.7.16正式发布
继2016年10月12日mysql 5.7.16发布后,percona server 5.7.16终于于11月29日发布了,这是最新版本的5.7系列,可从https://www.percona.com ...
- JAVA JDK的动态代理反射实现
动态代理类使用到了一个接口InvocationHandler和一个代理类Proxy ,这两个类配合使用实现了动态代理的功能. 什么是动态代理呢? 普通代理类是指: 给每个具体类写一个代理类,以后要使 ...
- Nuget很慢,我们该怎么办
在VS中给项目添加程序已经采用NuGet 十分方便 不过很多时候速度很慢,一直显示“正在检索信息” 其实直接使用程序包管理控制台,速度就会好很多 如果命令不太会写,安装包名不是确认,可以先登录 htt ...