数据库相关(关于数据库连接的方法应该定义为静态方法):
加载驱动:
static { // 加载驱动 try { Class.forName("com.mysql.cj.jdbc.Driver"); //MySQL8更换了新的驱动包名 } catch (ClassNotFoundException e) { e.printStackTrace(); } }
获取驱动连接:
public static Connection getConn() { Connection conn = null; try { conn = DriverManager .getConnection( "jdbc:mysql://localhost:3306/eshop?setUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC", "root", "123456");//MySQL8需要添加useSSL和serverTimezone参数 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; }
关闭数据库连接:
public static void closeall(ResultSet rs, PreparedStatement ps, Connection conn) { try { //关闭结果集 if (rs != null) { rs.close(); } //关闭预处理语句 if (ps != null) { ps.close(); } //关闭数据库连接 if (conn != null) { conn.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
执行有副作用的SQL语句:
//定义语句public static int insert(ESHOP_USER user) { String sql = "insert into eshop_user values(?,?,?,?,DATE_FORMAT(?,'%Y-%m-%d'),?,?,?,?,?)"; //?为占位符 DATE_FORMAT函数可以格式化时间字符串为datetime格式 Object[] params = { user.getUSER_ID(), user.getUSER_NAME(), user.getUSER_PASSWORD(), user.getUSER_SEX(), user.getUSER_BIRTHDAY(), user.getUSER_IDENITY_CODE(), user.getUSER_EMAIL(), user.getUSER_MOBILE(), user.getUSER_ADDRESS(), user.getUSER_STATUS() }; return exec(sql, params); }//执行语句//不直接执行SQL语句来防止SQL注入public static int exec(String sql, Object[] params) { int count = 0;//计数影响的条目 Connection conn = Basedao.getConn(); //获取SQL连接 PreparedStatement ps = null; //定义SQL预处理语句 try { ps = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) { ps.setObject(i + 1, params[i]); } count = ps.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ closeall(null, ps, conn); //CU类语句不存在结果集,故传递null } return count; //返回受影响的条目数量 }
对预处理语句和结果集的常用操作函数:
ps.setObject(index,object)//将对象插入预处理语句的占位符中,下标是sql语句中占位符的序号,从1开始ps.setString(index,String)rs = ps.executeQuery(); //处理预处理语句,并保存结果集rs.getString("statement")//从结果集中读取相应标签的字符串类型数据
SQL常用语句的写法:
"select * from eshop_user limit 4"//从第1行数据开始检索,检索4条。检索的id为1-4(如果id从1开始)"select * from eshop_user limit 2,4"//从第2行数据开始检索,检索4条。检索的id为2-5(如果id从1开始)"select m.*, DATE_FORMAT(m.user_birthday,'%Y-%m-%d')birthday from ESHOP_USER m where USER_ID = ?";//将表名的别名取为m,再使用DATE_FORMAT函数格式化字符串,并取别名birthday,注意别名和函数不能有空格
servlet相关:
request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=utf-8");//在向数据库写入字段时,应该在servlet内加上这两句确保编码正确String statement = request.getParameter("Statemant") //通过标签获取前端传递过来的值response.sendRedirect("url") //重定向页面PrintWriter out = response.getWriter();out.write(""); //创建输出流并打印文本格式的数据,通常用来打印js代码request.setAttribute("user", user); //在请求域添加参数,便于转发request.getRequestDispatcher("url").forward(request, response); //转发,可以保留刚刚添加的参数
el表达式:
//可以在jsp前端使用java代码,获取后端传递过来的信息${statement}
jsp杂项
<%@ include file="xxx"%>//引入其他jsp页面<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>//使用taglib插件//导入项目的jar包直接拖入WEB-INF的lib目录下即可使用
Get请求传入的中文传入数据库模糊查询无效的问题:
servlet中使用get请求获取了中文字符串的值,但在数据库中使用like模糊查询时找不到结果,英文则可以
在客户端直接用sql查询结果正常,则是在服务端出现了问题
根据百度到的信息,在连接字符串中加入了setUnicode=true&characterEncoding=UTF-8
,未果
项目的编码设置和数据库中的编码设置都是utf-8
最终确认是tomcat的问题,在tomcat的conf文件夹下的conf中找到server.添加URIEncoding参数
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEncoding="UTF-8"/>
原文转载:http://www.shaoqun.com/a/504075.html
雨果:https://www.ikjzd.com/w/1307
bol:https://www.ikjzd.com/w/291
数据库相关(关于数据库连接的方法应该定义为静态方法):加载驱动:static{ //加载驱动 try{ Class.forName("com.mysql.cj.jdbc.Driver");//MySQL8更换了新的驱动包名 }catch(ClassNotFoundExceptione){ e.printStackTrace(); } }获取驱动连接:public
笨鸟:笨鸟
海淘贝:海淘贝
文旅部发布安全提醒:近期中国游客切勿前往美国旅游:文旅部发布安全提醒:近期中国游客切勿前往美国旅游
去峨眉山旅游要多少钱? :去峨眉山旅游要多少钱?
【花费】去香港旅游要多少钱,香港旅游大概花多少钱:【花费】去香港旅游要多少钱,香港旅游大概花多少钱
No comments:
Post a Comment