zoukankan      html  css  js  c++  java
  • SQLite操作

                string  dbPath="Data Source=D:\test.db3";
                using (SQLiteConnection cnn = new SQLiteConnection(dbPath))
                {
                    cnn.Open();   //无库则自动建
    
                    using (SQLiteCommand cmd = cnn.CreateCommand())
                    {
                        byte[] buffer = null;
    
                        //建表
                        string sql = "create table test(id int,file blob);";
                        cmd.CommandText = sql;
    
                        //将文件转二进制数组存入Blob字段
                        string file = @"d:help.jpg";
                        buffer = FileHelper.FileToBytebuffer(file);
                        cmd.CommandText = "insert into test values('11',@data)";
                        SQLiteParameter para = new SQLiteParameter("@data", DbType.Binary);
                        para.Value = buffer;
                        cmd.Parameters.Add(para);
                        cmd.ExecuteNonQuery();
    
                        //读取记录,将将Blob字段的转存为文件
                        cmd.CommandText = "SELECT * FROM test";// WHERE ID = '12'";
                        using (var reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                string f = reader["id"].ToString();  //以列名取值
                               buffer =Helpers.Get_SQLite_Blob_Bytes(reader,1); //以列号取值
                                FileHelper.BytebufferToFile(buffer, "d:\"+f+".jpg");
                            }
                        }                   
    
                        //更新Blob字段
                        Byte[] m_byte = FileHelper.FileToBytebuffer("d:\pic1.jpg");
                        cmd.CommandText = "UPDATE test set file=@file WHERE id=12";
                        SQLiteParameter param_m = new SQLiteParameter("@file", DbType.Binary, m_byte.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, m_byte);
                        cmd.Parameters.Add(param_m); //很多参数阿,注意DBType.Binary 
                        cmd.ExecuteNonQuery();
    
                        //删除记录
                        cmd.CommandText = "delete from test where id=12";
                        cmd.ExecuteNonQuery();

                        //判断表是否存在,不在存则新建
                        cmd.CommandText = @"create table if not exists tes (ID integer primary key autoincrement not null, tojid varchar(200),timestamp timestamp,remark,data text,type int)";
                        cmd.ExecuteNonQuery();
    } }
                /// <summary>
                /// 读取SQLite表二进制字段,返回二进制数组
                /// </summary>
                /// <param name="reader">SQLiteDataReader</param>
                /// <param name="columnnumber">字段序号</param>
                /// <returns>byte[]</returns>
                public static byte[] Get_SQLite_Blob_Bytes(SQLiteDataReader reader, int columnnumber)
                {
                    const int CHUNK_SIZE = 2 * 1024;
                    byte[] buffer = new byte[CHUNK_SIZE];
                    long bytesRead;
                    long fieldOffset = 0; using (MemoryStream stream = new MemoryStream())
                    {
                        while ((bytesRead = reader.GetBytes(columnnumber, fieldOffset, buffer, 0, buffer.Length)) > 0)
                        {
                            stream.Write(buffer, 0, (int)bytesRead);
                            fieldOffset += bytesRead;
                        } return stream.ToArray();
                    }
                }
  • 相关阅读:
    采用闭锁(CountDownLatch)控制线程的先后顺序(一)
    采用java信号量(semaphore)让线程轮流打印
    生产者消费者模式的java实现(实现四)
    生产者消费者模式的java实现(实现三)
    生产者消费者模式的java实现(实现二)
    生产者消费者模式的java实现(实现一)
    求最大子串和 最长子串的java写法
    Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process 异常处理
    定时任务服务器不定时重启原因解析
    centos 6.3 + gerrit-2.8.6 + repo 实践
  • 原文地址:https://www.cnblogs.com/sekon/p/4669926.html
Copyright © 2011-2022 走看看