好久没有写博文了,写个简单的东西热热身,分享给大家。

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接口的,便于程序的维护和扩展),代码如下:

  1 package com.czgo.dao;
  2
  3 import java.sql.Connection;
  4 import java.sql.PreparedStatement;
  5 import java.sql.ResultSet;
  6 import java.sql.SQLException;
  7 import java.util.ArrayList;
  8 import java.util.List;
  9
 10 import com.czgo.db.DBUtil;
 11 import com.czgo.model.Goddess;
 12
 13 /**
 14  * 数据层处理类
 15  *
 16  * @author AlanLee
 17  *
 18  */
 19 public class GoddessDao
 20 {
 21     /**
 22      * 查询全部女神
 23      *
 24      * @return
 25      * @throws SQLException
 26      */
 27     public List<Goddess> query()
 28     {
 29         List<Goddess> goddessList = new ArrayList<Goddess>();
 30
 31         // 获得数据库连接
 32         Connection conn = null;
 33         ResultSet rs = null;
 34         PreparedStatement ptmt = null;
 35
 36         try
 37         {
 38             conn = DBUtil.getConnection();
 39
 40             StringBuilder sb = new StringBuilder();
 41             sb.append("select id,name,mobie,email,address from goddess");
 42
 43             // 通过数据库的连接操作数据库,实现增删改查
 44             ptmt = conn.prepareStatement(sb.toString());
 45
 46             rs = ptmt.executeQuery();
 47
 48             Goddess goddess = null;
 49
 50             while (rs.next())
 51             {
 52                 goddess = new Goddess();
 53                 goddess.setId(rs.getInt("id"));
 54                 goddess.setName(rs.getString("name"));
 55                 goddess.setMobie(rs.getString("mobie"));
 56                 goddess.setEmail(rs.getString("email"));
 57                 goddess.setAddress(rs.getString("address"));
 58
 59                 goddessList.add(goddess);
 60             }
 61         }
 62         catch (SQLException e)
 63         {
 64             e.printStackTrace();
 65         }
 66         finally
 67         {
 68
 69             try
 70             {
 71                 if (rs != null)
 72                 {
 73                     rs.close();
 74                 }
 75                 if (ptmt != null)
 76                 {
 77                     ptmt.close();
 78                 }
 79             }
 80             catch (SQLException e)
 81             {
 82                 e.printStackTrace();
 83             }
 84         }
 85
 86         return goddessList;
 87     }
 88
 89     /**
 90      * 查询单个女神
 91      *
 92      * @return
 93      * @throws SQLException
 94      */
 95     public Goddess queryById(Integer id)
 96     {
 97         Goddess g = null;
 98
 99         Connection conn = null;
100         PreparedStatement ptmt = null;
101         ResultSet rs = null;
102
103         try
104         {
105             conn = DBUtil.getConnection();
106
107             String sql = "" + " select * from imooc_goddess " + " where id=? ";
108
109             ptmt = conn.prepareStatement(sql);
110
111             ptmt.setInt(1, id);
112
113             rs = ptmt.executeQuery();
114
115             while (rs.next())
116             {
117                 g = new Goddess();
118                 g.setId(rs.getInt("id"));
119                 g.setName(rs.getString("name"));
120                 g.setMobie(rs.getString("mobie"));
121                 g.setEmail(rs.getString("email"));
122                 g.setAddress(rs.getString("address"));
123             }
124         }
125         catch (SQLException e)
126         {
127             e.printStackTrace();
128         }
129         finally
130         {
131             try
132             {
133                 if (rs != null)
134                 {
135                     rs.close();
136                 }
137                 if (ptmt != null)
138                 {
139                     ptmt.close();
140                 }
141             }
142             catch (SQLException e)
143             {
144                 e.printStackTrace();
145             }
146         }
147
148         return g;
149     }
150
151     /**
152      * 添加女神
153      *
154      * @throws SQLException
155      */
156     public void addGoddess(Goddess goddess)
157     {
158         // 获得数据库连接
159         Connection conn = null;
160         PreparedStatement ptmt = null;
161
162         try
163         {
164             conn = DBUtil.getConnection();
165
166             String sql = "insert into goddess(name,mobie,email,address) values(?,?,?,?)";
167
168             ptmt = conn.prepareStatement(sql);
169
170             ptmt.setString(1, goddess.getName());
171             ptmt.setString(2, goddess.getMobie());
172             ptmt.setString(3, goddess.getEmail());
173             ptmt.setString(4, goddess.getAddress());
174
175             ptmt.execute();
176         }
177         catch (SQLException e)
178         {
179             e.printStackTrace();
180         }
181         finally
182         {
183             try
184             {
185                 if (ptmt != null)
186                 {
187                     ptmt.close();
188                 }
189             }
190             catch (SQLException e)
191             {
192                 e.printStackTrace();
193             }
194         }
195     }
196
197     /**
198      * 修改女神资料
199      *
200      * @throws SQLException
201      */
202     public void updateGoddess(Goddess goddess)
203     {
204         Connection conn = null;
205         PreparedStatement ptmt = null;
206
207         try
208         {
209             conn = DBUtil.getConnection();
210
211             String sql = "update goddess set name=?,mobie=?,email=?,address=? where id=?";
212
213             ptmt = conn.prepareStatement(sql);
214
215             ptmt.setString(1, goddess.getName());
216             ptmt.setString(2, goddess.getMobie());
217             ptmt.setString(3, goddess.getEmail());
218             ptmt.setString(4, goddess.getAddress());
219
220             ptmt.execute();
221         }
222         catch (SQLException e)
223         {
224             e.printStackTrace();
225         }
226         finally
227         {
228             try
229             {
230                 if (ptmt != null)
231                 {
232                     ptmt.close();
233                 }
234             }
235             catch (SQLException e)
236             {
237                 e.printStackTrace();
238             }
239         }
240     }
241
242     /**
243      * 删除女神
244      *
245      * @throws SQLException
246      */
247     public void deleteGoddess(Integer id)
248     {
249         Connection conn = null;
250         PreparedStatement ptmt = null;
251
252         try
253         {
254             conn = DBUtil.getConnection();
255
256             String sql = "delete from goddess where id=?";
257
258             ptmt = conn.prepareStatement(sql);
259
260             ptmt.setInt(1, id);
261
262             ptmt.execute();
263         }
264         catch (SQLException e)
265         {
266             e.printStackTrace();
267         }
268         finally
269         {
270             try
271             {
272                 if (ptmt != null)
273                 {
274                     ptmt.close();
275                 }
276             }
277             catch (SQLException e)
278             {
279                 e.printStackTrace();
280             }
281         }
282     }
283 }

第六步,控制层的实现(控制层在此处用来模仿控制层和界面,直接在这里构建数据,如果是界面的数据则通过请求传递接收参数即可,控制层的代码大家可以根据实际情况去更改完善,这里只是给大家抛砖引玉,做个简单的测试,时间比较紧,希望大家理解),代码如下:

 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/p/5656640.html#commentform。

JDBC连接数据以及操作数据的更多相关文章

  1. jdbc:mysql:/// jdbc连接数据url简写方式

    正常情况下我们写jdbc连接本地mysql数据库的时候通常是这样写 jdbc:mysql:localhost:3306/数据库名 下面就是要提到的简单的方法 jdbc:mysql:///数据库名

  2. JDBC连接数据以及详细的ResultSet结果集解释

    一.数据库连接 (前面为jdbc的其他参数,文章下部分为ResultSet详解) ResultSet rs = st.executeQuery(sqlStr) 1. java的sql框架支持多种数据库 ...

  3. Crystal Reports 2008(水晶报表) JDBC连接mysql数据库

    在本blog中,主要介绍的是Crystal Reports 2008使用JDBC连接mysql数据库. 在连接之间,首先要确认你电脑上面都安装了mysql数据库. 其次,就是jdbc连接数据时候所使用 ...

  4. Spring+SpringMVC+MyBatis+easyUI整合优化篇(九)数据层优化-jdbc连接池简述、druid简介

    日常啰嗦 终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和da ...

  5. 大数据系列之数据仓库Hive命令使用及JDBC连接

    Hive系列博文,持续更新~~~ 大数据系列之数据仓库Hive原理 大数据系列之数据仓库Hive安装 大数据系列之数据仓库Hive中分区Partition如何使用 大数据系列之数据仓库Hive命令使用 ...

  6. 数据层优化-jdbc连接池简述、druid简介

    终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化 ...

  7. 大数据学习day28-----hive03------1. null值处理,子串,拼接,类型转换 2.行转列,列转行 3. 窗口函数(over,lead,lag等函数) 4.rank(行号函数)5. json解析函数 6.jdbc连接hive,企业级调优

    1. null值处理,子串,拼接,类型转换 (1) 空字段赋值(null值处理) 当表中的某个字段为null时,比如奖金,当你要统计一个人的总工资时,字段为null的值就无法处理,这个时候就可以使用N ...

  8. 对于使用JDBC连接mysql数据时The server time zone value '¤¤°ê¼Ð·Ç®É¶¡'...的异常问题解决。

    相信很多小伙伴和我一样遇到了这类问题,在使用JDBC连接mysql数据库的时候发生SQLException如下所示的异常情况! java.sql.SQLException: The server ti ...

  9. 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入

    一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...

随机推荐

  1. [转载] HTTP协议详解

    转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的 ...

  2. <C++Primer>第四版 阅读笔记 第一部分 “基本语言”

    之前阅读时没有及时总结,现在慢慢补上. 第1章 快速入门 main 函数在很多方面都比较特别,其中最重要的是每个C++程序必须含有 main 函数,且 main 函数是(唯一)被操作系统显示调用的函数 ...

  3. 面试之MySQL基本命令

    既然要操作数据库就从数据库链接写起,包括建库.建表.增删该查字段及约束,删库,删表的数据,以下主要是对我以往面试的总结,欢迎补充! 一.数据库连接 1.连接本机(p和密码123456之间无空格) my ...

  4. JAVA函数的重载

    一.什么是重载(overlording) 在JAVA中,可以在同一个类中存在多个函数,函数名称相同但参数列表不同.这就是函数的重载(overlording).这是类的多太性表现之一. 二.重载的特征: ...

  5. php数组排序

    sort() - 以升序对数组排序rsort() - 以降序对数组排序asort() - 根据值,以升序对关联数组进行排序ksort() - 根据键,以升序对关联数组进行排序arsort() - 根据 ...

  6. 用JS计算预计时间与现在时间的差

    1.我用的是bootstrap网格布局,首先要引入bootstrap类. (1)<script src="jquery-1.11.2.min.js"></scri ...

  7. 数字信号处理MATLAB简单序列

    数字信号处理应用的几个基本序列: 1 单位样本序列 function mainImseq() clc clear disp('生成抽样序列'); y=imseq(,,); %调用样本函数,此时序列下标 ...

  8. 用《内网穿山甲》把本地IIS中的站点共享到远程访问

    前言: 因为各种原因,我们常常要把本机或局域网中搭建的站点发给远方的人访问,他有可能是测试人员.客户.前端.或领导演示,或是内部系统内部论坛临时需要在远程访问,事件变得很麻烦,要么有公网IP,要么能控 ...

  9. angular ng-repeat数组中的数组

    //先定义一个数组anular代码: var app = angular.module('serApp', []); app.controller('indexCtrl', function($sco ...

  10. hive取数时如果遇到这种报错

    如果你hive取数时遇到这种报错:ParseException line 1:78 cannot recognize input near '<EOF>' '<EOF>' '& ...