续上(1)了

1.编写公共基础类

  (1)编写数据库配置文件db.properties,只要连接的是MySQL数据库driver是固定的,url中的127.0.0.1是本地IP,也可以用localhost替换,3306是MySQL默认端口号,smbms是我们前面创建的数据库,问号后面是设置utf8编码,解决乱码问题的

1 driver=com.mysql.jdbc.Driver
2 url=jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&&characterEncoding=utf-8
3 username=root
4 password=123456

  (2)编写数据库的公共类,包括数据库连接信息的获取,数据库连接,公共的查询方法,公共的增删改方法

复制代码
  1 package com.xiaoma.dao;
  2 
  3 import java.io.IOException;
  4 import java.io.InputStream;
  5 import java.sql.*;
  6 import java.util.Properties;
  7 
  8 //用来操作数据库的基类(公共类)
  9 public class BaseDao {
 10     private static String url;
 11     private static String username;
 12     private static String password;
 13 
 14     //静态代码块,类启动的时候就会加载
 15     static {
 16         //通过类名.class就获取了该类的反射对象,就可以通过类加载器去读取资源,然后通过getResourceAsStream将一个资源变成流
 17         //说白了就是让这个类可以读取到db.properties这个文件
 18         InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");
 19 
 20         //有了这个流后,就可以通过properti对象将文件里的具体内容搞出来
 21         Properties properties=new Properties();
 22         try {
 23             properties.load(is);
 24         } catch (IOException e) {
 25             e.printStackTrace();
 26         }
 27 
 28         //使用实例化后的properties对象获取内容
 29         url=properties.getProperty("url");
 30         username=properties.getProperty("username");
 31         password=properties.getProperty("password");
 32     }
 33 
 34     //获取数据库连接
 35     public static Connection getConnection() throws Exception {
 36         Connection connection=null;
 37         //注册驱动(因为我的环境版本问题,没法用那个forname,这里就用这一行代码去替代,同样的效果)
 38         com.mysql.jdbc.Driver driver=new com.mysql.jdbc.Driver();
 39         //获取数据库连接对象
 40         connection= DriverManager.getConnection(url,username,password);
 41         //将连接对象返回
 42         return connection;
 43     }
 44 
 45     //编写查询公共方法
 46     //因为我们不晓得sql有多少个参数,是啥类型嘞,所以弄一个Object类型的数组来暂存这个参数,然后通过循环去遍历
 47     public static ResultSet execute(Connection connection,String sql,Object[] params,ResultSet resultSet,PreparedStatement preparedStatement) throws Exception {
 48         //通过preparedStatement预编译一个sql语句
 49         connection.prepareStatement(sql);
 50 
 51         //遍历参数
 52         for (int i = 1; i < params.length; i++) {
 53             preparedStatement.setObject(i+1,params[i]);
 54         }
 55 
 56         //执行sql
 57         resultSet = preparedStatement.executeQuery();
 58 
 59         //返回数据
 60         return resultSet;
 61     }
 62 
 63     //编写增删改公共方法(与查询类似)
 64     public static int execute(Connection connection,String sql,Object[] params,PreparedStatement preparedStatement) throws Exception {
 65         //通过preparedStatement预编译一个sql语句
 66         connection.prepareStatement(sql);
 67 
 68         //遍历参数
 69         for (int i = 1; i < params.length; i++) {
 70             preparedStatement.setObject(i+1,params[i]);
 71         }
 72 
 73         //执行sql
 74         int updataRows = preparedStatement.executeUpdate();
 75 
 76         //返回数据
 77         return updataRows;
 78     }
 79 
 80     //释放资源
 81     public static boolean closeResourses(Connection connection,ResultSet resultSet,PreparedStatement preparedStatement){
 82         boolean flag=true;
 83         if (connection != null) {
 84             try{
 85                 connection.close();
 86                 //如果关闭完成后还有资源存在,就让GC回收
 87                 resultSet=null;
 88             }catch (Exception e){
 89                 e.printStackTrace();
 90                 //如果关闭出现了错误,就让flag=false
 91                 flag=false;
 92             }
 93         }
 94         if (resultSet != null) {
 95             try{
 96                 resultSet.close();
 97                 //如果关闭完成后还有资源存在,就让GC回收
 98                 resultSet=null;
 99             }catch (Exception e){
100                 e.printStackTrace();
101                 //如果关闭出现了错误,就让flag=false
102                 flag=false;
103             }
104         }
105         if (preparedStatement != null) {
106             try{
107                 preparedStatement.close();
108                 //如果关闭完成后还有资源存在,就让GC回收
109                 resultSet=null;
110             }catch (Exception e){
111                 e.printStackTrace();
112                 //如果关闭出现了错误,就让flag=false
113                 flag=false;
114             }
115         }
116         return flag;
117     }
118 }
复制代码

2.编写字符编码过滤器

复制代码
 1 package com.xiaoma.filter;
 2 
 3 import javax.servlet.*;
 4 import java.io.IOException;
 5 
 6 public class CharacterEncodingFilter implements Filter {
 7     @Override
 8     public void init(FilterConfig filterConfig) throws ServletException {
 9 
10     }
11 
12     @Override
13     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
14         servletRequest.setCharacterEncoding("utf-8");
15         servletResponse.setCharacterEncoding("utf-8");
16 
17         filterChain.doFilter(servletRequest,servletResponse);
18     }
19 
20     @Override
21     public void destroy() {
22 
23     }
24 }
复制代码

3.在web.xml文件内注册过滤器

复制代码
1     <!--注册字符编码过滤器-->
2     <filter>
3         <filter-name>CharacterEncodingFilter</filter-name>
4         <filter-class>com.xiaoma.filter.CharacterEncodingFilter</filter-class>
5     </filter>
6     <filter-mapping>
7         <filter-name>CharacterEncodingFilter</filter-name>
8         <url-pattern>/*</url-pattern>
9     </filter-mapping>
复制代码

4.将静态资源导入到项目的webapp目录下,与WEB-INF目录同级别,至此准备工作完毕

静态资源链接

链接:https://pan.baidu.com/s/1IDz2EPuBlmYD7lsk5G1yWA
提取码:9999

第一阶段项目结构目录

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/XiaoMaGuai/p/15413488.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!