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 ...
随机推荐
- poj1322 Chocolate 【 概率DP 】
题目链接:poj1322 Chocolate [概率DP ] 题意:袋中有C种颜色巧克力,每次从其中拿出一块放桌上,如果桌上有两块相同颜色巧克力则吃掉,问取出N块巧克力后,求桌上正好剩下M块巧克力的概 ...
- 1.Jdeveloper打印出完整日志(-Djbo.debugoutput=console)
有时候在JDeveloper中需要打印出来比较系统和完整的ADF运行时日志 例如,想查看VO当前执行的是哪个View Criteria,运行的完整SQL语句到底如何 以及当前Binding Varia ...
- Motrix 全平台多功能下载工具[Windows、macOS、Linux]
Motrix的界面很朴素,使用起来其实也很方便.点击左侧的「+」图标就可以添加下载任务,跟其他的下载工具没什么区别.暂停.恢复.查看.复制,这些功能都不缺.界面也挺好看的,下载速度还会提示在图标的角标 ...
- 【转】Android开发:shape和selector和layer-list的(详细说明)
<shape>和<selector>在Android UI设计中经常用到.比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到<shape> ...
- [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)
一.概念 ------->1.BufferedReader/BufferedWriter [参考19.03.31文章] *Reader/Writer-------->2.InputStre ...
- vue入门学习示例
鄙人一直是用angular框架的,所以顺便比较了一下. <!DOCTYPE html> <html lang="en"> <head> < ...
- 使用canvas输出base64_url
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Mybatis 原始dao CRUD方法
用到的相关jar包及所用版本如下: 其中的Mybatis可以到github.com的网站下载 <project xmlns="http://maven.apache.org/POM/4 ...
- redux-saga框架使用详解及Demo教程
redux-saga框架使用详解及Demo教程 前面我们讲解过redux框架和dva框架的基本使用,因为dva框架中effects模块设计到了redux-saga中的知识点,可能有的同学们会用dva框 ...
- webpack报错Cannot read property 'presetToOptions' of undefined
在学习react全家桶时,webpack首先报错,报错内容如下,最后我是因为没有全局安装webpack导致的报错,使用npm install webpack -g安装解决了这个问题.