Sqlite China  
首页 | 各种语言的sqlite编程 | sqlite研究 |sqlite应用实例与杂谈 | sqlite相关下载 | SQlite论坛
当前位置 : 主页>sqlite研究>列表
让Sqlite3以GB2312编码存储汉字
来源:工友 作者:工友 时间:2007-12-21
Sqlite3内部采 用UTF8存储,但是为转成GB2312就必须调用编码函数,太麻烦了,于是今天琢磨出一种让sqlite3内部存储汉字采用GB2312的方法,将字段 设为BLOB,然后保存汉字的GB2312编码的字节数组就OK了。但是把词库的所有字段从TEXT转换成BLOB,结果查询时用where word = ’hello’竟然无法查询出结果,随手改成where word like ’hello’竟然可以,估计是BLOB无法用"="查询。 

using System;
using System.Text;
using System.Data;
using Finisar.SQLite;

namespace SqliteConvert
{
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class Class1
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            //
            // TODO: 在此处添加代码以启动应用程序
            //

            
            //打开以前的库
            SQLiteConnection sqliteConn = new SQLiteConnection(@"Data Source=d:projectDrEye.db;New=False;Compress=True;Version=3;"); 
            sqliteConn.Open();
            SQLiteDataAdapter sqliteDa = new SQLiteDataAdapter("select * from DrEye",sqliteConn);
            DataSet sqliteDs = new DataSet();
            sqliteDa.Fill(sqliteDs);


            //创建新库
            SQLiteConnection sqliteConnNew = new SQLiteConnection(@"Data Source=d:projectDrEye.new1.db;New=True;Compress=True;Version=3"); 
            sqliteConnNew.Open();
            
            //建表
            SQLiteCommand sqliteCmdNew = sqliteConnNew.CreateCommand();
            sqliteCmdNew.CommandText = "CREATE table DrEye (word TEXT Primary Key,explanation BLOB,InflectedForm BLOB)"
            sqliteCmdNew.ExecuteNonQuery();

            //插入数据
            SQLiteDataAdapter sqliteDaNew = new SQLiteDataAdapter("select * from DrEye", sqliteConnNew);
            SQLiteCommandBuilder sqliteCbNew = new SQLiteCommandBuilder(sqliteDaNew);
            
            DataSet sqliteDsNew = new DataSet();
            sqliteDaNew.Fill(sqliteDsNew);

            Console.WriteLine(sqliteDs.Tables[0].Rows.Count);
            Console.WriteLine(sqliteDsNew.Tables[0].Rows.Count);
                        
            foreach(DataRow dr in sqliteDs.Tables[0].Rows)
            {
            
                
                DataRow sqliteDrNew = sqliteDsNew.Tables[0].NewRow();
                sqliteDrNew[0= dr[0];
                sqliteDrNew[1= EncodingConvert(dr[1].ToString());
                if (dr[2].ToString() != "")
                {
                    sqliteDrNew[2= EncodingConvert(dr[2].ToString());
                }
                sqliteDsNew.Tables[0].Rows.Add(sqliteDrNew);
                break;
            }
            sqliteDaNew.Update(sqliteDsNew);


            Console.WriteLine("Game over!");
            Console.ReadLine();
        }

        //将字符串转换成字节
        static byte[] EncodingConvert(string utf8String)
        {
                    
            byte[] ansiCode;
            ansiCode = Encoding.Default.GetBytes(utf8String);
            return ansiCode;
        }
    }
}
(阅读次数:
上一篇:PHP5中的 sqlite_create_function 下一篇:SQLITE3 使用总结(1)
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
§最新评论
热点文章
·SQLite数据库的体系结构
·SQLite与其他数据库的速度
·SQL 语言参考资料
·SQLite语法备忘录
·sqlite 的相关调查1
·嵌入式数据库SQLite的一份
·SQLite在嵌入式Web服务器
·点评主流开源数据库的技术
·基于ARM-Linux的SQLite嵌
·SQLite与其他数据库的速度
·SQLite数据库编程--创建数
·SQL 语法手册
·SQLite Mode 数据库交互的
·SQLITE3 使用总结(3)
·XXTEA加密算法为SQLite 3.
·SQLite 第三版总览(简介)
·SQLite 第三版中的数据类
·用sqlite 执行标准 sql 语
·System.Data.Sqlite 上手
·SQLite编译安装步骤
相关文章
·SQLite Mode 数据库交互的
·SQL 语言参考资料
·SQLite在嵌入式Web服务器
·SQL 语法手册
·System.Data.Sqlite 上手
·SQLite数据库编程--创建数
·SQLite数据库编程--数据库
·SQLite在TorqueScript中的
·关于sqlite_exec回调函数
·用sqlite 执行标准 sql 语

版权Power by DedeCms   后台登陆
Copyright @ 2007