基于jsp,servlet和mysql的用户信息管理系统,dao层

/**
 * 
 */
package com.qingmang.dao;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;


import com.qingmang.domain.User;
import com.qingmang.utils.JdbcUtil;


/**
 * @author administrator
 * 
 */
public class UserDao {


private Connection conn = null;// 初始化Connection连接对象,用于与数据库建立连接
private PreparedStatement pstmt = null;// 初始化向数据库发送预编译sql的PrepareSatement对象
private Statement stmt = null;// 初始化用于向数据库发送SQL的Statement对象
private ResultSet rs = null; // 初始化结果集对象


/*
* PreperedStatement可以避免SQL注入的问题。
* Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement
* 可对SQL进行预编译,从而提高数据库的执行效率。
* 并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。
* 简单记:使用?传值的时候要使用预编译PreperedStatement对象
*/


/*
* (non-Javadoc) 用户添加方法

* @see com.qingmang.dao.inter.IUserDao#add(com.qingmang.domain.User)
*/
public boolean add(User user) {
boolean flag = false;// 初始化布尔类型对象值


try {


conn = JdbcUtil.getConnection();// 连接数据库
String sql = "INSERT INTO users " + "(uname,upassword,"
+ "urealname,uage,usex) " + "VALUES (?,?,?,?,?)";// 在数据库执行的sql语句
pstmt = conn.prepareStatement(sql);// 预编译sql语句;作用:将会大大降低运行时间,提高代码的可读性和可维护性
// 为sql语句中的?设置参数,第一个位置的?占位符为1;第2个?位置的占位符为2,其后为参数
pstmt.setString(1, user.getUname());
pstmt.setString(2, user.getUpassword());
pstmt.setString(3, user.getUrealname());
pstmt.setInt(4, user.getUage());
pstmt.setInt(5, user.getUsex());


int count = pstmt.executeUpdate();// 完成数据添加操作,并计数
if (count > 0)
flag = true;// 如果添加成功,返回true,跳出方法


} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
} finally {
try {
JdbcUtil.close(conn, pstmt);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
return flag;
}


/*
* (non-Javadoc) 根据用户名得到用户方法

* @see com.qingmang.dao.inter.IUserDao#getByName(java.lang.String)
*/
public User getByName(String uname) {
// 创建user的null
User user = null;
try {
conn = JdbcUtil.getConnection();// 连接数据库
String sql = "select * from users where uname=?";// 编写在数据库执行的sql语句
pstmt = conn.prepareStatement(sql);// 预编译sql语句;作用:将会大大降低运行时间,提高代码的可读性和可维护性
// 设置参数
pstmt.setString(1, uname);// 为?所在位置设置参数


rs = pstmt.executeQuery();// 执行数据查询操作,并返回数据结果集
if (rs.next()) {
user = new User();// 新建User对象,以便之后将结果集中的数据封装进对象
user.setUname(rs.getString("uname"));
user.setUpassword(rs.getString("upassword"));
user.setUrealname(rs.getString("urealname"));
user.setUage(rs.getInt("uage"));
user.setUsex(rs.getInt("usex"));


}


} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
} finally {
try {
JdbcUtil.close(conn, pstmt);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}


return user;// 返回查询的对象
}


/*
* (non-Javadoc) 得到所有用户信息

* @see com.qingmang.dao.inter.IUserDao#getAll()
*/
public List<User> getAll() {


return getByKey(null);
}


/**
* 根据关键词查询用户

* @param key
* @return
*/
public List<User> getByKey(String key) {
List<User> list = new ArrayList<User>();
try {
conn = JdbcUtil.getConnection();// 连接数据库
String sql = "";
sql = "select * from users where 1=1";


/* 此处where 1=1 妙处在于在之后加条件时直接用and并列条件即可;也有一个在jsp页面多条件查询的方法,但需用到没学过的知识 */


if (key != null && !"".equals(key)) {
sql += " and uname like '" + key + "%'";
} // 加key值的null和""的判断,如果为空,则全部查询,若不为空,则按条件查询


stmt = conn.createStatement();// 创建用于向数据库发送SQL的Statement对象


rs = stmt.executeQuery(sql);// 执行sql语句的数据查询操作
while (rs.next()) {
User user = new User();


// 将数据封装进对象
user.setUid(rs.getInt("uid"));
user.setUname(rs.getString("uname"));
user.setUpassword(rs.getString("upassword"));
user.setUrealname(rs.getString("urealname"));
user.setUage(rs.getInt("uage"));
user.setUsex(rs.getInt("usex"));


list.add(user);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
try {
JdbcUtil.close(conn, pstmt, rs);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
return list;
}


/**
* 单条用户删除
* 是通过超链接方式,用post方式向servlet提交一个id, 
* 依照这个id对数据库中的记录进行删除操作。 
* */
// 执行静态的sql(delete)
public boolean delete(String uid) throws Exception {
boolean flag = false;
try {

conn = JdbcUtil.getConnection();// 连接数据库
stmt = conn.createStatement();// 得到Statement对象
String sql = "delete from users where uid='" + uid + "'";// 静态的sql语句
int count = stmt.executeUpdate(sql);// 执行sql语句
if (count >= 1) {
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
try {
JdbcUtil.close(conn, stmt);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
return flag;
}


/**
* 根据id得到用户

* @param id
* @return
*/
public User findUserById(int id) {


// 创建user的null
User user = null;
try {
conn = JdbcUtil.getConnection();
String sql = "select * from users where uid=?";
pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setInt(1, id);


rs = pstmt.executeQuery();
if (rs.next()) {
user = new User();
user.setUname(rs.getString("uname"));
user.setUpassword(rs.getString("upassword"));
user.setUrealname(rs.getString("urealname"));
user.setUage(rs.getInt("uage"));
user.setUsex(rs.getInt("usex"));


}


} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
} finally {
try {
JdbcUtil.close(conn, pstmt);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}


return user;
}


/**
* 修改用户信息

* @param user
*/
public boolean updateUser(User user) {
boolean falg = false;
try {
conn = JdbcUtil.getConnection();
String sql = "update users set uname=?,upassword=?,urealname=?,uage=?,usex=? where uid=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getUname());
pstmt.setString(2, user.getUpassword());
pstmt.setString(3, user.getUrealname());
pstmt.setInt(4, user.getUage());
pstmt.setInt(5, user.getUsex());
pstmt.setInt(6, user.getUid());


pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
try {
JdbcUtil.close(conn, pstmt);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}


}
return falg;


}
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值