标签: sqlite

OperationalError:数据库已锁定

我在我的应用程序中进行了一些重复操作(测试它),突然间我得到一个奇怪的错误:

OperationalError: database is locked
Run Code Online (Sandbox Code Playgroud)

我重新启动了服务器,但错误仍然存​​在.一切都是关于什么的?

python database sqlite django locked

48
推荐指数
8
解决办法
7万
查看次数

SQLiteOpenHelper onUpgrade()混淆Android

我正在用数据库做我的第一个应用程序,我在理解onUpgrade函数时遇到了一些麻烦.我的数据库有一个包含项目和收藏列的表格,以便用户可以收藏项目.我看到的大多数实现只是删除表并重新构建它,但我不想这样做.我希望能够在表格中添加更多项目.

当应用程序通过Android市场升级时,数据库是否知道其版本号?那么我可以增加代码中的版本号,然后将其导出到市场,当用户第一次启动升级版本时,将调用onUpgrade吗?

如果是这种情况,我的onUpgrade只会从文件中提取并添加数据库项.这是一种标准的处理方式,还是有更好的方法在Android中处理它.我想尽可能保持标准.

谢谢

database sqlite android

48
推荐指数
3
解决办法
4万
查看次数

SQLite可以支持多个用户吗?

我正在尝试开发一个基于Windows的应用程序,同时有多个用户访问同一个数据库.SQLite能否一次支持多次访问?SQLite在这方面是否稳定?是什么让SQLite比MS SQL CE更好或更差?

谢谢.

sqlite

48
推荐指数
3
解决办法
5万
查看次数

在Android上简单导出和导入SQLite数据库

我正在尝试实现简单的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 database sqlite android

48
推荐指数
2
解决办法
11万
查看次数

如何将SQLite与Java连接?

我使用一个简单的代码从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)

但是这段代码给出了一个例外 …

java sqlite jdbc classpath

47
推荐指数
4
解决办法
18万
查看次数

如何配置sqlite以默认显示标头

有没有办法配置sqlite3,以便默认显示标题?

我知道我可以.headers on用来打开标题,但每次启动客户端时我都要继续键入它,因为设置不会在会话之间粘连.我希望标题永久保存.

sqlite config header

47
推荐指数
2
解决办法
2万
查看次数

如何在Python中转义SQLite表/列名的字符串?

在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库的一个怪癖.

python sqlite

47
推荐指数
6
解决办法
2万
查看次数

将ORMLite与SQLite和Android一起使用的好教程是什么?

我正在寻找一个关于如何在SQLite和Android中使用ORMLite的好的入门教程.一个qucick谷歌搜索没有产生任何有用的信息.

sqlite android ormlite

47
推荐指数
2
解决办法
4万
查看次数

使用哪种Android数据存储技术?

android文档在下面有以下选项,但没有解释每种情况最适合的情况.每种方法的优缺点是什么?例如,在什么条件下SQL会优于共享首选项?

  • 共享首选项
  • 内部存储器
  • 外部存储
  • SQLite数据库
  • 网络连接

java sqlite android data-storage sharedpreferences

47
推荐指数
3
解决办法
3万
查看次数

在sqlite中插入int时,参数不受支持

我一直四处寻找在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,)

python sqlite datetime

47
推荐指数
3
解决办法
3万
查看次数