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 是不区分大小写 ...
随机推荐
- C#串口通信—传输文件测试
说明:该程序可能不具备实用性,仅测试用. 一.使用虚拟串口工具VSPD虚拟两个串口COM1和COM2 二.约定 占一个字节,代码如下: using System; using System.Colle ...
- 在Gridview如何进行每行单元格比较
有在论坛上看到一个问题,就是在Gridview控件中,需要对几个列的数值进行比较,原问题如下: 先在数据库中准备数据: CREATE TABLE [dbo].[RecordTime] ( Id ,) ...
- .NET Core 调用WCF 服务
.NET Core 和ASP.NET Core 已经可以调用WCF 服务. 环境要求: VS2015 Update 2 +VS2015 Tooling + .NET Core SDK 下载地址: ht ...
- 实现了IEnumerable接口的GetEnumerator 即可使用 Foreach遍历,返回一个IEnumerator对象
#region 程序集 mscorlib.dll, v4.0.0.0 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framewor ...
- android 中layer-list的用法
1.可以将多个图片按照顺序层叠起来 2.在drawable下建立一个xml文件 <layer-list xmlns:android="http://schemas.android.co ...
- iOS版本比较方法
之前一直把版本号转换为floatValue,但是最近在项目中又出现了float的问题,主要是 NSString表示为@"17.30",转换为floatValue 值为17.2999 ...
- 用node-webkit(NW.js)创建桌面程序
以往写windows桌面程序需要用MFC.C#之类的技术,那么如果你只会web开发技术呢?或者说你有一个网站,但是你想把你的网站打包成一个桌面应用程序,该如何做呢? 答案就是用node-webkit这 ...
- 基于.Net Framework 4.0 Web API开发(3):ASP.NET Web APIs 异常的统一处理Attribute 和统一写Log 的Attribute的实现
概述: ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是项目,总有异常发生,本节就来谈谈API的异常 ...
- 身份证验证合法性js--已验证
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- SOA (面向服务的体系结构)
面向服务的体系结构是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语言 ...