是否可以在一个进程中访问数据库,在另一个进程中创建?我试过了:
空闲#1
import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute("create table test(testcolumn)")
c.execute("insert into test values('helloooo')")
conn.commit()
conn.close()
Run Code Online (Sandbox Code Playgroud)
IDLE#2
import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute("select * from test")
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
q = c.execute("select * from test")
sqlite3.OperationalError: no such table: test
Run Code Online (Sandbox Code Playgroud) 从数据库插入,查询,更新和删除项目时,我必须提供同步.据我所知beginTransaction(),这beginTransactionNonExclusive()是我需要的方法.
除了SQLite的文档描述EXCLUSIVE,IMMEDIATE以及DEFERRED相当不错.
交易可以是延期交货,即时交易或独家交易.延迟意味着在首次访问数据库之前,不会在数据库上获取锁.
如果事务是立即的,则只要执行BEGIN命令就会在所有数据库上获取RESERVED锁,而无需等待数据库的使用.在BEGIN IMMEDIATE之后,没有其他数据库连接可以写入数据库或执行BEGIN IMMEDIATE或BEGIN EXCLUSIVE.但是,其他进程可以继续从数据库中读取.
独占事务导致在所有数据库上获取EXCLUSIVE锁.在BEGIN EXCLUSIVE之后,除了read_uncommitted连接之外,没有其他数据库连接能够读取数据库,没有异常的其他连接将无法写入数据库,直到事务完成.
当某些线程正在使用数据库时,它似乎提供了一些保护,防止不必要的插入和查询.但我不确定它是否能保证同步.
有insert我的方法ContentProvider.
@Override
public Uri insert(Uri baseUri, ContentValues values) {
try {
mDatabase = mHelper.getWritableDatabase();
mDatabase.beginTransaction(); // EXCLUSIVE
switch (sUriMatcher.match(baseUri)) {
case UriCodes.COUNTRIES:
case UriCodes.CONTINENTS:
case UriCodes.ORGS:
String table = baseUri.getLastPathSegment();
long rowId = mDatabase.insert(table, null, values);
Uri uri = Uri.withAppendedPath(baseUri, Long.toString(rowId));
mDatabase.setTransactionSuccessful();
return uri;
default:
mDatabase.endTransaction();
throw new IllegalArgumentException(UNSUPPORTED_URI + SPACE + baseUri);
} …Run Code Online (Sandbox Code Playgroud) 我有下表:
[id,lang,data]
Run Code Online (Sandbox Code Playgroud)
主键是哪里 id
我想更改主键, id,lang而不会丢失表的内容.我必须运行哪些查询才能更改它
谢谢
我在SQLite中有一个完全填充的数据库,我想在我的新应用程序中使用它.它相当大,所以我希望尽可能避免将其更改为其他格式.我如何以与我的应用程序一起提供的方式使用此数据库?
编辑:例如,如果我只是将文件放入我的受支持文件目录,我该如何访问它?我该如何参考?
我有一个这样的表(但有更多列):
Code Quantity
----- --------
00001 1
00002 1
00002 1
00002 2
00003 2
00003 1
Run Code Online (Sandbox Code Playgroud)
我希望得到与SELECT DISTINCT Code FROM table(00001,00002,00003)相同的结果,但是与所有其他表列相同.
更新:如果我执行此操作:SELECT DISTINCT Code, Quantity from table
我得到:
Code Quantity
----- --------
00001 1
00002 1
00002 2
00003 1
00003 2
Run Code Online (Sandbox Code Playgroud)
我想得到:
Code Quantity
----- --------
00001 1
00002 1
00003 1
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我在我的Android应用程序中运行SQLite3数据库.我刚刚从预先填充的数据库中读取了200k行和14列.参赛作品是单词.所有列的数据类型都是文本.查询最多11个字母的单词(例如,ABANDONMENT)工作正常.但对于12或更高(例如,ABANDONMENTS),应用程序崩溃.这是logcat:
Could not allocate CursorWindow '//data//data//com.example.myapp//databases//database.sqlite' of size 2097152 due to error -12.
threadid=11: thread exiting with uncaught exception (group=0x40adf9f0)
FATAL EXCEPTION: Thread-2883
android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=861 (# cursors opened by this proc=861)
at android.database.CursorWindow.<init>(CursorWindow.java:104)
at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:162)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:156)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:161)
at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:201)
at com.example.myapp.MainActivity.query(MainActivity.java:815)
at com.example.myapp.MainActivity$2.run(MainActivity.java:356)
at java.lang.Thread.run(Thread.java:856)
Run Code Online (Sandbox Code Playgroud)
码:
query = "select * from words where col_1 = \"" + (myWord)+ "\";";
cursor = database.rawQuery(query, null);
if (cursor …Run Code Online (Sandbox Code Playgroud) 我想知道是否可以在SQlite中连接并添加空格.这就是我的意思:
SELECT NAME || SURNAME AS USER_NAME FROM USERS
Run Code Online (Sandbox Code Playgroud)
但是然后在查询中添加一些东西,让结果显示为:
Name Surname
Run Code Online (Sandbox Code Playgroud)
并不是
NameSurname
Run Code Online (Sandbox Code Playgroud)
在SQlite中这样的事情可能吗?
我有一个适度的Node.js脚本,它通过API从维基百科中提取数据并将其存储在SQLite数据库中.我正在使用这个node-sqlite3模块.
在某些情况下,我正在下载600,000篇文章的数据,并在数据库中连续存储关于每一篇文章的一些元数据.这些文章是从API中以500个为一组进行检索的.
使用500篇文章中的数据检索JSON对象的请求将对象传递给此回调:
//(db already instantiated as 'new sqlite.Database("wikipedia.sqlite");')
function callback(articles) {
articles.forEach(function(article) {
db.run("INSERT OR IGNORE INTO articles (name, id, created) VALUES (?,?,?)", [article["title"], article["pageid"], article["timestamp"]]);
});
}
Run Code Online (Sandbox Code Playgroud)
这些模块默认并行运行,但node-sqlite3的文档包含一个串行操作示例,如下所示:
db.serialize(function() {
db.run("CREATE TABLE lorem (info TEXT)");
var stmt = db.prepare("INSERT INTO lorem VALUES (?)");
for (var i = 0; i < 10; i++) {
stmt.run("Ipsum " + i);
}
stmt.finalize();
}
Run Code Online (Sandbox Code Playgroud)
我试图模仿这个,看到几乎没有性能差异.我做错了吗?现在,数据从API检索的速度比写入数据库的速度快得多,尽管速度并不慢.但是用600K个别INSERT命令击败数据库感觉很笨拙.
更新:每个接受的答案,这似乎适用于node-sqlite3,而不是本机解决方案.(见本期).
db.run("BEGIN TRANSACTION");
function callback(articles) {
articles.forEach(function(article) {
db.run("INSERT OR …Run Code Online (Sandbox Code Playgroud) 我需要用我的Android应用程序实现Microsoft同步框架.我从这里接受了帮助
使用Microsoft Sync Framework工具包的Android示例.
更新链接:SyncFrameworkAndroid
但我还是不明白工作流程.
任何人都知道如何将Microsoft同步框架与Android应用程序集成以将sqlite db同步到SQL服务器.
我在许多教程中看到,通过使用变量和Parameters.Add来构造sql语句
public void updateStudent(String @studentID, String @firstName, String @lastName)
{
SQLiteCommand command = conn.CreateCommand();
command.CommandText = "UPDATE Students SET firstName = @firstName, lastName = @lastName WHERE studentID = @studentID";
command.Parameters.Add(new SQLiteParameter("@studentID", @studentID));
command.Parameters.Add(new SQLiteParameter("@firstName", @firstName));
command.Parameters.Add(new SQLiteParameter("@lastName" , @lastName));
command.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
我们为什么不用
string.Format("Update Students SET firstName = '{0}', lastName = '{1}...", @firstName, @lastname)
Run Code Online (Sandbox Code Playgroud)
任何好处?
sqlite ×10
android ×4
ios ×2
select ×2
sql ×2
c# ×1
cursor ×1
database ×1
distinct ×1
node.js ×1
objective-c ×1
python ×1
sql-server ×1
swift ×1
transactions ×1