在iOS和Android上的本机应用程序项目中,我们在android上遇到了 sqlite3 的问题。我们想通过ATTACH DATABASE(sql-command)打开两个数据库并将一个数据库连接到第二个数据库。
打开sqlite3数据库“user.db”(android上的最终原生文件路径 设备是'/data/user/0/com.company.app/databases/user.db',我们使用 android.database.sqlite.SQLiteDatabase )
打开sqlite3数据库“system.db”
将用户数据库附加到系统数据库:
在SQLiteDatabase-Instance for system.db-database上,我们执行
ATTACH DATABASE '/data/user/0/com.company.app/databases/user.db' AS dbUser
这会出现以下错误:
数据库dbUser已在使用中(代码1)
sqlite3 for iOS上的相同sql语句工作正常,没有任何错误。
为了完整起见。使用以下语句打开数据库:
import android.database.sqlite.SQLiteDatabase;
SQLiteDatabase mydb = SQLiteDatabase.openDatabase(dbfile.getAbsolutePath(), null, openFlags);
要求谷歌提供此类错误消息会让很多网站声明,不允许将TEMP用作数据库别名。由于我们使用“dbUser”而不是TEMP,因此应该有另一个原因。我们现在无法理解。
有人可以帮忙吗?
答案 0 :(得分:1)
您无需打开要附加的数据库; ATTACH语句已打开它。
无论如何,错误“Database xxx 已被使用”表示某个数据库已附加了该特定名称。
代码的问题在于它被执行了两次。
答案 1 :(得分:0)
通常在执行几次附加命令时会发生这种情况, 您可以使用DETACH命令
# Let's first make sure it works on Python 2.x and 3.x by shadowing the input
try:
input = raw_input # on Python 2.x use raw_input instead of input
except NameError:
pass
result = 0 # tip: use a name that's not already built-in, like result
while True: # loop 'forever'...
data = input() # don't print anything when asking for input
try:
data = int(data) # don't print anything to STDOUT
if not data: # only if the integer is 0
break
result += data # add to the final result
except ValueError: # risen if the input is not an integer...
pass # so just ignore it
print("The sum is: " + str(result)) # finally, print the result
,然后再次连接数据库或使用新名称附加ATTACH,例如:
DETACH DATABASE 'database_name';
记住具有新名称的ATTACH时,与数据库的其他连接仍处于打开状态。
答案 2 :(得分:-1)
没有太多介入,不是“在打开数据库之前附加你做的事情。我一直在使用常规的sql express版本,我相信我不能在打开时附加或分离。附加可能在iOS和android上有不同的处理方式这可能会导致一个问题