/**
*
*/
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;
}
}
基于jsp,servlet和mysql的用户信息管理系统,dao层
最新推荐文章于 2023-07-04 01:20:20 发布