sqlite数据库在使用时遇到的奇葩问题记录Word文档下载推荐.docx
《sqlite数据库在使用时遇到的奇葩问题记录Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《sqlite数据库在使用时遇到的奇葩问题记录Word文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。
2014-5-24更新:
今天在测试一个网站时,发现在True的情况下网站报错,则将该项切换为了False,则可以访问了。
至于如何来解释这种问题,待研究。
)
这种情况的一种错误现象是:
在IIS中发布使用sqlite数据库的网站项目时,配置好IIS后访问,页面可能就是显示下面的:
这时就需要你去修改应用程序池的模式了:
---------------------------------------------------------------------------
四:
使用sql语句插入当前时间
在sqlserver中,如果在操作数据时需要插入当前时间的情况,可以使用GETDATE()来插入,而在sqlite中则不同:
INSERTINTOMWaitPlayList(Msongid,Mtitle,Mauthor,Mtime)VALUES(@songid,@title,@author,datetime('
now'
'
localtime'
))
要用datetime('
'
)来插入。
项目实例:
#region将歌曲添加到待播放列表中;
///<
summary>
///将歌曲添加到待播放列表中;
/summary>
paramname="
s;
returns>
<
/r
#region将歌曲添加到待播放列表中
///<
///将歌曲添加到待播放列表中
paramname="
songid"
>
歌曲id<
/param>
songtitle"
歌曲名<
songauthor"
歌手<
/returns>
publicstaticboolXMusicAddtoWaitList(longsongid,stringsongtitle,stringsongauthor)
{
stringsql="
INSERTINTOMWaitPlayList(Msongid,Mtitle,Mauthor,Mtime)
VALUES(@songid,@title,@author,datetime('
))"
;
SQLiteParameter[]parameter={
newSQLiteParameter("
@songid"
DbType.Int64),
@title"
DbType.String,200),
@author"
DbType.String,200)
};
parameter[0].Value=songid;
parameter[1].Value=songtitle;
parameter[2].Value=songauthor;
introw=ZXSQLiteHelper.ExecuteSql(sql,parameter);
if(row>
0)
returntrue;
}
else
returnfalse;
五.数据库配置
Web.Config或App.Config文件中的设置:
appSettings>
addkey="
SQLiteConn"
value="
Data
Source=|DataDirectory|\Music.db;
Version=3;
Pooling=False;
MaxPoolSize=100;
"
/>
/appSettings>
数据库文件要放在App_Data文件夹中:
六.SQLite中获取最新添加自增ID,last_insert_rowid()的使用
今天在用sqlite数据库时,想要在新插入数据的同时获取自增的id值,从网上找了找,发现可以用
last_insert_rowid()这个函数来获取,但是在sql语句中执行时却一直返回0。
于是又在网上找到了一个相关的文章,经测试可行。
遂记录一下。
出现上面所提问题的主要原因是“last_insert_rowid()”函数必须要和insert语句一起使用,说的再明白点,就是必须是由同一个“SQLiteConnection”来操作。
修改后的sqliteHelper:
///执行插入语句,并获取最新的一条数据的id
SQLString"
cmdParms"
publicstaticlongExecuteGetInsertId(stringSQLString,paramsSQLiteParameter[]cmdParms)
using(SQLiteConnectionconnection=newSQLiteConnection(connectionString)){
using(SQLiteCommandcmd=newSQLiteCommand())
longresult=0;
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.SQLiteExceptionE)
result=-1;
thrownewException(E.Message);
returnresult;
sql语句:
INSERTINTOUMembers(QId,UName,UPwd,UEmail,UPhoto,UTime)VALUES
(5,@uname,@upwd,@uemail,@uphoto,datetime('
));
SELECTlast_insert_rowid()fromUMembers"
-----------------------------------
参考:
今天在我的数据类中给Add方法完善一下.想要实现添加之后返回添加的实体的自增ID,遂想起了selectlast_insert_rowid(),可是用了之后就是不好使,各种返回0,
后来经度娘指教,我发现一句话"
在同一个SQLiteConnection中..."
原来如此.修改代码,搞定!
我之前是这么写的
DBHelperSQLite.ExecuteSql(sql,parameters);
returnConvert.ToInt32(DBHelperSQLite.GetSingle("
selectlast_insert_rowid()"
注意:
由于我的DBHelper写法的原因,这样的话就变成了两个SQLiteConnection
改进后
returnDBHelperSQLite.ExecuteSql(sql+"
selectlast_insert_rowid();
parameters);
DBHelper修改
publicstaticintExecuteSql(stringSQLString,List<
SQLiteParameter>
para)
using(SQLiteCommandcmd=newSQLiteCommand(SQLString,connection))
connection.Open();
foreach(SQLiteParameterpinpara)
cmd.Parameters.Add(p);
introws=0;
if(SQLString.IndexOf("
insert"
)!
=-1)
rows=Convert.ToInt32(cmd.ExecuteScalar());
rows=cmd.ExecuteNonQuery();
returnrows;
catch(SQLiteExceptione)
connection.Close();
throwe;
注意15行到18行,判断是否是insert操作.然后执行cmd.ExecuteScalar(),而不是
cmd.ExecuteNonQuery().这样就实现在同一个SQLiteConnection啦!
链接:
SQLite中获取最新添加自增ID,last_insert_rowid()的使用-饭-博客园
七.sqlite查询特定时间段的数据
1.查询某一天的数据
SELECTUtitle,Uurl,UtimeFROMUrlsWHEREUisok=1ANDdate(Utime)=date('
2014-02-10'
2.查询今天的数据(待测试)
selecttime>
=datetime('
startofday'
+0day'
)andtime<
datetime('
+1day'
)from表
3.查询昨天的数据(待测试)
-1day'
4.查询本周的数据(待测试)
-7day'
weekday1'
)AND
time<
(时间取的是周一到周日为一周)
5.查询本月的数据
select*FROMUMembersWHEREUTime>
startofmonth'
+0month'
-0day'
)andUTime<
+1month'
0day'
6.查询上一月的数据(待测试)
selectTime>
-1month'
)ANDTime<
八.Sqlite分页数据查询
sqlite中limit一般的语法格式为:
Select*FromPersonLimit9Offset10;
表示从数据库Person中第10条开始共获取9条数据
也可以使用简写形式:
Select*FromPersonLimit10,9;
--查询相应条数数据相当于sql中的top
--0,2从第几条开始共查询多少条
SELECTBid,BTitle,BContent,BLink,BImg,BDateFROMXBooksWHEREBDel=0ORDERBYBDateDESCLIMIT0,2分页查询
stringsql2=string.Format("
SELECTBid,BTitle,BContent,BLink,BImg,BDateFROMXBooksWHEREBDel=0ORDERBYBDateDESCLIMIT{0}*{1},{1}"
pageIndex-1,pageSize);
stringsql=string.Format("
SELECTBid,BTitle,BContent,BLink,BImg,BDateFROMXBooksWHEREBDel=0ORDERBYBDateDESCLIMIT{0}offset{0}*{1}"
pageSize,pageIndex-1);
//pageSize:
每页显示条数,pageIndex页码