jfinal find sql查询不到中文条件

List<Bo_vod_net_video> infor=Bo_vod_net_video.dao.find("select * from bo_vod_net_video where title="+"\""+title+"\"");

查询英文条件可以查到,但是查询中文条件就查不到了


评论区

码字民工

2017-04-25 11:10

中文获取参数乱码了,推荐个方法给你 直接从request中获取中文参数
/**
* 获取QueryString的参数,并使用URLDecoder以UTF-8格式转码。如果请求是以post方法提交的,
* 那么将通过HttpServletRequest#getParameter获取。
*
* @param request
* web请求
* @param name
* 参数名称
* @return
*/
public static String getQueryParam(HttpServletRequest request, String name) {
if (StringUtils.isBlank(name)) {
return null;
}
if (request.getMethod().equalsIgnoreCase(POST)) {
return request.getParameter(name);
}
String s = request.getQueryString();
if (StringUtils.isBlank(s)) {
return null;
}
try {
s = URLDecoder.decode(s, UTF8);
} catch (UnsupportedEncodingException e) {
log.error("encoding " + UTF8 + " not support?", e);
}
String[] values = parseQueryString(s).get(name);
if (values != null && values.length > 0) {
return values[values.length - 1];
} else {
return null;
}
}

JFinal

2017-04-25 11:31

一是注意字符集的问题,二是查询的时候不要将参数拼接在 sql 中,这样用就好:
find("select * from bo_vod_net_video where title = ? ", title);

libofei

2017-11-26 23:53

@JFinal 我也遇到了这个问题,数据库是utf8的,在mysql里直接写sql有中文可以查到,但如果把中文写在程序里就查不到

JFinal

2017-11-27 18:12

@libofei 写在程序里,先确保你的项目设置为了 utf8, java 文件本身也是有字符集的

libofei

2017-11-29 21:19

@JFinal 是的,设置了,文件编码都是utf8

libofei

2017-11-29 21:49

@JFinal JFinal的数据库设置有能设字符集的接口吗

JFinal

2017-11-29 22:09

@libofei 在首页右侧下载 jfinal demo,里面有一个配置文件,配置了 jdbcUrl,在这个 jdbcUrl 中就可以配置字符集

libofei

2017-11-30 14:29

@JFinal 发现了,多谢

大爷暗夜

2018-02-24 13:35

@JFinal 詹总,请问一下,为啥find(sql, arg)这样用查询的list数据为空,sql: select * from sys_function where parent=? and del=? and id in(?) order by sort,在数据库里是查询出数据的,是不是这个find(String sql,Object... arg)方法存在bug呀

JFinal

2018-02-24 13:50

@大爷暗夜 in(?) 这部分注意,有多少个参数,就要有多少个问号,例如,有1 2 3 这三个参数的情况: in ( ?, ? , ?)

大爷暗夜

2018-02-24 13:53

@JFinal 谢谢詹总,我改一下

大爷暗夜

2018-02-24 14:05

@JFinal 那如果in(?)里的参数是一个字符串"1,3,4,5"还是查询不出来

JFinal

2018-02-24 14:06

@大爷暗夜 jfinal 在底层就是直接将你的 sql 与参数直接转调一下 JDBC 的 API,只要是 JDBC 支持一定就可以

单步调试进入底层,看参数是什么

或者打开一下 arp.setShowSql(true) 输出一下 sql

大爷暗夜

2018-02-24 14:13

@JFinal 谢谢,我找到问题了,是in(?)里的参数是一个"1,2,3,4,5"这样的字符串

大爷暗夜

2018-02-24 15:59

@JFinal 詹总,还想请教一个问题,比如:
public class Sys_Function extends Model{
/**
*
*/
private static final long serialVersionUID = 1L;
public static final Sys_Function dao = new Sys_Function();
public Sys_Function() {
tableName = "sys_function";
}
private List children = new ArrayList();
public List getChildren() {
return children;
}

public void setChildren(List children) {
this.children = children;
}
};

在Controller 控制器
List menu= 数据库查询出来的数据,也赋值children了
setAttr("menu", menu);
我想在jsp页面通过el获取children,${menu}可以获取值,但是${menu[0]["children"]}值却为空,要怎么解决

热门反馈

扫码入社