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

来源:互联网 发布:单词默写软件 编辑:程序博客网 时间:2024/05/01 14:18

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

<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;        }    }

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

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

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

0 0