前几天有人问过我,我想不出一个好的答案.平台可移植性与项目完全无关.
事实上,Jet有一些SQLite没有的功能,即外键.
那么有谁能想到为什么应该使用SQLite而不是Jet数据库呢?
我正在考虑为我的Windows桌面应用程序使用/实现某种嵌入式键值(或文档)存储.我希望能够存储各种类型的数据(GPS轨道就是一个例子),当然也能够查询这些数据.数据量将无法同时加载到内存中.
我正在考虑使用sqlite作为键值存储的存储引擎,类似于y-serial,但是用.NET编写.我还读到了FriendFeed使用MySQL来存储无模式数据,这是如何将RDBMS用于非关系数据的一个很好的指针.sqlite似乎是一个很好的选择,因为它的简单性,可移植性和库大小.
我的问题是嵌入式非关系型商店是否还有其他选择?它不需要是可分发的,也不必支持事务,但它必须可以从.NET访问,并且应该具有较小的下载大小.
更新:我发现了一篇名为SQLite作为键值数据库的文章,它将sqlite与Berkeley DB进行了比较,Berkeley DB是一个嵌入式键值存储库.
我正在尝试运行NOT INselect NOT IN列表是动态的.就像是
SELECT id, type FROM CONTACTS where type NOT IN ('connect','answer')
Run Code Online (Sandbox Code Playgroud)
在代码中,我徒劳的尝试是:
db.query(TABLE, new String[] { "id", ""}, " type NOT IN (?)", "connect,answer",
null, null, null); // didn't work
db.query(TABLE, new String[] { "id", ""}, " type NOT IN (?)", "'connect','answer'",
null, null, null); // didn't work
Run Code Online (Sandbox Code Playgroud)
我对此的看法是,?替换将我的逗号列表视为单个参数.我确实找到了一个解决方案,但它相当难看,所以我不会在这里发布它,直到有人提出更优雅的东西
我是android app developpement的新手.我尝试通过以下代码将值插入SQLite数据库;
public class cashbook extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SQLiteDatabase db;
db = openOrCreateDatabase(
"cashbookdata.db"
, SQLiteDatabase.CREATE_IF_NECESSARY
, null
);
final String Create_CashBook =
"CREATE TABLE CashData ("
+ "id INTEGER PRIMARY KEY AUTOINCREMENT,"
+ "Description TEXT,"
+ "Amount REAL,"
+ "Trans INTEGER,"
+ "EntryDate TEXT);";
db.execSQL(Create_CashBook);
final String Insert_Data="INSERT INTO CashData VALUES(2,'Electricity',500,1,'04/06/2011')";
db.execSQL(Insert_Data);
Run Code Online (Sandbox Code Playgroud)
它在模拟器上显示错误 - 应用程序CashBook意外停止.
已创建数据库和表,但值插入不起作用.请帮我解决这个问题.谢谢.
我理解为什么在32位和64位版本中提供System.Data.SQLite.dll.所以我们不要再纠缠于此并继续前进.:)
由于它以这种方式完成,它似乎使得纯粹的C#开发变得更加困难,有3个选择.
是仅支持32位并强制使用托管程序集来编译x86并在32或64位运行时处理它,并且当你在64位环境中时会失去优势.
是强制64位并且仅支持64位并且失去了在32位上运行的能力但是获得了64位的所有优点.
是创建两个版本的程序集,一个编译x86并使用32位SQLite,另一个编译x64并使用64位SQLite.它阻止使用"ANY"作为编译选项,并且能够轻松地将单个构建部署到任一类型.从开发的角度来管理并不是那么可怕,因为我们需要两个项目.只将C#代码正式放在一个,而另一个只使用"链接"到另一个代码.这仅用于编译目的.仍然让我们必须管理两个输出以进行部署.
尽管如此,我只是在寻找确认以上是唯一正确的选择.
如果我还有其他选择,请告诉我.具体来说,如果有方法可以获得一个可以编译为ANY的单个C#DLL,那么它可以利用32位或64位,具体取决于它的运行位置并仍然使用System.Data.SQLite.dll.
我正在尝试使用此处描述的过程访问我的设备上的sqlite数据库:如何查看SQLite数据库(无模拟器)?
但是,我继续找不到sqlite3.我假设我打算在行的开头输入带有#(#)符号的命令.我尝试了它并没有得到任何东西.没有它,我收到错误消息.
sqlite3.exe文件肯定存在于路径中.
我必须安装一些东西吗?
我String从a中获取了值EditText并将其设置为SELECT QUERY after WHERE条件
如
TextView tv = (TextView) findViewById(R.id.textView3);
EditTextet2 et = (EditText) findViewById(R.id.editText1);
String name = et.getText().toString();
Cursor c = db.rawQuery("SELECT * FROM tbl1 WHERE name = '"+name+"'", null);
c.moveToNext();
tv.setText(c.getString(c.getColumnIndex("email")));
Run Code Online (Sandbox Code Playgroud)
但它不起作用.有什么建议?
我认为sqlite很简单,但它让我很难过.我只想创建一个应用程序,我可以使用ado.net实体数据类连接到sqlite数据库.
我在运行Windows XP的虚拟计算机上测试应用程序时遇到此问题.当我部署它们时,应用程序在我当前的计算机上以及在我的笔记本电脑上运行正常
以下是虚拟计算机上发生的情况:
当我尝试连接时,我得到以下异常:


我知道有很多帖子都在谈论这个,大多数人说你需要为Sqlite下载.NET提供程序.
我已经安装了sqlite-netFx40-setup-bundle-x86-2010-1.0.79.0.exe,我遇到了同样的问题.我该怎么办?
我设法通过添加以下内容来建立连接:
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
Run Code Online (Sandbox Code Playgroud)
到我的app.config文件.
问题是现在我无法选择数据也不能将记录插入数据库.我尝试插入新记录时遇到的例外情况是:
在类型为"System.Data.SQLite.SQLiteFactory"的商店提供程序实例上调用"GetService"方法后返回null.商店提供商可能无法正常运行.

我有最新版本的node.js构建没有问题.我正在尝试为node.js使用sqlite模块.
对于developseed的node-sqlite3,我按照指示:
git clone git://github.com/developmentseed/node-sqlite3.git
cd node-sqlite3
./configure
make
Run Code Online (Sandbox Code Playgroud)
我安装了npm:curl -k https://npmjs.org/install.sh | sudo sh
并使用npm安装node-gyp:sudo npm install -g node-gyp
在node-sqlite3 configure-d和make-d之后,我尝试用npm安装,我得到这个:
npm install sqlite3
npm WARN install Refusing to install sqlite3 as a dependency of itself
Run Code Online (Sandbox Code Playgroud)
当我研究这个错误时,我发现了这个问题:npm install sqlite3 error我试过:
node-waf clean || true; node-waf configure build
Run Code Online (Sandbox Code Playgroud)
但得到了这个错误:
/usr/local/bin/../lib/node/wafadmin/Utils.py:136: DeprecationWarning: the md5 module is deprecated; use hashlib instead
from md5 import md5
Waf: Please run waf from a directory containing a file named "wscript" or run distclean …Run Code Online (Sandbox Code Playgroud) 我在Android应用程序的sqlite数据库中存储了大量二进制数据(protobufs),却没有意识到Android Cursor只能容纳最多1MB的数据.我现在知道我应该将这些二进制blob存储在文件中,并且只引用sqlite数据库条目中的文件.
我需要升级数据库(应用程序已经使用了一段时间)才能将这些二进制块移动到文件中.问题是某些用户的数据可能已经超过了1MB的限制,我无法从数据库中检索它(访问Cursor包含大blob的单行的结果IllegalStateException: Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initialize before accessing data from it).
如何检索Cursor已存储在sqlite数据库中的大于1MB 限制的二进制blob ?