-
超市订单管理系统(2)-准备工作阶段结束
续上(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 = 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目录同级别,至此准备工作完毕
静态资源链接
链接:https://pan.baidu.com/s/1IDz2EPuBlmYD7lsk5G1yWA
提取码:9999
第一阶段项目结构目录
来源:https://www.cnblogs.com/XiaoMaGuai/p/15413488.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数