在我用Delphi写的一个程序里中文like '%中文%' 始终不行,不是出来的符合条件的数据,而是所有的数据,在Firebird.net.cn中也有人提到这个问题,说FB对中文支持的不好。我的同事用.net实现了完美无缺的中文like.今天我用Java也是现了中文like,很正常,没有问题。细想起来,可能是Delphi的驱动有问题,不是驱动本身有问题,就是在驱动打开数据库时要指定编码集,也可能是我在传递数据是的字符串格式有问题。既然不是Firebird的问题就好办了。
测试代码如下:
package jfb;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.*;
// import org.firebirdsql.jdbc.*;
public class JFb
{
/**
* @param args
*/
public static void main( String[] args ) throws ClassNotFoundException,
SQLException, IOException
{
// TODO 自动生成方法存根
Class.forName( "org.firebirdsql.jdbc.FBDriver" );
Connection conn = DriverManager
.getConnection(
"jdbc:firebirdsql:127.0.0.1/3050:d://FB_TEST.FDB?lc_ctype=UNICODE_FSS",
"sysdba", "masterkey" );
int select;
BufferedReader cin = new BufferedReader( new InputStreamReader(
System.in ) );
Statement cmd = conn.createStatement();
String param = null;
do {
System.out.println( "0: exit" );
System.out.println( "1: insert" );
System.out.println( "2: select all" );
System.out.println( "3: select like" );
param = cin.readLine();
select = Integer.parseInt( param );
switch ( select ) {
case 0 :
System.out.println( "System Exit" );
break;
case 1 :
System.out.println( "请输入要插入的数据:" );
param = cin.readLine();
param = "insert into aa(BB)values ('" + param
+ "')";
System.out.println( param );
if ( cmd.executeUpdate( param ) != 0 ) {
System.out.println( "执行成功" );
} else {
System.out.println( "执行失败" );
}
break;
case 2 :
System.out.println( "输出所有数据:" );
ResultSet rs = cmd
.executeQuery( "select * from aa" );
while ( rs.next() ) {
System.out
.println( rs
.getString( "bb" ) );
}
break;
case 3 :
System.out.println( "请输入要查询的数据:" );
param = cin.readLine();
param = "select * from aa where bb like '%"
+ param.trim() + "%'";
System.out.println( param );
ResultSet rsa = cmd.executeQuery( param );
while ( rsa.next() ) {
System.out.println( rsa
.getString( "bb" ) );
}
}
System.out.println( "=============================" );
} while ( select != 0 );
conn.close();
}
}
建库语句:
create database 'd:/fb_test.fdb' default character set utf8;
create table aa( bb varchar(255));