超市订单管理系统(2)-准备工做阶段结束

2021年11月20日 阅读数:2
这篇文章主要向大家介绍超市订单管理系统(2)-准备工做阶段结束,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

续上(1)了java

1.编写公共基础类mysql

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

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)编写数据库的公共类,包括数据库链接信息的获取,数据库链接,公共的查询方法,公共的增删改方法sql

复制代码
  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 = 0; 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目录同级别,至此准备工做完毕app

静态资源连接webapp

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

第一阶段项目结构目录编码