public List queryByNiC2(String nickName){
List list=new ArrayList();
try {
conn=DbManager.getConn();
String sql="select * from snsuserinfo where nickName like "+"'%"+nickName+"%'";
ps=conn.prepareStatement(sql);
System.out.println(sql);
rs=ps.executeQuery();
System.out.println(rs.getRow()+"rs的长度");
while(rs.next()){
SNSUserInfo sns=new SNSUserInfo();
sns.setId(rs.getInt("id"));
sns.setOpenId(rs.getString("openId"));
sns.setNickName(rs.getString("nickName"));
sns.setCity(rs.getString("city"));
sns.setHeadImgUrl(rs.getString("headImgUrl"));
sns.setSex(rs.getInt("sex"));
sns.setAttentionTime(rs.getString("attentionTime"));
sns.setAuthNum(rs.getInt("authNum"));
list.add(sns);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
你在mysql中查询有结果吗?
select * from snsuserinfo where nickName like "%王五%";
这跟数据库有关,如果是像MySQL,d like '%date%'是能完成模糊查询的功能,但像oracle的数据库,这样的语句就未必能完成,不过你可以试着to_char函数来实现类似的功 能:to_char(date, 'yyyy-MM-dd') like '2010-07-06',也可以通过to_date函数来实现搜索: date like to_date('2010-7-6','yyyy-MM-dd')
mysql字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和连接级
你查下你各级别字符集跟校对规则,修改成你需要的字符集及校对规则就可以了。
参考自:
MySQL的字符集和校对 http://www.data.5helpyou.com/article332.html
拼接SQL会有SQL注入问题
模糊查询这样写试一下
conn=DbManager.getConn();
String sql="select * from snsuserinfo where nickName like "+"'%"+nickName+"%'";
ps=conn.prepareStatement(sql);
改成
conn=DbManager.getConn();
String sql="select * from snsuserinfo where nickName like ?";
ps=conn.prepareStatement(sql);
ps.setString(1, "'%"+nickName+"%'");
可以看下这篇文章 http://58coding.com/article/detail/24615460515348831
MySQL修改成UTF8字符集试试看
这个我曾经遇到过..你这个情况是不是 nickName 不是中文就可以查到????如果是的话那就是mysql的问题,我们当时是重新装了个mysql就解决了,当然,如果你不想重新装mysql的话,你这sql可以转下16进制,
附代码
public static String str2HexStr(String str) throws UnsupportedEncodingException {
if (str==null) {
return "";
}
char[] chars = "0123456789ABCDEF".toCharArray();
StringBuilder sb = new StringBuilder("");
byte[] bs = str.getBytes("utf-8");
int bit;
for (int i = 0; i < bs.length; i++) {
bit = (bs[i] & 0x0f0) >> 4;
sb.append(chars[bit]);
bit = bs[i] & 0x0f;
sb.append(chars[bit]);
}
return sb.toString().trim();
}
在java中调用
String sql="select * from snsuserinfo where HEX(nickName) like "+"'%"+str2HexStr(nickName)+"%'";
这样就可以查出来了.
可以的话采纳下.不明白可以追问.
建议排查方法 :
1、将后面的like什么都去掉,直接select * 看查询出来的中文是否OK
2、如果OK就把参数nickName转为UTF-8试试,看是否OK 。 new String(nickName.getBytes(),"utf-8");
3、如果第二步不OK就直接把SQL拿到cmd或者客户端进行查询
"jdbc:mysql://"
+ uri
+ ":"
+ port
+ "/"
+ dbName
+ "?useSSL=true&useOldAliasMetadataBehavior=true&useUnicode=true&characterEncoding=utf8";
连接的时候要带上字符编码相关参数