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 是不区分大小写 ...
随机推荐
- 使用VS Code开发ASP.NET Core 应用程序
最新教程:http://www.cnblogs.com/linezero/p/VSCodeASPNETCore.html 使用VS Code开发ASP.NET Core 应用程序 准备 1.安装VS ...
- jQuery漂亮图标的垂直导航菜单
效果展示 http://hovertree.com/texiao/nav/3/ jQuery漂亮图标的垂直导航菜单 是一款当鼠标滑过菜单项时,会有一个背景遮罩层跟着鼠标移动,效果非常炫酷,图标还是矢量 ...
- html5学习笔记6-- canvas
绘制普通直线,先看效果图: 实现代码如下: <!DOCTYPE html> <html> <head lang="en"> <meta c ...
- 孙鑫MFC学习笔记8:对话框编程(下)
1.在按钮上没有字体设置,但是在对话框上有字体设置 2.让按钮进行消息响应 *1.创建按钮 *2.创建从按钮继承的类 *3.关联对象 3.属性页编程 *1.在对话框资源中新建属性页 *2.为属性页创建 ...
- luogg_java学习_04_数组
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 数组 数组是多个相同类型数据的组合 //1.定义数组 ...
- EL表达式错误attribute items does not accept any expressions
解决方法是将 <%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%> 改成 <% ...
- Spring MVC静态资源处理(转)
优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...
- MongoDB-query查询接口
在上一篇中简要使用了C# 对MongoDB进行数据操作,这里补充一些MongoDB query查询条件文档: Query.All("name", "a",&qu ...
- Markdown生成左边框目录
自从接触了Markdown后就一直用这种语言写学习笔记. 但是一直在纠结如何生成方便的目录. 下面是我搞得一个简单的模板可以生成固定在屏幕左边的目录. 就是这种 第一步,编辑器 首先,需要一个可以自动 ...
- python处理ha文件
ha.txt文件内容: frontend oldboy.org bind 0.0.0.0:80 option httplog option httpclose option forwardfor lo ...