sqlite helper
//--------------------------------------------------------------------------
//
// 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的更多相关文章
- SQLite Helper (C#) zt
http://www.codeproject.com/Articles/746191/SQLite-Helper-Csharp This small class (SQLiteHelper.cs) i ...
- SQLite Helper (C#) z
http://www.codeproject.com/Articles/746191/SQLite-Helper-Csharp Introduction I have written a small ...
- C#操作SQLite数据库
SQLite介绍 SQLite is a software library that implements a self-contained, serverless, zero-configurati ...
- Android中多表的SQLite数据库(译)
原文: Android SQLite Database with Multiple Tables 在上一篇教程Android SQLite Database Tutorial中,解释了如何在你的And ...
- C# SQLite 创建数据库的方法增删查改语法和命令
SQLite介绍 SQLite是一个开源.免费的小型RDBMS(关系型数据库),能独立运行.无服务器.零配置.支持事物,用C实现,内存占用较小,支持绝大数的SQL92标准. SQLite数据库官方主页 ...
- 安卓APP与智能硬件相结合的简易方案
第1章 概 述 (作者小波QQ463431476) (来源http://blog.chinaaet.com/zhaocundang/p/5100017645博客) (来源 http://www. ...
- HRPlugin For Xcode发布(附源码地址)
今天给大家介绍的这个插件,是我在IOS平台上开发以来,一些想法的集合体.因为本人时常感觉在开发过程中无论从GOOGLE资料查找和SQL数据库查询,正则表达式测试,SVN等,这些经常要做的操作中,耽误了 ...
- 使用Rxjava缓存请求
最近,我尝试使用RxJava开发了一款闲时备份app.我必须承认,一旦你get到了正确的方式,RxJava几乎感觉就像作弊.一切看起来更简洁,多个请求能够被组合,且非常容易控制.通过在UI线程观察和在 ...
- Android Third Party Libraries and SDK's
http://javatechig.com/Android/android-third-party-libraries-sdks Over past few years, the age of mob ...
随机推荐
- 关于mvvm:UI、数据、绑定、状态、中间变量、数据适配、数据处理
绑定: UI控件 --> VM VM -> UI控件 关于mvvm:UI.数据.绑定.状态.中间变量.数据适配.数据处理: https://github.com/zzf073/Log ...
- MySQL理解索引、添加索引的原则
索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行,还需要考虑每次读入数据页的IO开销.而如果采取索引,则可以根据索引指向的页以及记录在 ...
- iOS中的应用启动原理
iOS中的应用启动原理 来源: http://m.blog.csdn.net/article/details?id=50530090 http://m.warting.com/program/2016 ...
- GIT 报错:Result too large 解决办法
在使用bower install命令下载前端依赖的js插件时,git出错了,报错信息如下: bower ECMDERR Failed to execute "git ls-remote -- ...
- 第23章 I2C—读写EEPR
本章参考资料:<STM32F76xxx参考手册>.<STM32F7xx规格书>.库帮助文档<STM32F779xx_User_Manual.chm>及<I2C ...
- Knowledge Point 20180305 Java程序员详述编码Unicode
Unicode Unicode(统一码.万国码.单一码)是计算机科学领域里的一项业界标准,包括字符集.编码方案等.Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设 ...
- es6 数组扩展方法
1.扩展运算符 含义: 扩展运算符,三个点(...),将一个数组转为用逗号分隔的参数顺序. 例如: console.log([1,2,3]); console.log(...[1,2,3]); 结 ...
- 『C++』Temp_2018_12_13_Type
#include <iostream> #include <string> using namespace std; class Object{ public: virtual ...
- mac Axure RP 8 授权码 以及汉化
Koshy wTADPqxn3KChzJxLmUr5jTTitCgsfRkftQQ1yIG9HmK83MYSm7GPxLREGn+Ii6xY 汉化包 汉化包链接 密码: upri 汉化步骤 以Win7 ...
- Windows远程常见问题
1.window2003远程桌面“已达最大连接数”解决:1)mstsc /v:(此处为服务器IP) /console 任务管理器注销已断开用户 mstsc /v:192.168.4.3 /cons ...