数据库的链接与SQL语句的使用

首先我们要有一个注册页面(由于省功夫,注册和登录写在了一个页面中,然而这样并没有影响。。。)

<form name="regist" action="/regist" method="post">
        用户名:<input type="text" name="username"/>
        密码:<input type="text" name="password"/>
      <input type="submit" value="注册"/>
  </form>
  • 这里的action换成了/regist 所以我们要创建另一个servlet–Regist.java
  • 接着设置一下请求的编码问题,防止写入到数据库时乱码
    req.setCharacterEncoding("utf-8");

创建数据库和注册登录表单

  • 创建数据库(编码为utf-8)
    ->CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  • 使用数据库
    ->use test
  • 创建表单login
->CREATE TABLE login (
  id int(10) NOT NULL AUTO_INCREMENT,
  username varchar(10) NOT NULL,
  password varchar(10) NOT NULL,
  PRIMARY KEY (id)
)

这里数据库的操作告一段落,接下来时java链接数据库

目录结构和代码
* 看现在的目录结构SqlCon.java是专门用于链接数据库的,在tomcat的lib目录中也加入mysql-connector.jar这个jar包。

package Dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * Created by online on 15-9-16.
 */
public class SqlCon {
    public static Connection getConne(){
        Connection con = null;
        String driver = "com.mysql.jdbc.Driver";//连接数据库所需要的驱动
        String url = "jdbc:mysql://localhost:3306/test?"+
                "user=root&password=p5385676&useUnicode=true&characterEncoding=UTF8";
        //连接的url修改成自己的user和password。其余不变
        try {
            Class.forName(driver);//开始驱动
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try {
            con = DriverManager.getConnection(url);//获取连接
            return con;//返回这个连接供接下来的增删改查使用
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    //关闭对数据库的操作
     public static void closeAll(ResultSet rs,Statement stmt,Connection con){
        try{
            if(rs!=null)
                rs.close();
            if (stmt!=null)
                stmt.close();
            if (con!=null)
                con.close();
        } catch (Exception ex) {
            System.out.println("Error : " + ex.toString());
        }

    }
}
  • Regist.java
package action;

import Dao.AddandSelect;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;

/**
 * Created by online on 15-9-16.
 */
@WebServlet(name = "re",urlPatterns = "/regist")
public class Regist extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String username=req.getParameter("username");
        String password=req.getParameter("password");
        req.getSession().setAttribute("username",username);
        try {
            AddandSelect.regist(username,password);//AddandSelect中的regist方法,把用户名和密码写入数据库。
        } catch (SQLException e) {
            e.printStackTrace();
        }
        req.getRequestDispatcher("/index.jsp").forward(req,resp);
    }
}
  • 写入数据库和查询信息AddandSelect.java
package Dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Created by online on 15-9-16.
 */
public class AddandSelect {
    //注册信息写入数据库
    public static void regist(String username,String password) throws SQLException {
        Connection con = null;//创建连接数据库的Connection类
        PreparedStatement sta = null;//创建一个PreparedStatement类,用于执行sql语句
        ResultSet res = null;//如果是查询语句,查询后返回的时ResultSet
        try{
            con = SqlCon.getConne();
            String sql=  "insert into login(username,password) values(?,?);";
            sta = con.prepareStatement(sql);
            sta.setString(1,username);
            sta.setString(2,password);
            sta.executeUpdate();//执行sql语句,由于是插入语句,所以不需要返回ResultSet。
        } catch (SQLException e) {
            e.printStackTrace();
        }
        SqlCon.closeAll(res,sta,con);//关闭连接

    }
}
  • 运行并输入信息,点击注册,则可以看到数据库中已经添加了该条信息。

数据库的写入已经完成。注册简单完成,接下来时登录。意思就是说,你输入用户名和密码,当你的输入在数据库中有,且用户名和密码匹配,即算登录成功。

  • Homework.java
package action;

import Dao.AddandSelect;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.SQLException;

/**
 * Created by online on 15-9-11.
 */
@WebServlet(urlPatterns = "/login" ,name = "stuLogin")
public class Homework extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //System.out.println(req.getParameter("username"));//req.getParameter();这个方法就是获取jsp页面form表单传送过来的数据。
        //System.out.println(req.getParameter("password"));//这里运行并在页面输入后提交  则会在控制台看到输入内容。
        HttpSession session = req.getSession();//创建session对象
        String username= (String) req.getParameter("username");
        String password= (String) req.getParameter("password");
        session.setAttribute("cu",username);
        try {
            if (AddandSelect.valiuandp(username,password)){//验证是否匹配到信息匹配到就进入到success.jsp,不匹配就返回登录界面。
                req.getRequestDispatcher("/success.jsp").forward(req,resp);
            }else {
                req.getRequestDispatcher("/index.jsp").forward(req,resp);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
  • AddandSelect.java 中的验证方法
 //验证用户名和密码是否匹配
    public static boolean valiuandp(String username,String password) throws SQLException {
        Connection con = null;
        PreparedStatement sta = null;
        ResultSet rs = null;
        int i = 0;
        try{
            con = SqlCon.getConne();

            String sql = "select * from login where username=? and password=?;";
            sta=con.prepareStatement(sql);
            sta.setString(1,username);
            sta.setString(2,password);
            rs=sta.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }while (rs.next()){
            i++;
        }
        SqlCon.closeAll(rs,sta,con);
        if (i>0){
            return true;
        }
        else {
            return false;
        }

    }

注册(写入到数据库),登录(在数据库中提取)

注册的时候还需要有验证是否有人注册,填信息时是否有漏填的。

下一节讲述完整的验证信息。附简单的验证码添加到网页中进行验证(防止暴力登录)

猜你喜欢

转载自blog.csdn.net/pckonline/article/details/48491317