一下子弄了三个平板一千多买个耳机疯了吗,我是不是疯了

2342人阅读
jsp/servlet(40)
数据库(34)
在开发中, 我们常常会用到mysql数据库, 对操作mysql数据库的数据进入封装, 减少不必要代码的编写, 提高程序的逻辑性, 在开发项目时可以达到事关功倍的效果.
1. 在eclipse中, 新建一个动态web项目, File——&New——&Dynamic Web Project
2. 在src右键新建一个工具包util, 形如com.xxx.yyy.util, com表示商业性的, 也可是org(组织), 或cn(中国), xxx表示公司或组织或学校的简写,yyy表示项目应用的简写, 然后新建一个类, 名为ConnectionUtil.java
拷贝以下代码到ConnectionUtil.java里:
import javax.sql.DataS
import java.sql.C
import java.sql.SQLE
import javax.naming.C
import javax.naming.InitialC
public class ConnectionUtil {
private static DataSource ds =
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup(&java:comp/env&);
ds = (DataSource)envCtx.lookup(&jdbc/WroxTC6&);
catch(Exception ex) {
throw new RuntimeException(ex);
public static Connection getConnection() throws SQLException {
Connection conn = ds.getConnection();
public static void returnConnection(Connection conn) {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
在项目的.../WebContent/META-INF/下新建一个context.xml文件, 拷贝以下代码进context.xml里:
&?xml version=&1.0& encoding=&UTF-8&?&
&!DOCTYPE hibernate-configuration PUBLIC
&-//Hibernate/Hibernate Configuration DTD 3.0//EN&
&http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd&&
&Resource name=&jdbc/WroxTC6& auth=&Container&
type=&javax.sql.DataSource&
maxActive=&50&
maxIdle=&100&
maxWait=&10000&
username=&root&
password=&admin&
driverClassName=&com.mysql.jdbc.Driver&
url=&jdbc:mysql://localhost:3306/b2cmall?useUnicode=true&characterEncoding=UTF-8&
&/Context&
其中上面有三处要进入修改, username 填写你的mysql用户名, 默认是root, password 填写你的mysql用户对应的密码, 最后替换b2cmall为你要连接的数据库名称。
除了上面ConnectionUtil.java和context.xml文件外, 还要有连接mysql数据库的驱动包JDBC:mysql-connector-java-5.1.30-bin.jar,其中5.1.30是mysql-connector-java驱动包的版本号,
将mysql-connector-java-5.1.30-bin.jar拷贝进.../WebContent/WEB-INF/lib/下即可。(ps:lib文件夹用来存在web项目需要使用的架包, 即类库)
3. ConnectionUtil.java、 context.xml、mysql-connector-java-5.1.30都准备后好, 开始编写DAO层
核心代码:
private Connection conn =
private PreparedStatement pstmt =
private ResultSet rs =
conn = ConnectionUtil.getConnection();
//对mysql数据库进入操作
}catch(Exception e){
e.printStackTrace();
if(rs != null)
rs.close();
if(pstmt != null)
pstmt.close();
if(conn != null)
conn.close();
}catch(Exception ex){
ex.printStackTrace();
下面是一个简单的例子:
MemberDao.java代码(ps:此处暂时不考虑sql注入等问题, 所以暂时不过滤sql不安全字符):
package com.b2c.
import java.sql.C
import java.sql.PreparedS
import java.sql.ResultS
import java.util.ArrayL
import java.util.L
import mon.M
import com.b2c.util.ConnectionU
//数据库访问层--会员
public class MemberDao {
private Connection conn =
private PreparedStatement pstmt =
private ResultSet rs =
* 注册,注意积分和级别的确定;密码需要通过加密算法处理后保存。
* @param member
public int add(Member member){
int val = 0;
String sql = &&;
conn = ConnectionUtil.getConnection();
sql = &INSERT INTO member(email,nick,password,credit,layerid,rDatetime,lastlogintime,lastloginip) VALUES(?,?,?,?,?,?,?,?)&;
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, member.getEmail());
pstmt.setString(2, member.getNick());
pstmt.setString(3, member.getPassword());
pstmt.setInt(4, member.getCredit());
pstmt.setInt(5, member.getLayerid());
pstmt.setString(6, member.getrDatetime());
pstmt.setString(7, member.getLastLoginTime());
pstmt.setString(8, member.getLastLoginIp());
val = pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
if(rs != null)
rs.close();
if(pstmt != null)
pstmt.close();
if(conn != null)
conn.close();
}catch(Exception ex){
ex.printStackTrace();
* 会员信息修改
* @param member
public int update(Member member){
int val = 0;
String sql = &&;
conn = ConnectionUtil.getConnection();
sql = &UPDATE member SET email=?, nick=?, password=?, credit=?, layerid=?, rDatetime=?, lastlogintime=?, lastloginip=? WHERE id=?&;
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, member.getEmail());
pstmt.setString(2, member.getNick());
pstmt.setString(3, member.getPassword());
pstmt.setInt(4, member.getCredit());
pstmt.setInt(5, member.getLayerid());
pstmt.setString(6, member.getrDatetime());
pstmt.setString(7, member.getLastLoginTime());
pstmt.setString(8, member.getLastLoginIp());
pstmt.setInt(9, member.getId());
val = pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
if(rs != null)
rs.close();
if(pstmt != null)
pstmt.close();
if(conn != null)
conn.close();
}catch(Exception ex){
ex.printStackTrace();
* 根据id删除会员
* @param id
public int delete(Integer id){
int val = 0;
String sql = &&;
conn = ConnectionUtil.getConnection();
sql = &DELETE FROM member WHERE id=& +
pstmt = conn.prepareStatement(sql);
val = pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
if(rs != null)
rs.close();
if(pstmt != null)
pstmt.close();
if(conn != null)
conn.close();
}catch(Exception ex){
ex.printStackTrace();
* 登录,验证用户的合法性。同时注意密码需要通过加密算法处理然后匹配。
* @param username
* @param pasword
public boolean validate(String username, String pasword){
boolean flag =
String sql = &&;
conn = ConnectionUtil.getConnection();
sql = &SELECT * FROM member WHERE email=? AND password=?&;
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, pasword);
rs = pstmt.executeQuery();
if(rs.next())
}catch(Exception e){
e.printStackTrace();
if(rs != null)
rs.close();
if(pstmt != null)
pstmt.close();
if(conn != null)
conn.close();
}catch(Exception ex){
ex.printStackTrace();
* 重置密码,将某个用户的密码重置为新密码
* @param username
* @param password
public int resetPassword(String email, String password){
int val = 0;
String sql = &&;
conn = ConnectionUtil.getConnection();
sql = &UPDATE member set password=? WHERE email=?&;
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, password);
pstmt.setString(2, email);
val = pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
if(rs != null)
rs.close();
if(pstmt != null)
pstmt.close();
if(conn != null)
conn.close();
}catch(Exception ex){
ex.printStackTrace();
* 根据id查询会员
* @param id
public Member findById(Integer id){
Member memb =
String sql = &&;
conn = ConnectionUtil.getConnection();
sql = &SELECT * FROM member WHERE id=& +
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
if(rs.next()){
memb = new Member();
memb.setId(rs.getInt(&id&));
memb.setEmail(rs.getString(&email&));
memb.setNick(rs.getString(&nick&));
memb.setPassword(rs.getString(&password&));
memb.setCredit(rs.getInt(&credit&));
memb.setLayerid(rs.getInt(&layerid&));
memb.setrDatetime(rs.getString(&rDatetime&));
memb.setLastLoginTime(rs.getString(&lastlogintime&));
memb.setLastLoginIp(rs.getString(&lastloginip&));
}catch(Exception e){
e.printStackTrace();
if(rs != null)
rs.close();
if(pstmt != null)
pstmt.close();
if(conn != null)
conn.close();
}catch(Exception ex){
ex.printStackTrace();
* 根据邮箱email查询会员
* @param email
public Member findByEmail(String email){
Member memb =
String sql = &&;
conn = ConnectionUtil.getConnection();
sql = &SELECT * FROM member WHERE email=?&;
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, email);
rs = pstmt.executeQuery();
if(rs.next()){
memb = new Member();
memb.setId(rs.getInt(&id&));
memb.setEmail(rs.getString(&email&));
memb.setNick(rs.getString(&nick&));
memb.setPassword(rs.getString(&password&));
memb.setCredit(rs.getInt(&credit&));
memb.setLayerid(rs.getInt(&layerid&));
memb.setrDatetime(rs.getString(&rDatetime&));
memb.setLastLoginTime(rs.getString(&lastlogintime&));
memb.setLastLoginIp(rs.getString(&lastloginip&));
}catch(Exception e){
e.printStackTrace();
if(rs != null)
rs.close();
if(pstmt != null)
pstmt.close();
if(conn != null)
conn.close();
}catch(Exception ex){
ex.printStackTrace();
* 根据查询条件分布查询会员
* @param sqlCause
* @param startindex
* @param size
public List&Member& findList(String sqlCause, int startindex, int size){
List&Member& list =
Member memb =
String sql = &&;
list = new ArrayList&Member&();
conn = ConnectionUtil.getConnection();
sql = &SELECT * FROM member &;
if(!sqlCause.equals(&&))
sql += &WHERE & + sqlC
sql += & LIMIT ?,?&;
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, startindex);
pstmt.setInt(2, size);
rs = pstmt.executeQuery();
while(rs.next()){
memb = new Member();
memb.setId(rs.getInt(&id&));
memb.setEmail(rs.getString(&email&));
memb.setNick(rs.getString(&nick&));
memb.setPassword(rs.getString(&password&));
memb.setCredit(rs.getInt(&credit&));
memb.setLayerid(rs.getInt(&layerid&));
memb.setrDatetime(rs.getString(&rDatetime&));
memb.setLastLoginTime(rs.getString(&lastlogintime&));
memb.setLastLoginIp(rs.getString(&lastloginip&));
list.add(memb);
}catch(Exception e){
e.printStackTrace();
if(rs != null)
rs.close();
if(pstmt != null)
pstmt.close();
if(conn != null)
conn.close();
}catch(Exception ex){
ex.printStackTrace();
* 查找所有会员
public List&Member& findList(){
List&Member& list =
Member memb =
String sql = &&;
list = new ArrayList&Member&();
conn = ConnectionUtil.getConnection();
sql = &SELECT * FROM member&;
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()){
memb = new Member();
memb.setId(rs.getInt(&id&));
memb.setEmail(rs.getString(&email&));
memb.setNick(rs.getString(&nick&));
memb.setPassword(rs.getString(&password&));
memb.setCredit(rs.getInt(&credit&));
memb.setLayerid(rs.getInt(&layerid&));
memb.setrDatetime(rs.getString(&rDatetime&));
memb.setLastLoginTime(rs.getString(&lastlogintime&));
memb.setLastLoginIp(rs.getString(&lastloginip&));
list.add(memb);
}catch(Exception e){
e.printStackTrace();
if(rs != null)
rs.close();
if(pstmt != null)
pstmt.close();
if(conn != null)
conn.close();
}catch(Exception ex){
ex.printStackTrace();
* 根据查询条件获取记录数
* @param sqlCause
public int findCount(String sqlCause){
int count = 0;
String sqlQuery = &&;
conn = ConnectionUtil.getConnection();
sqlQuery = &SELECT count(*) FROM member &;
if(!sqlCause.equals(&&))
sqlQuery += &WHERE & + sqlC
pstmt = conn.prepareStatement(sqlQuery);
rs = pstmt.executeQuery();
rs.next();
count = rs.getInt(1);
}catch(Exception e){
e.printStackTrace();
if(rs != null)
rs.close();
if(pstmt != null)
pstmt.close();
if(conn != null)
conn.close();
}catch(Exception ex){
ex.printStackTrace();
本人打包了struts2所需架包及上面的提及到的ConnectionUtil.java、 context.xml、mysql-connector-java-5.1.30,
5. 以上的代码还不能更好地体验数据的封装, 比如上面不断重复以下代码:
if(rs != null)
rs.close();
if(pstmt != null)
pstmt.close();
if(conn != null)
conn.close();
}catch(Exception ex){
ex.printStackTrace();
对于重复的代码, 我们应该合并为一个方法即可。下面在此进行进一步优化...结构如下:
上面DBConnectionUtil.java和db.properties两个文件是关键, db.properties封装mysql的用户名、密码、jdbc驱动包、数据库源,文件后缀名一定要为.properties.
db.properties代码内容如下:
url=jdbc\:mysql\://localhost\:3306/b2cmall?useUnicode=true&characterEncoding=UTF-8
password=admin
driver=com.mysql.jdbc.Driver
DBConnectionUtil.java封装了连接mysql数据库的驱动管理实例, 代码如下:
import java.io.IOE
import java.io.InputS
import java.sql.C
import java.sql.DriverM
import java.sql.PreparedS
import java.sql.ResultS
import java.util.P
public class DBConnectionUtil {
private static S
private static S
private static S
private static S
ClassLoader classLoader = DBConnectionUtil.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream(&config/props/db.properties&);
Properties props = new Properties();
props.load(is);
url = props.getProperty(&url&);
user = props.getProperty(&user&);
password = props.getProperty(&password&);
driver = props.getProperty(&driver&);
// 注册驱动
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(&找不到驱动&);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(&加载properties文件错误&);
* 获取连接
* @throws Exception
public static Connection getConnection() throws Exception {
return DriverManager.getConnection(url, user, password);
* 关闭连接
* @param conn
* @param pstmt
* @param rs
* @throws Exception
public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) throws Exception {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
将上面的DBConnectionUtil.java、db.properties、和mysql-connector-java-5.1.30-bin.jar驱动包放置到各自相应的位置即可, 使用示例如下:
MemberDao.java代码内容(增强版):
import java.sql.C
import java.sql.PreparedS
import java.sql.ResultS
import java.util.ArrayL
import java.util.L
import com.mon.M
import com.gditc.b2cmall.util.DBConnectionU
//数据库访问层--会员
public class MemberDao {
private Connection conn =
private PreparedStatement pstmt =
private ResultSet rs =
* 注册,注意积分和级别的确定;密码需要通过加密算法处理后保存。
* @param member
* @throws Exception
public int add(Member member) throws Exception{
int val = 0;
String sql = &&;
conn = DBConnectionUtil.getConnection();
sql = &INSERT INTO member(email,nick,password,credit,layerid,rDatetime,lastlogintime,lastloginip) VALUES(?,?,?,?,?,?,?,?)&;
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, member.getEmail());
pstmt.setString(2, member.getNick());
pstmt.setString(3, member.getPassword());
pstmt.setInt(4, member.getCredit());
pstmt.setInt(5, member.getLayerid());
pstmt.setString(6, member.getrDatetime());
pstmt.setString(7, member.getLastLoginTime());
pstmt.setString(8, member.getLastLoginIp());
val = pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
DBConnectionUtil.close(conn, pstmt, rs);
* 会员信息修改
* @param member
* @throws Exception
public int update(Member member) throws Exception {
int val = 0;
String sql = &&;
conn = DBConnectionUtil.getConnection();
sql = &UPDATE member SET email=?, nick=?, password=?, credit=?, layerid=?, rDatetime=?, lastlogintime=?, lastloginip=? WHERE id=?&;
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, member.getEmail());
pstmt.setString(2, member.getNick());
pstmt.setString(3, member.getPassword());
pstmt.setInt(4, member.getCredit());
pstmt.setInt(5, member.getLayerid());
pstmt.setString(6, member.getrDatetime());
pstmt.setString(7, member.getLastLoginTime());
pstmt.setString(8, member.getLastLoginIp());
pstmt.setInt(9, member.getId());
val = pstmt.executeUpdate();
} catch(Exception e) {
e.printStackTrace();
} finally {
DBConnectionUtil.close(conn, pstmt, rs);
* 根据id删除会员
* @param id
* @throws Exception
public int delete(Integer id) throws Exception {
int val = 0;
String sql = &&;
conn = DBConnectionUtil.getConnection();
sql = &DELETE FROM member WHERE id=& +
pstmt = conn.prepareStatement(sql);
val = pstmt.executeUpdate();
} catch(Exception e) {
e.printStackTrace();
} finally {
DBConnectionUtil.close(conn, pstmt, rs);
* 登录,验证用户的合法性。同时注意密码需要通过加密算法处理然后匹配。
* @param username
* @param pasword
* @throws Exception
public boolean validate(String username, String pasword) throws Exception {
boolean flag =
String sql = &&;
conn = DBConnectionUtil.getConnection();
sql = &SELECT * FROM member WHERE email=? AND password=?&;
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, pasword);
rs = pstmt.executeQuery();
if(rs.next())
} catch(Exception e) {
e.printStackTrace();
} finally {
DBConnectionUtil.close(conn, pstmt, rs);
* 重置密码,将某个用户的密码重置为新密码
* @param username
* @param password
* @throws Exception
public int resetPassword(String email, String password) throws Exception {
int val = 0;
String sql = &&;
conn = DBConnectionUtil.getConnection();
sql = &UPDATE member set password=? WHERE email=?&;
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, password);
pstmt.setString(2, email);
val = pstmt.executeUpdate();
} catch(Exception e) {
e.printStackTrace();
} finally {
DBConnectionUtil.close(conn, pstmt, rs);
* 根据id查询会员
* @param id
* @throws Exception
public Member findById(Integer id) throws Exception {
Member memb =
String sql = &&;
conn = DBConnectionUtil.getConnection();
sql = &SELECT * FROM member WHERE id=& +
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
if(rs.next()){
memb = new Member();
memb.setId(rs.getInt(&id&));
memb.setEmail(rs.getString(&email&));
memb.setNick(rs.getString(&nick&));
memb.setPassword(rs.getString(&password&));
memb.setCredit(rs.getInt(&credit&));
memb.setLayerid(rs.getInt(&layerid&));
memb.setrDatetime(rs.getString(&rDatetime&));
memb.setLastLoginTime(rs.getString(&lastlogintime&));
memb.setLastLoginIp(rs.getString(&lastloginip&));
} catch(Exception e) {
e.printStackTrace();
} finally {
DBConnectionUtil.close(conn, pstmt, rs);
* 根据邮箱email查询会员
* @param email
* @throws Exception
public Member findByEmail(String email) throws Exception {
Member memb =
String sql = &&;
conn = DBConnectionUtil.getConnection();
sql = &SELECT * FROM member WHERE email=?&;
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, email);
rs = pstmt.executeQuery();
if(rs.next()){
memb = new Member();
memb.setId(rs.getInt(&id&));
memb.setEmail(rs.getString(&email&));
memb.setNick(rs.getString(&nick&));
memb.setPassword(rs.getString(&password&));
memb.setCredit(rs.getInt(&credit&));
memb.setLayerid(rs.getInt(&layerid&));
memb.setrDatetime(rs.getString(&rDatetime&));
memb.setLastLoginTime(rs.getString(&lastlogintime&));
memb.setLastLoginIp(rs.getString(&lastloginip&));
} catch(Exception e) {
e.printStackTrace();
} finally {
DBConnectionUtil.close(conn, pstmt, rs);
* 根据查询条件分布查询会员
* @param sqlCause
* @param startindex
* @param size
* @throws Exception
public List&Member& findList(String sqlCause, int startindex, int size) throws Exception {
List&Member& list =
Member memb =
String sql = &&;
list = new ArrayList&Member&();
conn = DBConnectionUtil.getConnection();
sql = &SELECT * FROM member &;
if(!sqlCause.equals(&&))
sql += &WHERE & + sqlC
sql += & LIMIT ?,?&;
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, startindex);
pstmt.setInt(2, size);
rs = pstmt.executeQuery();
while(rs.next()) {
memb = new Member();
memb.setId(rs.getInt(&id&));
memb.setEmail(rs.getString(&email&));
memb.setNick(rs.getString(&nick&));
memb.setPassword(rs.getString(&password&));
memb.setCredit(rs.getInt(&credit&));
memb.setLayerid(rs.getInt(&layerid&));
memb.setrDatetime(rs.getString(&rDatetime&));
memb.setLastLoginTime(rs.getString(&lastlogintime&));
memb.setLastLoginIp(rs.getString(&lastloginip&));
list.add(memb);
} catch(Exception e) {
e.printStackTrace();
} finally {
DBConnectionUtil.close(conn, pstmt, rs);
* 查找所有会员
* @throws Exception
public List&Member& findList() throws Exception {
List&Member& list =
Member memb =
String sql = &&;
list = new ArrayList&Member&();
conn = DBConnectionUtil.getConnection();
sql = &SELECT * FROM member&;
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) {
memb = new Member();
memb.setId(rs.getInt(&id&));
memb.setEmail(rs.getString(&email&));
memb.setNick(rs.getString(&nick&));
memb.setPassword(rs.getString(&password&));
memb.setCredit(rs.getInt(&credit&));
memb.setLayerid(rs.getInt(&layerid&));
memb.setrDatetime(rs.getString(&rDatetime&));
memb.setLastLoginTime(rs.getString(&lastlogintime&));
memb.setLastLoginIp(rs.getString(&lastloginip&));
list.add(memb);
} catch(Exception e) {
e.printStackTrace();
} finally {
DBConnectionUtil.close(conn, pstmt, rs);
* 根据查询条件获取记录数
* @param sqlCause
* @throws Exception
public int findCount(String sqlCause) throws Exception {
int count = 0;
String sqlQuery = &&;
conn = DBConnectionUtil.getConnection();
sqlQuery = &SELECT count(*) FROM member &;
if(!sqlCause.equals(&&))
sqlQuery += &WHERE & + sqlC
pstmt = conn.prepareStatement(sqlQuery);
rs = pstmt.executeQuery();
rs.next();
count = rs.getInt(1);
} catch(Exception e) {
e.printStackTrace();
} finally {
DBConnectionUtil.close(conn, pstmt, rs);
至此, 我们减少了更多重复代码的编写,逻辑性也更加良好, 更好地体验到数据封装的理念...
6. OK. Enjoy it!!!
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:514083次
积分:6978
积分:6978
排名:第2900名
原创:231篇
转载:28篇
评论:56条
(3)(1)(1)(3)(2)(1)(3)(1)(3)(1)(2)(2)(2)(2)(4)(2)(1)(2)(3)(8)(4)(4)(29)(5)(10)(6)(8)(2)(2)(3)(6)(25)(23)(9)(2)(12)(13)(13)(6)(23)(6)}

我要回帖

更多关于 一千多买个耳机疯了吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信