有时候做些简单的项目一般都会选择sqlite数据库,优点有很多,这里就不详细说了。

在此主要记录一些平时在使用时遇到的问题及解决方法。希望能对大家有所帮助。

-------------------------------------------------------------------------

一:sqlite一直提示 the database file is locked

解决:

-----------------------------------------------------------------------------

二:错误提示-混合模式程序集是针对v2.0........

解决:

------------------------------------------------------------------

三:在IIS中发布网站程序时,如果操作系统是64位的,有时候会出现访问错误的问题,这时可以将应用程序高级设置中的“启用32位应用程序”设置项改为True,再测试是否成功。(如果“启用32位应用程序项为True” 时网站提示下面的错误黄页,则可以将该项设置为False试试看。2014-5-24 更新:今天在测试一个网站时,发现在True的情况下网站报错,则将该项切换为了False,则可以访问了。至于如何来解释这种问题,待研究。)

这种情况的一种错误现象是:

在IIS中发布使用sqlite数据库的网站项目时,配置好IIS后访问,页面可能就是显示下面的:

这时就需要你去修改应用程序池的模式了:

---------------------------------------------------------------------------

四:使用sql语句插入当前时间

在sqlserver中,如果在操作数据时需要插入当前时间的情况,可以使用 GETDATE() 来插入,而在sqlite中则不同:

INSERT INTO MWaitPlayList(Msongid,Mtitle,Mauthor,Mtime) VALUES(@songid,@title,@author,datetime('now', 'localtime'))

要用 datetime('now','localtime') 来插入。

项目实例:

       #region 将歌曲添加到待播放列表中
/// <summary>
/// 将歌曲添加到待播放列表中
/// </summary>
/// <param name="songid">歌曲id</param>
/// <param name="songtitle">歌曲名</param>
/// <param name="songauthor">歌手</param>
/// <returns></returns>
public static bool XMusicAddtoWaitList(long songid, string songtitle, string songauthor)
{
string sql = "INSERT INTO MWaitPlayList(Msongid,Mtitle,Mauthor,Mtime) VALUES(@songid,@title,@author,datetime('now','localtime'))"; SQLiteParameter[] parameter ={
new SQLiteParameter("@songid",DbType.Int64),
new SQLiteParameter("@title",DbType.String,),
new SQLiteParameter("@author",DbType.String,)
}; parameter[].Value = songid;
parameter[].Value = songtitle;
parameter[].Value = songauthor; int row = ZXSQLiteHelper.ExecuteSql(sql, parameter);
if (row > )
{
return true;
}
else
{
return false;
}
}

-------------------------------------------------------------------------

五. 数据库配置

Web.Config或App.Config文件中的设置:

 <appSettings>
<add key="SQLiteConn" value="Data Source=|DataDirectory|\Music.db;Version=3;Pooling=False;Max Pool Size=100;"/>
</appSettings>

数据库文件要放在App_Data文件夹中:

-------------------------------------------------------------------------

六. SQLite中获取最新添加自增ID,last_insert_rowid()的使用

今天在用sqlite数据库时,想要在新插入数据的同时获取自增的id值,从网上找了找,发现可以用last_insert_rowid() 这个函数来获取,但是在sql语句中执行时却一直返回0。于是又在网上找到了一个相关的文章,经测试可行。遂记录一下。

  出现上面所提问题的主要原因是“last_insert_rowid()” 函数必须要和insert语句一起使用,说的再明白点,就是必须是由同一个“SQLiteConnection” 来操作。

修改后的sqliteHelper :

        /// <summary>
/// 执行插入语句,并获取最新的一条数据的id
/// </summary>
/// <param name="SQLString"></param>
/// <param name="cmdParms"></param>
/// <returns></returns>
public static long ExecuteGetInsertId(string SQLString, params SQLiteParameter[] cmdParms)
{
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
using (SQLiteCommand cmd = new SQLiteCommand())
{
long result = ;
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
//result = cmd.ExecuteNonQuery();
//查询 select用executeScalar() ,如果用executeNonQuery返回的永远是1. 这里由于肯定能转换为数字 ,所以可以直接转换
result = Convert.ToInt64(cmd.ExecuteScalar());
cmd.Parameters.Clear(); }
catch (System.Data.SQLite.SQLiteException E)
{
result = -;
throw new Exception(E.Message);
}
return result;
}
}
}

sql语句:

 string sql = "INSERT INTO UMembers(QId,UName,UPwd,UEmail,UPhoto,UTime) VALUES (5,@uname,@upwd,@uemail,@uphoto,datetime('now','localtime'));SELECT last_insert_rowid() from UMembers";

-----------------------------------

参考:

今天在我的数据类中给Add方法完善一下.想要实现添加之后返回添加的实体的自增ID,遂想起了select last_insert_rowid(),可是用了之后就是不好使,各种返回0,

后来经度娘指教,我发现一句话"在同一个SQLiteConnection中...",原来如此.修改代码,搞定!

我之前是这么写的

DBHelperSQLite.ExecuteSql(sql,parameters);
return Convert.ToInt32(DBHelperSQLite.GetSingle("select last_insert_rowid()"));

注意:由于我的DBHelper写法的原因,这样的话就变成了两个SQLiteConnection

改进后

return DBHelperSQLite.ExecuteSql(sql+ ";select last_insert_rowid();", parameters);

DBHelper修改

public static int ExecuteSql(string SQLString, List<SQLiteParameter> para)
{
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
using (SQLiteCommand cmd = new SQLiteCommand(SQLString, connection))
{
try
{
connection.Open();
foreach (SQLiteParameter p in para)
{
cmd.Parameters.Add(p);
}
int rows =;
if(SQLString.IndexOf("insert") != -)
rows = Convert.ToInt32(cmd.ExecuteScalar());
else
rows = cmd.ExecuteNonQuery();
return rows;
}
catch (SQLiteException e)
{
connection.Close();
throw e;
}
}
}
}

注意15行到18行,判断是否是insert操作.然后执行cmd.ExecuteScalar(),而不是cmd.ExecuteNonQuery().这样就实现在同一个SQLiteConnection啦!

链接: SQLite中获取最新添加自增ID,last_insert_rowid()的使用 - 饭 - 博客园

-------------------------------------------------------------------------

七. sqlite查询特定时间段的数据

  1.查询某一天的数据

SELECT Utitle,Uurl,Utime FROM Urls WHERE Uisok=1 AND date(Utime)=date('2014-02-10')

  2.查询今天的数据  (待测试)

select  time>=datetime('now','start of day','+0 day') and time<datetime('now','start of day','+1 day') from 表

  3.查询昨天的数据  (待测试)

select  time>=datetime('now','start of day','-1 day') and time<datetime('now','start of day','+0 day') from 表

  4.查询本周的数据   (待测试)

select  time>=datetime('now','start of day','-7 day','weekday 1') AND time<datetime('now','start of day','+0 day','weekday 1') from 表

    (时间取的是 周一到周日为一周)

  5.查询本月的数据

select * FROM UMembers WHERE UTime >=datetime('now', 'start of month', '+0 month', '-0 day') and UTime<datetime('now', 'start of month', '+1 month', '0 day')

  6.查询上一月的数据 (待测试)

select Time>=datetime('now','start of month','-1 month','-0 day') AND Time <datetime('now','start of month','+0 month','-1 day')  from 表

-------------------------------------------------------------------------

八.Sqlite分页数据查询

sqlite中 limit 一般的语法格式为:

Select * From Person  Limit 9 Offset 10;

表示从 数据库Person 中 第10条开始 共获取9条数据

也可以使用 简写形式:

Select * From Person  Limit 10,9;

--查询相应条数数据 相当于sql中的 top
--0,2 从第几条开始 共查询多少条
SELECT Bid,BTitle,BContent,BLink,BImg,BDate FROM XBooks WHERE BDel=0 ORDER BY BDate DESC LIMIT 0,2

分页查询

 string sql2 = string.Format("SELECT Bid,BTitle,BContent,BLink,BImg,BDate FROM XBooks WHERE BDel=0 ORDER BY BDate DESC LIMIT {0}*{1},{1}", pageIndex - , pageSize);
 string sql = string.Format("SELECT Bid,BTitle,BContent,BLink,BImg,BDate FROM XBooks WHERE BDel=0 ORDER BY BDate DESC LIMIT {0} offset {0}*{1}", pageSize, pageIndex - );//pageSize:每页显示条数,pageIndex页码

------------------------------------------------------------------------

-------------------------------------------------------------------------

未完待续。。。

转载请注明出处。

[开发笔记]-sqlite数据库在使用时遇到的奇葩问题记录的更多相关文章

  1. Android 开发笔记 “Sqlite数据库删除”

    1.代码方式 Context.deleteDatabase(String databaseName);//删除某一数据库 2.设置里面 进入应用程序 ,然后清除数据就ok了

  2. Android开发-之SQLite数据库

    之前我们讲了如何将数据存储在文件中,那么除了这种方式呢,就是我们常见的大家都知道的将数据存储在数据库当中了. 将数据存储在数据库中的优势: 1)存储在数据库中的数据更加方便操作,比如增.删.改.查等 ...

  3. Android 开发中 SQLite 数据库的使用

    SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP, ...

  4. 【Win 10 应用开发】Sqlite 数据库的简单用法

    如果老周没记错的话,园子里曾经有朋友写过如何在 UWP 项目中使用 Sqlite数据库的文章.目前我们都是使用第三方封装的库,将来,SDK会加入对 Sqlite 的支持. 尽管目前 UWP-RT 库中 ...

  5. Android 开发笔记 “Sqlite Cursor 使用”

    使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合相当于dataReader.今天特地将它单独拿出来谈, ...

  6. Android开发学习——SQLite数据库与单元测试

    SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHelper  public class Myopenhelper extends SQLiteOpenHelp ...

  7. Android学习笔记--Sqlite数据库

    前几天学习了Android中的数据存储,包括文件存储,SharedPreferences存储,还有就是Acndroid中的特色:SQLite数据库存储了.让我比较惊讶的是Android中竟然内嵌了一个 ...

  8. Django开发笔记之数据库的设计

    后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤: 1,需求分析,这点子不用多说,而我也深刻体会到了没有原 ...

  9. Android开发--adb,SQLite数据库运用

    一.玩转adb  adb的全称为Android Debug Bridge,就是起到调试桥的作用.   adb有什么用?:借助adb工具,我们可以管理设备或手机模拟器的状态.还可以进行很多手机操作,如安 ...

随机推荐

  1. eclipse xml 注释快捷键

    注释:CTRL + SHIFT + / 撤销注释:CTRL + SHIFT + \

  2. 【转载】【Centos linux系统】命令行(静默)安装oracle 11gR2

    [原文]:http://blog.chinaunix.net/uid-23886490-id-3565998.html 一.安装前准备 1.内存及swap要求 至于swap如何添加,后文将提到 gre ...

  3. PCA in Bioinformatics

    光看原理和代码是没用的,得看看具体算法在实际中的用途,多看看文献. Principal component analysis for clustering gene expression data

  4. xcode 真机调试 failed to get the task for process xxx

    xcode 真机调试 failed to get the task for process xxx 此错误原因是,使用 in house profile 签名了真机调试的证书: 在 target--- ...

  5. java 内部类3(匿名内部类)

    匿名内部类: 1.没有类名的类就叫匿名内部类 2.好处:简化书写. 3.使用前提:必须有继承或实现关系......不要想着你自己没有钱你没可是你爸有 4.一般用于于实参.(重点) class Oute ...

  6. dedecms5.7怎么取消邮箱验证以及dedecms 会员发布的文章不需要审核的解决方法

    后台 ——系统基本参数——会员设置——会员权限开通状态——改为0 1.实现会员发布文章不需要审核,非会员发布需要审核 在member这个文件夹下找到archives_sg_add.php这个文件,打开 ...

  7. 【poj2728】Desert King

    [poj2728]Desert King 题意 最优比率生成树. http://blog.csdn.net/ophunter_lcm/article/details/10113817 分析 Dinke ...

  8. python中Url链接编码处理(urlencode,urldecode)

    做完了flask-web应用,这几天想用爬虫做个好玩的电影链接整合器,平时找电影都是在dytt或者dy2018之类的网站,在用dytt搜索电影<美国队长时>,发现他的搜索链接是这样的:ht ...

  9. html 标签总结

    <q>标签,短文本引用 例如“聪明秀出为之英,胆略过人为之雄.” <blockquote>标签,长文本引用 <blockquote>标签的解析是缩进样式. 没有HT ...

  10. Qt之Meta-Object系统

    简述 Qt的元对象系统(Meta-Object System)提供了信号与槽机制,可用于对象间通信.运行时类别信息和动态属性系统. 元对象系统基于三个方面: QObject类:为objects提供了一 ...