我在我的应用程序中进行了一些重复操作(测试它),突然间我得到一个奇怪的错误:
OperationalError: database is locked
Run Code Online (Sandbox Code Playgroud)
我重新启动了服务器,但错误仍然存在.一切都是关于什么的?
我正在用数据库做我的第一个应用程序,我在理解onUpgrade函数时遇到了一些麻烦.我的数据库有一个包含项目和收藏列的表格,以便用户可以收藏项目.我看到的大多数实现只是删除表并重新构建它,但我不想这样做.我希望能够在表格中添加更多项目.
当应用程序通过Android市场升级时,数据库是否知道其版本号?那么我可以增加代码中的版本号,然后将其导出到市场,当用户第一次启动升级版本时,将调用onUpgrade吗?
如果是这种情况,我的onUpgrade只会从文件中提取并添加数据库项.这是一种标准的处理方式,还是有更好的方法在Android中处理它.我想尽可能保持标准.
谢谢
我正在尝试开发一个基于Windows的应用程序,同时有多个用户访问同一个数据库.SQLite能否一次支持多次访问?SQLite在这方面是否稳定?是什么让SQLite比MS SQL CE更好或更差?
谢谢.
我正在尝试实现简单的SQLite导出/导入以进行备份.导出只是存储原始current.db文件的副本.我想要导入的是删除旧current.db文件并将imported.db文件重命名为current.db.这可能吗?当我尝试这个解决方案时,我收到以下错误:
06-30 13:33:38.831: ERROR/SQLiteOpenHelper(23570):
android.database.sqlite.SQLiteDatabaseCorruptException: error code 11: database disk image is malformed
Run Code Online (Sandbox Code Playgroud)
如果我在SQLite浏览器中查看原始数据库文件,它看起来很好.
我使用一个简单的代码从Java应用程序访问SQLite数据库.我的代码是
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class ConnectSQLite
{
public static void main(String[] args)
{
Connection connection = null;
ResultSet resultSet = null;
Statement statement = null;
try
{
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:D:\\testdb.db");
statement = connection.createStatement();
resultSet = statement
.executeQuery("SELECT EMPNAME FROM EMPLOYEEDETAILS");
while (resultSet.next())
{
System.out.println("EMPLOYEE NAME:"
+ resultSet.getString("EMPNAME"));
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
resultSet.close();
statement.close();
connection.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码给出了一个例外 …
有没有办法配置sqlite3,以便默认显示标题?
我知道我可以.headers on用来打开标题,但每次启动客户端时我都要继续键入它,因为设置不会在会话之间粘连.我希望标题永久保存.
在SQLite查询中使用变量值的标准方法是"问号样式",如下所示:
import sqlite3
with sqlite3.connect(":memory:") as connection:
connection.execute("CREATE TABLE foo(bar)")
connection.execute("INSERT INTO foo(bar) VALUES (?)", ("cow",))
print(list(connection.execute("SELECT * from foo")))
# prints [(u'cow',)]
Run Code Online (Sandbox Code Playgroud)
但是,这仅适用于将值替换为查询.用于表或列名称时失败:
import sqlite3
with sqlite3.connect(":memory:") as connection:
connection.execute("CREATE TABLE foo(?)", ("bar",))
# raises sqlite3.OperationalError: near "?": syntax error
Run Code Online (Sandbox Code Playgroud)
sqlite3模块和PEP 249都没有提到转义名称或值的功能.据推测,这是为了阻止用户用字符串组装他们的查询,但这让我感到茫然.
什么函数或技术最适合在SQLite中为列或表使用变量名?我非常希望能够在没有任何其他依赖项的情况下执行此操作,因为我将在我自己的包装器中使用它.
我找了但是找不到SQLite语法相关部分的清晰完整的描述,用来编写我自己的函数.我想确保这适用于SQLite允许的任何标识符,因此试错法对我来说太不确定了.
SQLite 用于"引用标识符,但我不确定只是转义它们就足够了.PHP sqlite_escape_string函数的文档表明某些二进制数据也可能需要转义,但这可能是PHP库的一个怪癖.
我正在寻找一个关于如何在SQLite和Android中使用ORMLite的好的入门教程.一个qucick谷歌搜索没有产生任何有用的信息.
android文档在下面有以下选项,但没有解释每种情况最适合的情况.每种方法的优缺点是什么?例如,在什么条件下SQL会优于共享首选项?
我一直四处寻找在SQLite3中存储日期和时间,目的是使用以后的比较来检索记录,例如 SELECT * WHERE date1 < date2
我终于放弃了尝试存储datetime.datetime对象并决定使用UNIX时间戳,因为它们只是一个int并且易于操作但我仍然遇到错误.
import sqlite3 as lite
import datetime
import time
conn = lite.connect('dispatcher.db')
cur = conn.cursor()
query = "create table if not exists new_test (curent_dt)"
cur.execute(query)
conn.commit()
now = datetime.datetime.now() - datetime.timedelta(minutes=60)
temp = int(time.mktime(now.timetuple()))
cur.execute('insert into new_test (curent_dt) values (? )', (temp))
conn.commit()
conn.close()
Run Code Online (Sandbox Code Playgroud)
返回以下错误:
cur.execute('insert into new_test(curent_dt)values(?)',(temp))ValueError:参数属于不支持的类型
在进一步调查问题之后,我发现你必须使用尾随逗号来创建单个元素元组,例如 (temp,)