java数据源 定义为静态_Java Web学习笔记(一)

数据库相关(关于数据库连接的方法应该定义为静态方法):

加载驱动:

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杂项

//引入其他jsp页面

//使用taglib插件

//导入项目的jar包直接拖入WEB-INF的lib目录下即可使用

Get请求传入的中文传入数据库模糊查询无效的问题:

servlet中使用get请求获取了中文字符串的值,但在数据库中使用like模糊查询时找不到结果,英文则可以

在客户端直接用sql查询结果正常,则是在服务端出现了问题

根据百度到的信息,在连接字符串中加入了setUnicode=true&characterEncoding=UTF-8,未果

项目的编码设置和数据库中的编码设置都是utf-8

最终确认是tomcat的问题,在tomcat的conf文件夹下的conf中找到server.xml文件

添加URIEncoding参数

connectionTimeout=“20000”

redirectPort=“8443” URIEncoding=“UTF-8”/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值