**目的:**在页面中输入用户名,密码,昵称,创建新的用户,并把数据保存到数据库中(tbl_user),并分配id;
过程分析:
添加用户
1.页面
- Id
- Loginname
- Passworf
- Nickname
2.UserAddServlet
-
2.1).接受参数
-
-2.2)保存数据(保存到数据库中)
针对接口编程(解耦)
3.JDBC---->提供了一个方法
-
Public boolean add(User u);
-
User封装参数
- Id Lodinname Password Nickname
4.DAO
- ).User 封装参数
- ).UserDAO 接口,用来向上层提供方法
- )UserDAOImpl 接口的实现
- ).UserDAOFactory 生成接口实现类
从下向上写
代码实现:
1.创建util包
package com.lq.user.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtil {
////加载sql驱动
static {
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获得数据库连接
public static Connection openConn() throws SQLException {
return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","123456");
}
//关闭资源
public static void close(Connection conn) {
close(conn,null,null);
}
public static void close(Connection conn,PreparedStatement pst) {
close(conn,pst,null);
}
public static void close(Connection conn,PreparedStatement pst,ResultSet rs) {
if(conn!=null) //关闭conn
{
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pst!=null) //关闭pst
{
try {
pst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(rs!=null) //关闭rs
{
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
##``2.创建domain包
package com.lq.user.domain;
public class User {
private int id;
private String loginname; //登录名
private String password; //密码
private String nickname; //昵称
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLoginname() {
return loginname;
}
public void setLoginname(String loginname) {
this.loginname = loginname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
创建UserDAO接口
package com.lq.user.dao.dao;
import com.lq.user.domain.User;
public interface UserDAO {
public boolean add(User u); //需要实现的功能
}
实现UserDAO接口```
package com.lq.user.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.lq.user.dao.dao.UserDAO;
import com.lq.user.domain.User;
import com.lq.user.util.DBUtil;
public class UserDAOImpl implements UserDAO{
private Connection conn;
private PreparedStatement pst;
@Override
public boolean add(User u) { //实现接口中的功能
//插入索引 创建索引 -->create sequence seq_user;
String sql = "insert into tbl_user values(seq_user.nextval,?,?,?)"; //要执行的SQL语句
try {
conn = DBUtil.openConn(); //获得数据库连接
pst = conn.prepareStatement(sql); //操作sql语句
//插入数据
pst.setString(1, u.getLoginname());
pst.setString(2, u.getPassword());
pst.setString(3, u.getNickname());
pst.executeUpdate(); //执行SQL语句
return true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
DBUtil.close(conn, pst); //关闭打开的资源
}
return false;
}
}
生成接口实现类
package com.lq.user.dao.factory;
import com.lq.user.dao.dao.UserDAO;
import com.lq.user.dao.impl.UserDAOImpl;## 标题
public class UserDAOFactory {
public static UserDAO getUserDao() {
return new UserDAOImpl(); //生成新的接口实现类
}
}
接受保存数据
package com.lq.user.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import com.lq.user.dao.dao.UserDAO;
import com.lq.user.dao.factory.UserDAOFactory;
import com.lq.user.domain.User;
public class UserAddServlet implements Servlet {
@Override
public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
//响应的编码格式
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter(); //输出
//请求的编码格式
req.setCharacterEncoding("utf-8");
//请求得到的数据
String loginname = req.getParameter("loginname");
String password = req.getParameter("password");
String nickname = req.getParameter("nickname");
//封装数据
User u = new User();
u.setLoginname(loginname);
u.setPassword(password);
u.setNickname(nickname);
UserDAO udao = UserDAOFactory.getUserDao();
//添加
boolean b=udao.add(u);
if(b == true)
{
out.println("用户信息添加成功!!!");
}else
{
out.println("用户信息添加失败!!!");
}
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
页面显示
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="Add" method="get">
loginname:<input type="text" name="loginname"/><br>
password:<input type="password" name="password"/><br>
nickname:<input type="text" name="nickname"/><br>
<input type="submit" value="添加" />
</form>
</body>
</html>