sql语句连接中文变量

String bm_name=new String(bmname.getBytes("iso-8859-1"), "gbk");

System.out.print(bm_name);

String sqlyj="SELECT yg_name,yg_id FROM yg ,bm where bm.bm_name="+"'"+bm_name+"'"+"and bm.bm_id=yg.bm_id ";

为什么 System.out.print(bm_name);能打印出来

执行下面sql语句时没反应呢

如果直接给bm_name赋值比如bm_name="开发部"就可查询出来 这是为什么啊
应该怎么改

执行那条SQL语句没反应还是没结果啊?打印出那条SQL语句后直接在数据库中执行看看

把你的操作数据库部分发上来看看。连接数据库、select阿

debug进去到哪步不执行?有报错吗?

你写错了,少了空格

修改下
[code="java"]
String sqlyj="SELECT yg_name,yg_id FROM yg ,bm where bm.bm_name="+"'"+bm_name+"'"+" and bm.bm_id=yg.bm_id ";

[/code]

原因在于编码问题,在于这条语句上面。
[code="java"]String bm_name=new String(bmname.getBytes("iso-8859-1"), "gbk"); [/code]
解释一下这条语句到底是什么意思?[quote]
// 首先使用ISO-8859-1字符集将bmname解码为字节序列并将结果存储新的字节数组中。
// 然后使用gbk字符集解码指定的字节数组,最后bm_name编码为gbk。[/quote]

所以一般来讲,这段代码说明ISO-8859-1就是你的java文件编码格式
[quote]查看java文件格式:在MyEclipse或Eclipse下,右键properties-->resources-->(右边)text-file-encoding,即可[/quote]

然后,bm_name是gbk编码格式,而你是用这个bm_name去查询数据库的,所以你的数据库编码格式必须是gbk。如果bm_name编码格式和数据库的编码格式不正确,将出现你描述的情况
[quote]执行下面sql语句时没反应呢
[/quote]
最后,当你写如下这句话去查询
[code="java"]bm_name="开发部";//就可查询出来[/code]
说明你的数据库和你的Java文件编码格式是一致的。

补充一点:
查看数据编码格式方法:在mysql命令行输入:
[code="cmd"]show variables like 'character_set_%';
show variables like 'collation_%';[/code]

你可以:
1 打开mysql的sql语句执行日志 (打开后你每条执行的sql语句都会在日志里打出来)

2 运行刚才的运行,看日志里打出的语句,再拷贝到数据库里执行,就可以发现问题了

我估计多半是你要查询的表采用的不是GBK的编码方式。

要确保你的页面提交的中文和后台接收的参数,以及存入数据库的信息他们的编码方式应该是一致的,中间环节不能有任何改变,当然了,取出数据也要遵循这个。。。