El uso de PreparedStatement, c3p0 y DBUtiles en el experimento javaweb

El uso de PreparedStatement, c3p0 y DBUtiles en el experimento javaweb

Insertar descripción de la imagen aquí

Paquetes jar y complementos utilizados en este experimento:


<dependency>
    <groupId>commons-dbutils</groupId>
    <artifactId>commons-dbutils</artifactId>
    <version>1.7</version>
</dependency>

<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

</dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>9100</port>
                </configuration>
            </plugin>
        </plugins>
    </build>

Archivo db.properties en recursos

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/shop2?useUnicode=true&charcterEncoding=utf8&useSSL=false
username=root
password=myPasspwrod

1. Utilice PreparedStatement para realizar la función de registro de usuarios.

1.1agregar parte del código Servlet

@WebServlet("/addServlet")
public class addServlet extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        request.setCharacterEncoding("UTF-8");
        response.setContentType("test/html;charset=UTF-8");

        Connection conn=null ;
        ResultSet rs=null ;
        PreparedStatement ps=null ;
        PrintWriter writer = response.getWriter();
        //获取登录页面提交的数据
        String loginName = request.getParameter("userName");
        String loginPassword = request.getParameter("password");
        String sex = request.getParameter("sex");
        //sql语句
        String addSql= "insert into tb_user(username, password,gender) values (?,?,?)";
       // String loginSql = "select * from tb_user where username =? and password=?";
        try {
    
    
            //获取与数据库的链接
            conn = jdbcUtils.getConnaction();
            ps = conn.prepareStatement(addSql);
            ps.setString(1, loginName);
            ps.setString(2, loginPassword);
            ps.setString(3, sex);
            int i = ps.executeUpdate();
            if(i!=0){
    
    
                writer.write("注册成功");
            }else {
    
    
                writer.write("注册失败");
            }

            writer.flush();
            writer.close();
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }finally {
    
    
            jdbcUtils.release(conn,ps,rs);
        }
    }


    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doGet(request, response);
    }

1.2 parte del código add.html

Insertar descripción de la imagen aquí

1.3 código jdbcUtils

public class jdbcUtils {
    
    
    private static String driver=null;
    private static String url=null;
    private static String username=null;
    private static String password=null;

    static {
    
    
        try{
    
    
            InputStream in = jdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties = new Properties();
            properties.load(in);

            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");

            //驱动只用加载一次
            Class.forName(driver);

        } catch (Exception e) {
    
    
            throw new RuntimeException(e);
        }
    }
    public static Connection getConnaction() throws SQLException {
    
    
       return  DriverManager.getConnection(url,username,password);
    }

    public static void release(Connection conn, PreparedStatement stat, ResultSet rs)  {
    
    
        if(rs!=null){
    
    
            try{
    
    
                rs.close();
            } catch (SQLException e) {
    
    
                e.printStackTrace();
            }
        }
        if(stat!=null){
    
    
            try{
    
    
                stat.close();
            } catch (SQLException e) {
    
    
                e.printStackTrace();
            }
        }
        if(conn!=null){
    
    
            try{
    
    
                conn.close();
            } catch (SQLException e) {
    
    
                e.printStackTrace();
            }
        }
    }
}

1.4tb_tabla de usuario

Insertar descripción de la imagen aquí

1.5 Parte de prueba

Ingrese el nombre lxlxllx en la página add.html, la contraseña es 123 y el género es femenino. Después del envío, se le indicará que el registro se realizó correctamente.

Insertar descripción de la imagen aquí

Abra la tabla tb_user y descubra que la información de registro está almacenada y que la prueba fue exitosa.

Insertar descripción de la imagen aquí

2. Utilice la fuente de datos c3p0 para implementar la función de inicio de sesión del usuario

2.1código de inicio de sesión de declaración preparada

@WebServlet("/preparedStatementDemo")
public class preparedStatementlogin extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    
    

        request.setCharacterEncoding("UTF-8");
        response.setContentType("test/html;charset=UTF-8");

        Connection conn=null ;
        ResultSet rs=null ;
        PreparedStatement ps=null ;
        //获取登录页面提交的数据
        String loginName = request.getParameter("userName");
        String loginPassword = request.getParameter("password");
        String remember = request.getParameter("remember");
        //sql语句
        String loginSql = "select * from tb_user where username =? and password=?";
        try {
    
    
            //获取与数据库的链接
            conn = c3p0Utils.getDataSource().getConnection();
            ps = conn.prepareStatement(loginSql);
            ps.setString(1, loginName);
            ps.setString(2, loginPassword);
            rs = ps.executeQuery();

            HttpSession session = request.getSession();
            String contextPath = request.getContextPath();
            if (rs.next()) {
    
    
                if("1".equals(remember)) {
    
    
                    session.setAttribute("password", loginPassword);
                    session.setAttribute("userName", loginName);
                }
                response.sendRedirect(contextPath+"/welcome.html");
            } else {
    
    
                response.sendRedirect(contextPath+"/loginPrepared.jsp");

            }
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }finally {
    
    
            jdbcUtils.release(conn,ps,rs);
        }
    }

2.2Código loginPrepared.jsp

Insertar descripción de la imagen aquí

El código 2.3jdbcUtils es el mismo que 1.3, abreviado

### 2.4c3p0Utils代码
public class c3p0Utils {
    
    
    private static String driver=null;
    private static String url=null;
    private static String username=null;
    private static String password=null;
    public static DataSource ds = null;
    // 初始化C3P0数据库连接池
    static {
    
    
        ComboPooledDataSource cpds = new ComboPooledDataSource();
        // 设置连接数据库需要的配置信息
        try {
    
    

            InputStream in = jdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties = new Properties();
            properties.load(in);

            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");

            cpds.setDriverClass(driver);
            cpds.setJdbcUrl(url);
            cpds.setUser(username);
            cpds.setPassword(password);

            //设置连接池的参数
            cpds.setInitialPoolSize(5);
            cpds.setMaxPoolSize(15);
            ds = cpds;

        } catch (Exception e) {
    
    
            throw new ExceptionInInitializerError(e);
        }
    }
    public static DataSource getDataSource() throws SQLException {
    
    
        return  ds;
    }

    public static void release(Connection conn, PreparedStatement stat, ResultSet rs)  {
    
    
        if(rs!=null){
    
    
            try{
    
    
                rs.close();
            } catch (SQLException e) {
    
    
                e.printStackTrace();
            }
        }
        if(stat!=null){
    
    
            try{
    
    
                stat.close();
            } catch (SQLException e) {
    
    
                e.printStackTrace();
            }
        }
        if(conn!=null){
    
    
            try{
    
    
                conn.close();
            } catch (SQLException e) {
    
    
                e.printStackTrace();
            }
        }
    }
}

2.5tb_información de usuario

Insertar descripción de la imagen aquí

2.6 Pruebas

Ingrese su nombre Xiaoxia en la página de inicio de sesión y contraseña 1237

Insertar descripción de la imagen aquí

Después del envío, vaya a la página bienvenido.html
Insertar descripción de la imagen aquí

Vuelva a cargar la página si se ingresa información incorrecta, como por ejemplo:
Insertar descripción de la imagen aquí

Después de la presentación

Insertar descripción de la imagen aquí

¡Éxito de la prueba!

3. Utilice c3p0+DBUtiles para implementar la función de cierre de sesión del usuario

3.1 eliminar código de servlet

@WebServlet("/deleteServlet")
public class deleteServlet extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        request.setCharacterEncoding("UTF-8");
        response.setContentType("test/html;charset=UTF-8");

        String userName = request.getParameter("userName");
        String password = request.getParameter("password");

        Connection conn=null ;

        try {
    
    
            PrintWriter writer = response.getWriter();

            QueryRunner queryRunner = new QueryRunner();
            String deleteSql="delete from tb_user where username= ? and password= ?" ;
            Object [] params = new Object[]{
    
    userName, password};
            conn=c3p0Utils.getDataSource().getConnection();
            int i = queryRunner.update(conn, deleteSql, params);
            if(i>0){
    
    
                writer.write("用户注销成功");
            }else{
    
    
                writer.write("用户注销失败");
            }

            writer.flush();
            writer.close();
        } catch (SQLException e) {
    
    
            throw new RuntimeException(e);
        }finally {
    
    
            jdbcUtils.release(conn, null, null);
        }
    }


    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doGet(request, response);
    }
}

3.2eliminar código.html

Insertar descripción de la imagen aquí

El código 3.3c3p0Utils es el mismo que 2.4, abreviado

3.4tb_tabla de usuarios

Insertar descripción de la imagen aquí

3.5 Pruebas

Insertar descripción de la imagen aquí

El objetivo es eliminar el usuario cuya identificación es 169 en la imagen de arriba, ingrese el nombre flor en eliminar.html y la contraseña es 576.

Insertar descripción de la imagen aquí

La página se muestra después del envío.
Insertar descripción de la imagen aquí

Verifique la tabla tb_user y los datos se han eliminado correctamente.

Insertar descripción de la imagen aquí

4. Utilice c3p0 + PreparedStatement para realizar la función de modificación de contraseña del usuario.

4.1actualizar código de servlet

@WebServlet("/preparedStatementDemo")
public class preparedStatementlogin extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    
    

        request.setCharacterEncoding("UTF-8");
        response.setContentType("test/html;charset=UTF-8");

        Connection conn=null ;
        ResultSet rs=null ;
        PreparedStatement ps=null ;
        //获取登录页面提交的数据
        String loginName = request.getParameter("userName");
        String loginPassword = request.getParameter("password");
        String remember = request.getParameter("remember");
        //sql语句
        String loginSql = "select * from tb_user where username =? and password=?";
        try {
    
    
            //获取与数据库的链接
            conn = c3p0Utils.getDataSource().getConnection();
            ps = conn.prepareStatement(loginSql);
            ps.setString(1, loginName);
            ps.setString(2, loginPassword);
            rs = ps.executeQuery();

            HttpSession session = request.getSession();
            String contextPath = request.getContextPath();
            if (rs.next()) {
    
    
                if("1".equals(remember)) {
    
    
                    session.setAttribute("password", loginPassword);
                    session.setAttribute("userName", loginName);
                }
                response.sendRedirect(contextPath+"/welcome.html");
            } else {
    
    
                response.sendRedirect(contextPath+"/loginPrepared.jsp");

            }
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }finally {
    
    
            jdbcUtils.release(conn,ps,rs);
        }
    }


    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doGet(request, response);
    }
}

4.2actualizar código.html

Insertar descripción de la imagen aquí

4.3 tabla tb_user

Insertar descripción de la imagen aquí

El código 4.4 c3p0Utils es el mismo que 2.4, abreviado

4.5 Prueba

Ingrese el nombre Xiaoxia y la contraseña 1223456 en la página update.html

Insertar descripción de la imagen aquí

Enviar consejos

Insertar descripción de la imagen aquí

Verifique la tabla tb_user y la contraseña se cambió correctamente.

Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_71106830/article/details/130669466
Recomendado
Clasificación