项目描述
实现一个添加角色信息查重系统,若数据库存在该角色相关信息,则提示添加失败,否则添加成功。
实现工具:Myeclipse , Oracle .
项目流程:
首先进入添加信息首页,然后将数据传至AddUserServlet,然后定义接口RegisterService,
然后实现接口RegisterServiceImpl,定义UserDao接口,AddUserDaoImpl实现UserDao接
口中的查询方法;AddUserDaoImpl继承连接池,实现数据库的增删改查等方法。
主页面
部门代码实现:
<form action="user.action" method="post">
//学工号
<input name="id" />
//角色名
<input name="unmae" />
//权限
<input name="qx" />
//提交按钮
<input type="button" value="提交">
</form>
AddUserServlet
通过注解的方式关联添加信息页面。
@WebServlet(value="/System/user.action")
在该类中,实现查重方法。
private RegisterService service=new RegisterServiceImpl();
该类继承HttpServlet方法,重写其中的doPost方法。
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
Connection con=null;
Statement st=null;
try {
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.建立数据库连接
con= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:jredu","OnlineTest","Jredu12345");
//3.获取执行sql语句的平台
st= con.createStatement();
String id = req.getParameter("id");
String uname = req.getParameter("uname");
String qx = req.getParameter("qx");
String type=req.getParameter("type");
if(service.valid(id)){
resp.sendRedirect("false.html");
}else{
resp.sendRedirect("success.html");
String sql = "INSERT INTO users(id,uname, pwd, qx) "
+ " VALUES(?,?, ?, ?)";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, req.getParameter("id"));
pstmt.setString(2, req.getParameter("uname"));
pstmt.setString(3, "123456");
pstmt.setString(4, req.getParameter("qx"));
pstmt.execute();
}
//4.执行sql语句插入数据
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭st
if(st != null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//关闭con
if(con != null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
RegisterService
在该接口之中,定义一个boolean方法,接收一个id值。
public interface RegisterService {
boolean valid(String id);
}
创建实体类User
该实体类是的相关属性及方法:
public class User {
public User(String id) {
// TODO Auto-generated constructor stub
}
private String id;
public Object getId() {
// TODO Auto-generated method stub
return null;
}
public void setId(String string) {
// TODO Auto-generated method stub
}
RegisterServiceImpl
该类实现接口RegisterService,实现其中的boolean valid(String id);方法。
public class RegisterServiceImpl implements RegisterService{
//数据库对象,查找数据库是否存在相关信息
private UserDao dao=new AddUserDaoImpl();
@Override
public boolean valid(String id) {
// TODO Auto-generated method stub
User user=new User();
user.setId(id);
if(dao.findUser(user)!=null) {
return true;
}
return false;
}
}
通过 UserDao 关联数据库,实现数据库中查询相关信息。
private UserDao dao=new AddUserDaoImpl();
UserDao
该接口中定义查询方法。
public interface UserDao {
//查询
User findUser(User user);
}
AddUserDaoImpl
AddUserDaoImpl继承JNDIBaseDao,关联相关数据库。
AddUserDaoImpl类实现接口UserDao中的查询方法。
public class AddUserDaoImpl extends JNDIBaseDao implements UserDao{
@Override
public User findUser(User user) {
// TODO Auto-generated method stub
//3.执行sql语句
//4.获取结果集
String sql="select * from users where 1=1 ";
List list = new ArrayList();
if(user.getId()!=null&&!user.getId().equals("")) {
sql+=" and id=?";
list.add(user.getId());
}
ResultSet rs=executeQuery(sql, list.toArray());
//访问数据库查询是否存在该用户
try {
//登录成功
if(rs.next()) {
//把结果集转换成实体类
user.setId(rs.getString("id"));
return user;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
closeAll();
}
//不存在该用户
return null;
}
}
JNDIBaseDao
连接池方式与数据库交互,进行增、删、改、查等方法。
public class JNDIBaseDao extends HttpServlet{
private DataSource source;
private Connection connection;
private PreparedStatement ps;
private ResultSet rs;
{
try {
Context ic = new InitialContext();
source = (DataSource)ic.lookup("java:comp/env/jdbc/OnlineTest");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void getConnection() {
try {
connection=source.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 增删改操作
* @param sql
* @param objs
* @return 影响行数
*/
public int executeUpdate(String sql,Object... objs) {
if(connection==null) {
getConnection();
}
int res=-1;
try {
//设置手动提交事务
connection.setAutoCommit(false);
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
ps=connection.prepareStatement(sql);
if(objs!=null) {
for(int i=0;i<objs.length;i++) {
ps.setObject(i+1, objs[i]);
}
}
res=ps.executeUpdate();
//手动提交事务
connection.commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
connection.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} finally {
if(ps!=null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return res;
}
/**
* 查询操作
* @param sql
* @param objs
* @return
*/
public ResultSet executeQuery(String sql,Object... objs) {
if(connection==null) {
getConnection();
}
try {
ps=connection.prepareStatement(sql);
if(objs!=null) {
for(int i=0;i<objs.length;i++) {
ps.setObject(i+1, objs[i]);
}
}
rs=ps.executeQuery();
return rs;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public void closeAll() {
try {
if(rs!=null) {
rs.close();
}
if(ps!=null) {
ps.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}