在我用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));