//--------------------------------------------------------------------------
//
// Copyright (c) BUSHUOSX. All rights reserved.
//
// File: SqliteDbManager.cs
//
// Version:1.0.0.0
//
// Datetime:
//
//---------------------------------------------------------------------------
/*
*
* 修改时间:20140829 211000
*
*
*
*
*/ using System;
using System.Configuration;
using System.Data.SQLite;
using System.Text;
using System.Text.RegularExpressions;
using System.IO; namespace BUSHUOSX.Helper
{ public sealed class SqliteDbManager
{
/// <summary>
/// 获取连接字符串中某项的值
/// </summary>
/// <param name="connectionString">连接字符串</param>
/// <param name="itemName">项目</param>
/// <returns>项目值</returns>
private static string GetItemValueFromConnectionString(string connectionString, string itemName)
{
if (!connectionString.EndsWith(";"))
connectionString += ";"; // \s* 匹配0个或多个空白字符
// .*? 匹配0个或多个除 "\n" 之外的任何字符(?指尽可能少重复)
string regexStr = itemName + @"\s*=\s*(?<key>.*?);";
Regex r = new Regex(regexStr, RegexOptions.IgnoreCase);
Match mc = r.Match(connectionString);
return mc.Groups["key"].Value;
} /// <summary>
/// 创建System.Data.Sqlite数据库样式的连接字符串
/// </summary>
/// <param name="dbName">数据库名</param>
/// <param name="dbFileExtName">数据库文件扩展名</param>
/// <param name="dbPassword">数据库密码</param>
/// <param name="dbDirectory">数据库目录路径</param>
/// <returns>dbName为空时,返回空</returns>
public static string GenerateSqliteConnectionString(string dbFileName, string dbPassword = "", string dbDirectory = "")
{
if (string.IsNullOrEmpty(dbFileName))
{
return "";
} StringBuilder sb = new StringBuilder("Data Source=");
if (!string.IsNullOrEmpty(dbDirectory))
{
sb.Append(dbDirectory);
if (!dbDirectory.EndsWith("\\"))
sb.Append('\\');
} sb.Append(dbFileName).Append(';'); if (!string.IsNullOrEmpty(dbPassword))
sb.AppendFormat("Password={0};", dbPassword); return sb.ToString();
} /// <summary>
/// 尝试用sqliteConnectionString打开已存在的数据库,或者用sqliteConnectionString创建新的数据库
/// </summary>
/// <param name="dbFileName"></param>
/// <param name="dbPassword"></param>
/// <returns></returns>
public static bool OpenOrCreateSqliteDateBase(string dbFileName, string dbPassword)
{
return OpenOrCreateSqliteDateBase(GenerateSqliteConnectionString(dbFileName, dbPassword));
} /// <summary>
/// 尝试用sqliteConnectionString打开已存在的数据库,或者用sqliteConnectionString创建新的数据库
/// </summary>
/// <param name="sqliteConnectionString"></param>
/// <returns></returns>
public static bool OpenOrCreateSqliteDateBase(string sqliteConnectionString)
{
string dbFileName = GetItemValueFromConnectionString(sqliteConnectionString, "Data Source");
string dbPassword = GetItemValueFromConnectionString(sqliteConnectionString, "Password");
if (string.IsNullOrEmpty(dbFileName))
{
return false;
} try
{
if (!File.Exists(dbFileName))
{
//创建目录
var parent = Directory.GetParent(dbFileName);
if (null != parent && !parent.Exists)
{
Directory.CreateDirectory(parent.FullName);
}
//var fs = File.Create(dbName);
//fs.Close(); //创建数据库
SQLiteConnection sqlconn = new SQLiteConnection("Data Source=" + dbFileName);
sqlconn.Open();
//设置密码
if (!string.IsNullOrEmpty(dbPassword))
sqlconn.ChangePassword(dbPassword);
sqlconn.Close(); return true;
}
}
catch (SQLiteException e)
{
return false;
}
catch (Exception e)
{
return false;
} try
{
//尝试打开数据库
SQLiteConnection sqlconn = new SQLiteConnection(sqliteConnectionString);
sqlconn.Open();
sqlconn.Close();
}
catch (SQLiteException e)
{
return false;
} return true;
} public static bool TableExists(string sqliteConnectionString, string tableName)
{
bool result = false;
SQLiteConnection sqlconn = new SQLiteConnection(sqliteConnectionString);
try
{
SQLiteCommand scmd = new SQLiteCommand(sqlconn);
scmd.CommandText = string.Format(@"select count(*) from sqlite_master where type='table' and name='{0}'", tableName); //打开数据库
sqlconn.Open(); var v = scmd.ExecuteScalar();
if ( == Convert.ToInt32(v))
{
result = true;
}
}
catch (Exception)
{
//throw;
}
sqlconn.Close();
return result;
} public static bool DropTable(string sqliteConnectionString, string tableName)
{
return null != ExecuteNonQuery(sqliteConnectionString, string.Format("drop table if exists {0}", tableName));
} public static bool RenameTable(string sqliteConnectionString, string oldTableName, string newTableName)
{
return null != ExecuteNonQuery(sqliteConnectionString, string.Format("alter table {0} rename to {1}", oldTableName, newTableName));
} /// <summary>
/// 执行sql命令
/// </summary>
/// <param name="sqliteConnectionString"></param>
/// <param name="sql"></param>
/// <returns></returns>
public static object ExecuteNonQuery(string sqliteConnectionString, string sql)
{
object result = null; SQLiteConnection sqlconn = new SQLiteConnection(sqliteConnectionString);
try
{
//打开数据库
sqlconn.Open(); SQLiteCommand scmd = new SQLiteCommand(sqlconn);
scmd.CommandText = sql;
result = scmd.ExecuteNonQuery();
}
catch (Exception e)
{
//throw;
}
sqlconn.Close(); return result;
}
}
}

sqlite helper的更多相关文章

  1. SQLite Helper (C#) zt

    http://www.codeproject.com/Articles/746191/SQLite-Helper-Csharp This small class (SQLiteHelper.cs) i ...

  2. SQLite Helper (C#) z

    http://www.codeproject.com/Articles/746191/SQLite-Helper-Csharp Introduction I have written a small ...

  3. C#操作SQLite数据库

    SQLite介绍 SQLite is a software library that implements a self-contained, serverless, zero-configurati ...

  4. Android中多表的SQLite数据库(译)

    原文: Android SQLite Database with Multiple Tables 在上一篇教程Android SQLite Database Tutorial中,解释了如何在你的And ...

  5. C# SQLite 创建数据库的方法增删查改语法和命令

    SQLite介绍 SQLite是一个开源.免费的小型RDBMS(关系型数据库),能独立运行.无服务器.零配置.支持事物,用C实现,内存占用较小,支持绝大数的SQL92标准. SQLite数据库官方主页 ...

  6. 安卓APP与智能硬件相结合的简易方案

    第1章 概  述 (作者小波QQ463431476) (来源http://blog.chinaaet.com/zhaocundang/p/5100017645博客) (来源   http://www. ...

  7. HRPlugin For Xcode发布(附源码地址)

    今天给大家介绍的这个插件,是我在IOS平台上开发以来,一些想法的集合体.因为本人时常感觉在开发过程中无论从GOOGLE资料查找和SQL数据库查询,正则表达式测试,SVN等,这些经常要做的操作中,耽误了 ...

  8. 使用Rxjava缓存请求

    最近,我尝试使用RxJava开发了一款闲时备份app.我必须承认,一旦你get到了正确的方式,RxJava几乎感觉就像作弊.一切看起来更简洁,多个请求能够被组合,且非常容易控制.通过在UI线程观察和在 ...

  9. Android Third Party Libraries and SDK's

    http://javatechig.com/Android/android-third-party-libraries-sdks Over past few years, the age of mob ...

随机推荐

  1. JAVA中commons-collections-3.2.1.jar包是干什么用的?

    类似C++中的Boost库,对Java容器类型和算法的补充

  2. 3.26-3.31【cf补题+其他】

      计蒜客)翻硬币 //暴力匹配 #include<cstdio> #include<cstring> #define CLR(a, b) memset((a), (b), s ...

  3. Task ‘run’ not found in root project

    问题现象: Task 'run' not found in root project 'springframework'. 问题原因: 没有在gradle.build文件中添加如下配置, mainCl ...

  4. Ubuntu14.04.3,apt-get出现dpkg: error processing package xxx (--configure)和cups-daemon错误的解决方案

    Ubuntu14.04.3,使用apt-get安装软件的时候,报个莫名其妙的错误: dpkg: error processing package xxx (--configure): balabala ...

  5. 「bzoj4264 小C找朋友」

    权限题 就是一个集合\(hash\) 集合\(hash\)可以用于判断两个集合是否相等,具体做法就是给每个随机一个值,之后异或起来就是可以了 这个题就是这样,处理出每个点直接相连的点集的\(hash\ ...

  6. ecshop 名词

    分单:一个订单生成发货单后就会显示已分单,部分发货就会显示部分分单 待发货:已确认已付款未发货 待支付:已分单,未付款,已发货 未确认:未确认,未付款,未发货 已成交:已分单,已付款,已发货 订单状态 ...

  7. EF Core中如何通过实体集合属性删除从表的数据

    假设在数据库中有两个表:Person表和Book表,Person和Book是一对多关系 Person表数据: Book表数据: 可以看到数据库Book表中所有的数据都属于Person表中"F ...

  8. 确保img的宽高比固定

    html: <div class="wrapper"> <swiper :options="swiperOption"> <swi ...

  9. sql server 中判断分组排序的使用示例

    现在需要查询一组数据,是对一列字段(column01)的数据分范围查询后分组排序: select (case when [column01] >0 AND [column01]<= 500 ...

  10. 常见的springmvc、SpringBoot的注解

    springMvc的常用注解 : @Controller :用于标记在一个类上,使用它标记的类就是一个springmcv Controller对象,分发处理器将会扫描使用了该注解 的类的方法,并检测该 ...