sqlite数据库

[743]python sqlite3.ProgrammingError: SQLite objects created in a thread can only be used

本小妞迷上赌 提交于 2020-01-15 08:13:59
错误 sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 12096 and this is thread id 19564 引言: SQLite是基于文件系统的mini数据库,我们用以存放简便的数据,本文将描述在代码中碰到的并发问题。 代码为多个线程进行数据库的读写操作。这里简要列出关键的数据库操作,主要集中在insert/update操作。 问题分析 从错误信息来分析,问题是sqlite本身应对多个线程并发访问过程中的冲突问题,由一个线程创建并访问的sqlite的数据库,无法允许另外一个线程进行访问。这里的解决办法可能有2个: 通过队列规避多线程的访问 通过设置或者多个访问管道,规避线程之间的冲突问题 从技术上评估,2个方法都可以解决问题,哪种更具优势? 问题解决 通过网上搜索发现,其实可以通过设置sqlite文件的读取方式,可以简单规避掉线程之间的冲突问题: def initDB(self, file_path): self.file_path = file_path self.cx = sqlite3.connect(file_path, check_same

SQLite

泄露秘密 提交于 2020-01-13 02:24:08
python接口开发: import sqlite3 def createTable(conn): sql_create = ''' CREATE TABLE IF NOT EXISTS employees ( id INT PRIMARY KEY NOT NULL, name TEXT NOT NULL, salary REAL )''' try: conn.execute(sql_create) return 0 except: return 1 def insert(conn, id, name, salary): sql_insert = ''' INSERT INTO employees(id, name, salary) SELECT ?, ?, ? WHERE NOT EXISTS(SELECT * FROM employees WHERE id=?) ''' try: conn.execute(sql_insert, (id, name, salary, id)) print "insert a line of data successfully" return 0 except: print "insert a line of data failed ! id = ", id return 1 def select(conn, id): sql_select =

SQLite数据库

一曲冷凌霜 提交于 2020-01-12 18:46:46
SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 - 只要确保SQLite的二进制文件存在即可开始创建、连接和使用数据库。如果您正在寻找一个嵌入式数据库项目或解决方案,SQLite是绝对值得考虑。 2. 安装 SQLite on Windows 进入 SQL 下载页面: http://www.sqlite.org/download.html 下载 Windows 下的预编译二进制文件包: sqlite-shell-win32-x86- <build#> .zip sqlite-dll-win32-x86- <build#> .zip 注意: <build#> 是 sqlite 的编译版本号 将 zip 文件解压到你的磁盘,并将解压后的目录添加到系统的 PATH 变量中,以方便在命令行中执行 sqlite 命令。 可选: 如果你计划发布基于 sqlite 数据库的应用程序,你还需要下载源码以便编译和利用其 API sqlite-amalgamation- <build#> .zip SQLite on Linux 在 多个 Linux 发行版提供了方便的命令来获取 SQLite: /* For Debian or

JDBC访问及操作SQLite数据库

▼魔方 西西 提交于 2020-01-12 17:34:03
  SQLite 是一个开源的嵌入式关系数据库,其特点是高度便携、使用方便、结构紧凑、高效、可靠。 与其他数据库管理系统不同, SQLite 的安装和运行非常简单,在大多数情况下,只要确保 SQLite 的二进制文件存在即可开始创建、连接和使用数据库。    SQLite 的下载页面: http://www.sqlite.org/download.html   window 操作系统下载: sqlite-dll-win32-x86-3081002.zip及sqlite-shell-win32-x86-3081002.zip。解压 2 个压缩包,并将解压后的路径添加到系统变量的 path 中。   在命令行中操作 SQLite 数据库的做基本的命令如下。   创建数据库:sqlite3 test.db   创建表:sqlite> create table mytable(id integer primary key, value text);   插入数据:sqlite> insert into mytable(id, value) values(1, 'Micheal');   查询数据:sqlite> select * from mytable;   JDBC connector for SQLite 的地址为: https://bitbucket.org/xerial

Linux安装SQLite轻量级数据库

强颜欢笑 提交于 2020-01-12 17:33:01
  SQLite,是一款 轻型的数据库 ,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的 设计目标是嵌入式的 ,而且目前已经在很多嵌入式产品中使用了它,它 占用资源非常的低 ,在嵌入式设备中,可能只需要几百K的内存就够了。它能够Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。 主流的sqlite3,占用内存小,处理时速度快,跨平台 01、下载 https://www.sqlite.org/download.html 02、安装 bin文件安装 解压下载的文件,放到 /usr/bin/ rpm文件安装 yum install -y sqlite sqlite-devel 03、运行 sqlite3 04、测试基本命令 sqlite3 test.db #创建数据库 create table mytable(id integer primary key, value text);

学习SQLite基本语句

不羁岁月 提交于 2020-01-12 17:31:04
SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 - 只要确保SQLite的二进制文件存在即可开始创建、连接和使用数据库。如果您正在寻找一个嵌入式数据库项目或解决方案,SQLite是绝对值得考虑。 2. 安装 SQLite on Windows 进入 SQL 下载页面: http://www.sqlite.org/download.html 下载 Windows 下的预编译二进制文件包: sqlite-shell-win32-x86- <build#> .zip sqlite-dll-win32-x86- <build#> .zip 注意: <build#> 是 sqlite 的编译版本号 将 zip 文件解压到你的磁盘,并将解压后的目录添加到系统的 PATH 变量中,以方便在命令行中执行 sqlite 命令。 可选: 如果你计划发布基于 sqlite 数据库的应用程序,你还需要下载源码以便编译和利用其 API sqlite-amalgamation- <build#> .zip SQLite on Linux 在 多个 Linux 发行版提供了方便的命令来获取 SQLite: ? 1 2 3 4 5 /*

SQLite学习手册(内存数据库)

旧时模样 提交于 2020-01-12 17:27:36
一、内存数据库: 在SQLite中,数据库通常是存储在磁盘文件中的。然而在有些情况下,我们可以让数据库始终驻留在内存中。最常用的一种方式是在调用sqlite3_open()的时候,数据库文件名参数传递":memory:",如: rc = sqlite3_open(" :memory: ", &db); 在调用完以上函数后,不会有任何磁盘文件被生成,取而代之的是,一个新的数据库在纯内存中被成功创建了。由于没有持久化,该数据库在当前数据库连接被关闭后就会立刻消失。需要注意的是,尽管多个数据库连接都可以通过上面的方法创建内存数据库,然而它们却是不同的数据库,相互之间没有任何关系。事实上,我们也可以通过Attach命令将内存数据库像其他普通数据库一样,附加到当前的连接中,如: ATTACH DATABASE ' :memory: ' AS aux1; 二、临时数据库: 在调用sqlite3_open()函数或执行ATTACH命令时,如果数据库文件参数传的是空字符串,那么一个新的临时文件将被创建作为临时数据库的底层文件,如: rc = sqlite3_open("", &db); 或 ATTACH DATABASE '' AS aux2; 和内存数据库非常相似,两个数据库连接创建的临时数据库也是各自独立的,在连接关闭后,临时数据库将自动消失,其底层文件也将被自动删除。

Sqlite入门使用及常见问题

佐手、 提交于 2020-01-12 06:41:30
下载及启用sqlite SQLite是一款轻型的数据库,占用资源非常的低,处理速度很快,如果想要快速在自己电脑中搭建一个小型数据库,非常推荐使用。 可以在官网下载数据库文件。官网下载地址:https://www.sqlite.org/download.html。 以windows为例:最好下载第三个带.exe的文件,即使电脑是64位也没有关系,64位的电脑能执行32位的应用程序。 下载后解压会发现有三个文件,经常使用的就是第二个.exe文件。 可以发现它非常小,放在电脑想要的位置后,把文件路径添加到环境变量中就能通过CMD调用了。 有一个非常方便的操作就是直接把sqlite.exe文件放到和数据库同一个文件夹中,想要打开数据库的时候,直接双击该文件,然后执行代码。 .open DatabaseName.db 就在文件夹里创建一个名为DatabaseName.db的数据库了。下次要打开该数据库,执行同样的代码就行,注意数据库名称不要打错了,不然会创建一个新的空数据库。 创建表格和数据库查询和其他数据库类似,不再赘述。 sqlite常用命令 查看所有表格 .tables 查看所有表结构 .schema 可以查看该数据库中所有表格的结构,每个字段的数据类型。可以和后文中的.output联合使用,将表结构导出。 查看所有命令 .help 即可查看所有的sqlite命令, 数据库完整性检验

Android SQLITE 操作工具类

一笑奈何 提交于 2020-01-12 04:18:08
首先创建一个类 DatabaseHelper 继承SQLiteOpenHelper帮助类,定义数据库版本,数据库名称,创建表名。 private static final int DATABASE_VERSION = 1; //数据库版本号 private static final String DATABASE_NAME = "Test"; //数据库名称 private static final String HR_B_DEPT = "HR_B_DEPT";//部门 初始化 public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } 创建表 @Override public void onCreate(SQLiteDatabase db) { String sqldept = "create table HR_B_DEPT(INNERID String PRIMARY KEY ,DEPTCODE text,DEPTNAME text,PARENTID text)"; db.execSQL(sqldept); } 创建一个类 UseDatabase, public class UseDatabase { Context context;

android sqlite语句 字符串类型自动转换导致查询失败

时间秒杀一切 提交于 2020-01-11 09:58:06
今天突然发现数据库语句查询失败,主要查询方式就两种。 前提:item1,projectName,type都为String 类型 1、 String sql = String.format("SELECT '%s' FROM ItemParas WHERE name ='%s' AND sampleType = '%s' ",item1,projectName,type); Cursor c = db.rawQuery(sql,null); 2、 String sql = "select ? from itemparas where name=? and sampleType=? "; c = db.rawQuery(sql,new String[] { item1,projectName,type }); 还是不行。又拿Navicat Premium 试了好几个版本,才发现是projetName出了问题。 但 Type也是String类型啊? 最后用转义字符解决了。。。。 String sql = String.format("SELECT \" %s \" FROM ItemParas WHERE name = \" %s \" AND sampleType = \" %s \" ",item1,projectName,type); Cursor c = db.rawQuery