Java实测FireBird的中文检索

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章