续上(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