jdbc的通讯录CRUD
基于JDBC的通讯录练手:
项目以MVC模式开发,包名:
cn.itcast.txl.domain;
cn.itcast.txl.dao;
cn.itcast.txl.dao.impl;
cn.itcast.txl.service;
cn.itcast.txl.service.impl;
cn.itcast.txl.controller;
domain层
User.java
public void User(){
private int id;
private String name;
private String sex;
private String phone;
private String QQ;
private String Email;
private String address;
//提供有参函数,无参函数
//提供set和get方法
}
dao层
UserDao.java
public interface UserDao {
public void save(User user);
public void delete(int id);
public void update(User user);
public Object query();
//根据id获取联系人
public User get(int id);
}
UserDaoImpl.java
//添加联系人
public void save(User user) {
//定义变量
Connection conn = null;
PreparedStatement state = null;
try {
//初始化参数
conn = DBUtils.getConnection();
String sql = "insert into t_user (name,sex,phone,QQ,Email,address) values (?,?,?,?,?,?)";
//设置参数
state = conn.prepareStatement(sql);
state.setString(1, user.getName());
state.setString(2, user.getSex());
state.setString(3, user.getPhone());
state.setString(4, user.getQQ());
state.setString(5, user.getEmail());
state.setString(6, user.getAddress());
//执行
state.execute();
System.out.println("添加联系人成功.......................");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("添加联系人失败....................");
}finally{
//释放资源
DBUtils.closeAll(null, state, conn);
}
}
public void update(User user) {
//定义变量
Connection conn = null;
PreparedStatement state = null;
try {
//初始化参数
conn = DBUtils.getConnection();
String sql = "update t_user set name=?,sex=?,phone=?,QQ=?,Email=?,address=? where id=?";
//设置参数
state = conn.prepareStatement(sql);
state.setString(1, user.getName());
state.setString(2, user.getSex());
state.setString(3, user.getPhone());
state.setString(4, user.getQQ());
state.setString(5, user.getEmail());
state.setString(6, user.getAddress());
state.setInt(7, user.getId());
System.out.println("id="+user.getId());
//执行
state.execute();
System.out.println("修改联系人成功.......................");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("修改联系人失败....................");
}finally{
//释放资源
DBUtils.closeAll(null, state, conn);
}
}
public Object query() {
//定义变量
String sql = null;
Connection conn = null;
PreparedStatement state = null;
ResultSet set = null;
User user = null;
Map<String, User> users = new LinkedHashMap<String, User>();
//初始化
try {
conn = DBUtils.getConnection();
sql = "select id,name,sex,phone,QQ,Email,address from t_user";
state = conn.prepareStatement(sql);
//执行
set = state.executeQuery();
//获取
while(set.next()){
int id = set.getInt(1);
String name = set.getString(2);
String sex = set.getString(3);
String phone = set.getString(4);
String QQ = set.getString(5);
String Email = set.getString(6);
String address = set.getString(7);
//封装为user对象
user = new User(id,name, sex, phone, QQ, Email, address);
//存储到Map集合中
users.put(name, user);
}
//成功
System.out.println("获取所有联系人成功.........");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("获取所有联系人失败.........");
}finally{
DBUtils.closeAll(set, state, conn);
}
return users;
}
public void delete(int id) {
String sql = null;
Connection conn = null;
PreparedStatement state = null;
try {
conn = DBUtils.getConnection();
sql = "delete from t_user where id = ?";
//设置参数
state=conn.prepareStatement(sql);
state.setInt(1, id);
//执行
state.execute();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("删除失败了........"+e);
}finally{
DBUtils.closeAll(null, state, conn);
}
}
public User get(int id) {
String sql = null;
Connection conn = null;
PreparedStatement state = null;
ResultSet set = null;
User user =null;
//初始化
try {
conn = DBUtils.getConnection();
sql = "select name,sex,phone,QQ,Email,address from t_user where id = ?";
state = conn.prepareStatement(sql);
state.setInt(1, id);
//执行
set = state.executeQuery();
//获取
while(set.next()){
String name = set.getString(1);
String sex = set.getString(2);
String phone = set.getString(3);
String QQ = set.getString(4);
String Email = set.getString(5);
String address = set.getString(6);
//封装为user对象
user = new User(name, sex, phone, QQ, Email, address);
break;
}
user.setId(id);
//成功
System.out.println("获取单个人成功.........");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("获取单个联系人失败.........",e);
}finally{
DBUtils.closeAll(set, state, conn);
}
return user;
}
}
DBUtils.java
/*
* 该工具类主要任务是:
* 1、加载配置文件
* 2、返回数据库的连接
* 3、释放数据库连接的所有资源
*/
public class DBUtils {
//使用连接池对象
private static ComboPooledDataSource ds = new ComboPooledDataSource();
//提供获取Connection连接方法
public static Connection getConnection(){
Connection conn = null;
try {
conn = ds.getConnection();
System.out.println("测试:连接池中的连接对象......");
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("连接失败....");
}
return conn;
}
//提供一个释放所有资源的方法
public static void closeAll(ResultSet set,Statement state,Connection conn){
try {
if( set != null )
set.close();
} catch (Exception e) {
set = null;
}
try {
if( state != null )
state.close();
} catch (Exception e) {
state = null;
}
try {
if( conn != null )
conn.close();
} catch (Exception e) {
conn = null;
}
}
}
UserService.java
public interface UserService(){
public void save(User user);
public void delete(int id);
public void update(User user);
public Map<String,User> list();
public User get(int id);
}
UserServiceImpl.java
public class UserServiceImpl implement UserService{
private UserDao userDao = new UserDaoImpl();
.......
}
UserServlet.java
public class UserServlet extends HttpServlet{
//定义服务对象
private UserService service = new UserServiceImpl();
doget(){
this.dopost(request,response);
};
dopost(){
request.setCharactorEncoding("UTF-8");
String method = request.getParameter("method");
if(method.equals("list")){
list(request,response);
}else if(method.equals("save")){
save(request,response);
}else if(method.equals("saveAdd")){
saveAdd(request,response);
}else if(method.equals("updateUser")){
updateUser(request, response);
}else if(method.equals("get")){
get(request, response);
}else if(method.equals("delete")){
delete(request, response);
}
};
//处理用户提交查询的请求
public void list(HttpServletRequest request,HttpServletResponse response){
LinkedHashMap<String, User> user = (LinkedHashMap<String, User>)service.list();
request.setAttribute("users",user);
String path = "/WEB-INF/list.jsp";
request.getRequestDispatcher(path).forward(request,response);
}
//接收用户的添加请求,转发到增加页面
public void save(HttpServletRequest request,HttpServletResponse response){
String path = "/WEB-INF/addUser.jsp";
request.getRequestDispatcher(path).forward(request,response);
}
public void saveAdd(HttpServletRequest request,HttpServletResponse response){
User user = new User();
user.setName(request.getParameter("name"));
user,setSex(request.getParameter("sex"));
user.setPhone(request.getParameter("phone"));
user.setQQ(request.getParameter("QQ"));
user.setEmail(request.getParameter("Email"));
user.setAddress(request.getParameter("address"));
service.save(user);
String path = "/UserServlet?method=list";
request.getRequestDispathcher(path).forward(request,response);
}
public void delete(HttpServletRequest request,HttpServletResponse response){
int id = Integer.parseInt(request.getParameter("id"));
sevice.delete(id);
String path = "/UserServlet?method=list";
request.getRequestDispatcher(path).forward(request,response);
}
//获取跳转到修改页面的请求带ID
public void get(HttpServletRequest request,HttpServletResponse response){
String path = "/WEB-INF/updateUser.jsp";
User user = service.get(Integer.parseInt(request.getParameter("id")));
request.setAttribute("user",user);
request.getRequsetDispatcher(path).forward(request,response);
}
public void update(HttpServletRequest request,HttpServletResponse response){
User user = new User();
user.setId(Integer.parseInt(request,getParameter("id")));
user.setName(request.getParameter("name"));
user.setSex(request.getParameter("sex"));
user.setPhone(request.getParameter("phone"));
user.setQQ(request.getParameter("QQ"));
user.setEmail(request.getParameter("Email"));
user.setAddress(request.getParameter("address"));
service.update(user);
String path = "/Userservlet?method=list";
request.getRequestDispatcher(path).forward(request,response);
}
}
jsp页面
list.jsp
<html>
<head>
<title>所有联系人</title>
</head>
<body>
<center>
<h1 style="">通讯录</h1>
<table border="1" style="border-collapse: collapse; border-color: blue;">
<!-- 表头 -->
<tr>
<th>姓名</th>
<th>性别</th>
<th>电话</th>
<th>QQ</th>
<th>Email</th>
<th>地址</th>
<th>操作</th>
</tr>
<!-- 显示数据列表 -->
<c:forEach items="${requestScope.users}" var="user">
<tr>
<td>${user.value.name}</td>
<td>${user.value.sex}</td>
<td>${user.value.phone}</td>
<td>${user.value.QQ}</td>
<td>${user.value.email}</td>
<td>${user.value.address}</td>
<td>
<a href="${pageContext.request.contextPath}/UserServlet?method=delete&id=${user.value.id}" onclick="return confirm('确定要删除本联系人吗?')">删除</a>
<a href="${pageContext.request.contextPath}/UserServlet?method=get&id=${user.value.id}">修改</a>
</td>
</tr>
</c:forEach>
<!-- 其他操作 -->
<tr>
<td colspan="7">
<a href="${pageContext.request.contextPath}/UserServlet?method=save">添加</a>
</td>
</tr>
</table>
</center>
</body>
</html>
addUser.jsp
<html>
<head>
<head>
<title>添加联系人</title>
<style type="text/css">
th, td{
padding: 5px;
}
</style>
</head>
<body>
<center>
<h1 style="">通讯录</h1>
<form action="${pageContext.request.contextPath}/UserServlet?method=saveAdd" method="post">
<table border="1" style="border-collapse: collapse; border-color: blue;">
<!-- 表单内容 -->
<tr>
<td>姓名</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>性别</td>
<td>
<input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女">女
</td>
</tr>
<tr>
<td>电话号码</td>
<td><input type="text" name="phone"></td>
</tr>
<tr>
<td>QQ号码</td>
<td><input type="text" name="QQ"></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" name="Email"></td>
</tr>
<tr>
<td>地址</td>
<td><input type="text" name="address"></td>
</tr>
<!-- 其他操作 -->
<tr>
<td colspan="2" align="center">
<input type="submit" value="添加">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
updateUser.jsp
html>
<head>
<title>修改联系人</title>
<style type="text/css">
th, td{
padding: 5px;
}
</style>
</head>
<body>
<center>
<h1 style="">通讯录</h1>
<form action="${pageContext.request.contextPath}/UserServlet?method=update" method="post">
<table border="1" style="border-collapse: collapse; border-color: blue;">
<!-- 表单内容 -->
<tr>
<td>姓名</td>
<td><input type="text" name="name" value="${requestScope.user.name}">
<input type="hidden" name="id" value="${requestScope.user.id}"></td>
</tr>
<tr>
<td>性别</td>
<td>
<input type="radio" name="sex" value="男" ${(user.sex eq '男') ? "checked" : "" }>男
<input type="radio" name="sex" value="女" ${(user.sex eq '女') ? "checked" : "" }>女
</td>
</tr>
<tr>
<td>电话号码</td>
<td><input type="text" name="phone" value="${requestScope.user.phone}"></td>
</tr>
<tr>
<td>QQ号码</td>
<td><input type="text" name="QQ" value="${requestScope.user.QQ}"></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" name="Email" value="${requestScope.user.email}"></td>
</tr>
<tr>
<td>地址</td>
<td><input type="text" name="address" value="${requestScope.user.address}"></td>
</tr>
<!-- 其他操作 -->
<tr>
<td colspan="2" align="center">
<input type="submit" value="修改">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
最后配置一个数据库连接池c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///tongxunlu</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">15</property>
<property name="minPoolSize">1</property>
<property name="maxIdleTime">2000</property>
</default-config>
</c3p0-config>
jdbc的通讯录CRUD的更多相关文章
- jdbc连接数据库以及crud(简单易懂,本人亲测可用 有源代码和数据库)
今天呢!重新整理了一边jdbc的相关操作:现在来说对于很多框架都使用mybatis和hibernate来操作数据库 ,也有很多使用自己简单封装的ssm或者是其他的一些框架来操作数据库,但是无论使用哪一 ...
- JDBC操作MySQL(crud)
这两天复习了一下JDBC操作MySQL,把crud操作的例子记一下, 类库链接(mysql-connector-java-5.1.37-bin.jar):http://files.cnblogs.co ...
- 二.使用JDBC对数据库CRUD
一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...
- [转载]JavaEE学习篇之——JDBC详解
原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/26164629 目录1.摘要2.JDBC的使用步骤 1.注册驱动 只做一次 ...
- JMeter使用记录1 -- JDBC測试
场景:使用jmeter对web应用和mysql数据库进行压力測试 JMeter是一款很强大的測试工具.能够用来測试web,数据库.从07年用过之后一直对它情有独钟,以下记录下在一个项目中对它的简单使用 ...
- J2EE学习的一部分--JDBC详细说明
今天是关于我们JDBC相关知识,左右JDBC我想大家都很熟悉的,我记得在很早以前就开始使用它,我记得那是一个大二的学生做课程设计.但随后以完成任务,所以遇到的问题google,当时没有时间组织,下关于 ...
- spring框架总结(04)----介绍的是Spring中的JDBC模板
1.1 Jdbc模板概述 它是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装.spring框架为我们提供了很多的操作模板类,入下图所示: 我们今天的主角在spring-jd ...
- JDBC也就那么回事
JDBC 一.JDBC概述 为什么要使用JDBC? JDBC:Java DataBase Connectivity,是SUN公司提供的一套操作数据库的标准规范(技术). JDBC与数据库驱动的关系:接 ...
- java框架之Spring(3)-JDBC模板使用&事务管理
下面内容使用到的 jar 包下载 JDBC模板使用 入门 1.导包,如要导入 Spring 的基本开发包.数据库驱动包.Spring 提供的 JDBC 模板包,如下: 2.测试: @Test publ ...
随机推荐
- 一款jQuery立体感动态下拉导航菜单特效
一款jQuery立体感动态下拉导航菜单特效,鼠标经过,在菜单栏上方下拉出一个背景图片,效果十分不错的一款jquery特效. 对IE6都是兼容的,希望大家好好研究研究. 适用浏览器:IE6.IE7.IE ...
- linux下配置Apache基于加密的认证访问
1.首先要确认安装了 mod_ssl模块 我的机器是centos是系统,执行下面命令 yum install -y mod_ssl 2.用openssl工具生成密钥,证书请求文件,证书 在/usr/l ...
- Android Material Design:滑动指示选项卡android.support.design.widget.TabLayout的简单使用
该TabLayout的功用,简单的说,就是当用户在该TabLayout的选项卡子item中选择触摸时候,文字和下方的指示器横条滑动指示.这个功能就是以前APP开发常用的选项卡某一卡片被切换.选中时候的 ...
- python with语句上下文管理的两种实现方法
在编程中会经常碰到这种情况:有一个特殊的语句块,在执行这个语句块之前需要先执行一些准备动作:当语句块执行完成后,需要继续执行一些收尾动作.例如,文件读写后需要关闭,数据库读写完毕需要关闭连接,资源的加 ...
- linux c 分解质因数
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> ...
- 轻量级远程调用框架-Hessian学习笔记-Demo实现
Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二进制协 ...
- sharepoint mysite and upgrade topics
My Sites overview (SharePoint Server 2010)http://technet.microsoft.com/en-us/library/ff382643(v=offi ...
- OC内存管理 @property的增强
涉及到内存管理,只读,多线程等很多功能时,setter和getter方法也就没那么简单了:当然@property依然强大,很好用: 1:内存管理相关参数: *:retain: (如果是oc对象类型) ...
- 高德开发 android 出现 key 鉴权失败
环境windows + android studio 原因: 曾经更改过key.store 解决办法: 首先运行cmd移动到keystore的目录下keytool -list -keystore 文件 ...
- oracle——分析函数——排序值分析函数
一.问题描述 查询列表时,我们有时需要对查询结果依据某个字段进行排名. 如果每条记录在排序字段上都不相同,我们可以将原查询作为一个视图,查询其rownum,便可以实现简单排序,例如: select r ...