JDBC登录与数据传输

现在我们就先对登录代码来操作解释一波~(当然也不会讲的太具体 实在不行百度也是不错的选择)

那么在写代码之前先创建好代码中所需要的包(包名如下)

```java

controller(控制器)

Filter(过滤器)

mapper(连接数据库代码的接口)

mapperImpl(连接数据库的代码)

service(服务:对前后端数据进行比对)

serviceImpl(服务的接口)

pojo(数据)

```

创建完包之后就跟着下面的步骤一步步执行就可以了

在pojo包中创建User类 并生成Get/Set/toString() 方法就可以了(代码很简单,这里就展示部分代码 )

```java

private int id ;

private String uname ;

private String aname ;

private int tel ;

private String email ;

private Date date ;

private String role ;

private String upass ;

```

在mapper包中创建一个用于连接数据库的接口类(UserMapper)

```java

public interface UserMapper {

User getUser(User user);//返回User对象

List<User> getList();//返回包含User的List集合

}

```

写完接口那么就来实现它(UserMapperImpl)

```java

public class UserMapperImpl implements UserMapper {

@Override

public User getUser(User user) {

    User user1 = null;//声明User对象

    Connection conn = null;//不写在try/catch中是为了方便下面的关流(数据库连接池默认:100)

    PreparedStatement ps = null;

    ResultSet rs = null;

    try {

        Class.forName("com.mysql.jdbc.Driver");//这里通过反射 加载Mysql的驱动类

        //创建数据库的连接(写到这为了检测数据库是否连接成功 可以输出一下conn 如果有结果则连接成功)

        conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java", "root", "abc123");

        //sql语句

        ps = conn.prepareStatement("select uname,upass from test where uname = ? and upass = ? ");

        //这里的setString()指的是sql语句中的?(问号) 从1开始

        ps.setString(1, user.getUname());

        ps.setString(2, user.getUpass());

        //执行sql语句并返回)ResultSet(结果集)对象

        rs = ps.executeQuery();

        while (rs.next()) {//根据是否有值来判断

            user1 = new User();

            user1.setUname(rs.getString("uname"));//通过一开始创建的set来进行赋值

            user1.setUpass(rs.getString("upass"));

        }

    } catch (ClassNotFoundException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    } catch (SQLException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    } finally {

        //下面就是关闭接口(与栈一样先进后出)

        if (rs != null) {

            try {

                rs.close();

            } catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

        if (ps != null) {

            try {

                ps.close();

            } catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

        if (conn != null) {

            try {

                conn.close();

            } catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }

    return user1;

}

@Override

public List<User> getList() {

    // TODO Auto-generated method stub

    List<User> user1 = new ArrayList<User>();//由于要返回一整个数据所有需要一个集合

    Connection conn = null;

    PreparedStatement ps = null;

    ResultSet rs = null;

    try {

        Class.forName("com.mysql.jdbc.Driver");

        conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java", "root", "abc123");

        ps = conn.prepareStatement("select \* from test  ");//查询表中所有

        rs = ps.executeQuery();

        while (rs.next()) {

            //和上面代码雷同

            User user = new User();

            user.setId(rs.getInt("id"));

            user.setUname(rs.getString("uname"));

            user.setAname(rs.getString("aname"));

            user.setTel(rs.getInt("tel"));

            user.setEmail(rs.getString("email"));

            user.setDate(rs.getDate("date"));

            user.setRole(rs.getString("role"));

            user.setUpass(rs.getString("upass"));

            user1.add(user);//将赋好值得user对象加到集合中

        }

    } catch (ClassNotFoundException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    } catch (SQLException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    } finally {

        if (rs != null) {

            try {

                rs.close();

            } catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

        if (ps != null) {

            try {

                ps.close();

            } catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

        if (conn != null) {

            try {

                conn.close();

            } catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }

    return user1;

}

}

```

由于在连接数据库的操作已经在代码中解释了 所以下面我们依旧是跟着代码流程写下去

在service包中创建UserService的接口类

```java

public interface UserService {

boolean checkUser(User user);//对形参里的user进行判定返回布尔值

List<User> getUsers();//获取list集合

}

```

在serviceImpl包中创建UserServiceImpl的实现类

```java

public class UserServiceImpl implements UserService{

private UserMapper uMapper = new UserMapperImpl();//通过多态实现UserMapperImpl的对象

@Override

public boolean checkUser(User user) {

    // TODO Auto-generated method stub

    boolean flag = false ;

    User user2 = uMapper.getUser(user);//获取数据库查询结果

    if (user2 != null) {//查询成功不就不会空值对呗\~

        flag = true ;

    }

    return flag;//将布尔值返回

}

@Override

public List<User> getUsers() {

    return uMapper.getList();//这还是返回集合

}

}

```

目前连接数据库的代码也完成了,检测是否成功的代码也完成了 那么现在就只剩下获取前端数据的controller了

在controller包中创建UserController类(这里我们前端采用post提交)

```java

@WebServlet("/login")//这里采用了注解的方式来声明(也就不需要去web.xml中进行配置啦~ )

public class UserController extends HttpServlet {

private UserService uSimple = new UserServiceImpl();//通过多台获取UserServiceImpl对象

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    // TODO Auto-generated method stub

    super.doPost(req, resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    // TODO Auto-generated method stub

    String uname = req.getParameter("uname");//通过getParameter()方法来获取前端数据的数据

    String upass = req.getParameter("upass");

    User user = new User();

    user.setUname(uname);

    user.setUpass(upass);

    boolean result = uSimple.checkUser(user);//将前端的值进行判定返回布尔值

    if (result) {//成功则执行下面代码

        //通过Session来进行短时间(30min)的用户名传输

        HttpSession session = req.getSession();

        session.setAttribute("uname", uname);//key和value

        //这里我个人是通过ServletContext全局的方式来获取数据库传输的集合

        ServletContext context = this.getServletContext();

        List<User> users = uSimple.getUsers();

        context.setAttribute("lists", users);

        req.getRequestDispatcher("/index.jsp").forward(req, resp);//跳转

    } else {

        req.setAttribute("temp", "用户名或密码错误");

        req.getRequestDispatcher("/login.jsp").forward(req, resp);//跳转

    }

}

}

```

到现在 JDBC登录与数据传输后台代码已经完成了,当然你们也可以接着去优化这里的代码

那么前端的代码我就不全部显示出来了(显示集合显示的代码)

```jsp

            <table id="datalist" border="1" cellspacing="0px" width="700px">

    <tr align="center">

        <td>管理员id</td>

        <td>姓名</td>

        <td>登录名</td>

        <td>电话</td>

        <td>电子邮件</td>

        <td>授权日期</td>

        <td>拥有角色</td>

        <td>密码</td>

    </tr>

    <c:forEach items="\${lists}" var="list" >

        <tr align="center">

            <td>\${list.id}</td>

            <td>\${list.uname}</td>

            <td>\${list.aname}</td>

            <td>\${list.tel}</td>

            <td>\${list.email}</td>

            <td>\${list.date}</td>

            <td>\${list.role}</td>

            <td>\${list.upass}</td>

        </tr>

    </c:forEach>

</table>

        </div>

```

这里主要是使用jstl标签库 使用之前需要在最上方加入一下代码:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>



在文章最后我会将代码中所需要的插件链接与代码成功Gif展出

文章作者: 大熊先生
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 大雄先生
Java
喜欢就支持一下吧