标签: sqlite

Android在sql查询字符串中引用

我想执行如下查询:

uvalue = EditText( some user value );
p_query = "select * from mytable where name_field = '" +  uvalue + "'" ;
mDb.rawQuery( p_query, null );
Run Code Online (Sandbox Code Playgroud)

如果用户在输入中输入单引号,则会崩溃.如果您将其更改为:

p_query = "select * from mytable where name_field = \"" +  uvalue + "\"" ;
Run Code Online (Sandbox Code Playgroud)

如果用户在输入中输入双引号,它就会崩溃.当然,他们总是可以输入单引号和双引号.

sqlite android

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

Python和SQLite:插入表中

我有一个列表,每行有3行代表一个表行:

>>> print list
[laks,444,M]
[kam,445,M]
[kam,445,M]
Run Code Online (Sandbox Code Playgroud)

如何将此列表插入表中?

我的表结构是:

tablename(name varchar[100], age int, sex char[1])

或者我应该使用列表以外的东西?

这是实际的代码部分:

    for record in self.server:
        print "--->",record
        t=record
        self.cursor.execute("insert into server(server) values (?)",(t[0],));
        self.cursor.execute("insert into server(id) values (?)",(t[1],))
        self.cursor.execute("insert into server(status) values (?)",(t[2],));
Run Code Online (Sandbox Code Playgroud)

分别插入三个字段可以正常工作,但是使用单行

self.cursor.execute("insert into server(server,c_id,status) values (?,?,?)",(t[0],),(t[1],),(t[2],))

要么

self.cursor.execute("insert into server(server,c_id,status) values (?,?,?)",(t),)

才不是.

python sqlite list insert

44
推荐指数
4
解决办法
15万
查看次数

SQLite修改列

我需要修改SQLite数据库中的列,但由于数据库已经在生产中,我必须以编程方式执行此操作.根据我的研究,我发现为了做到这一点,我必须做到以下几点.

  • 使用新架构创建新表
  • 将数据从旧表复制到新表
  • 放旧桌子
  • 将新表重命名为旧表名

对于应该相对容易的事情而言,这似乎是一项荒谬的工作量.有没有更简单的方法?我需要做的就是更改现有列的约束并为其指定默认值.

sqlite alter-table

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

在Python和sqlite中转义字符

我有一个python脚本,将原始电影文本文件读入sqlite数据库.

我使用re.escape(title)将转义字符添加到字符串中,以使它们在执行插入之前安全.

为什么这不起作用:

In [16]: c.execute("UPDATE movies SET rating = '8.7' WHERE name='\'Allo\ \'Allo\!\"\ \(1982\)'")
--------------------------------------------------------------------------- OperationalError                       Traceback (most recent call last)

/home/rajat/Dropbox/amdb/<ipython console> in <module>()

OperationalError: near "Allo": syntax error
Run Code Online (Sandbox Code Playgroud)

然而,这有效(在两个地方删除):

In [17]: c.execute("UPDATE movies SET rating = '8.7' WHERE name='Allo\ Allo\!\"\ \(1982\)'") Out[17]: <sqlite3.Cursor object at 0x9666e90>
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚.我也不能放弃这些主流报价,因为它们实际上是电影片头的一部分.谢谢.

python sqlite

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

如何获取GROUP BY查询的总行数?

从PDO手册:

PDOStatement :: rowCount()返回 由相应PDOStatement对象执行的最后一个DELETE,INSERT或UPDATE语句影响 的行数.

如果关联的PDOStatement执行的最后一个SQL语句是 SELECT语句,则某些数据库可能会返回该语句返回的行数.但是,并不保证所有数据库都有这种行为,不应依赖于便携式应用程序.

我最近才发现这一点.我刚刚将我的数据库抽象层更改为不再使用SELECT COUNT(1) ...,因为只是查询实际的行然后计算结果会更有效率.现在PDO不支持!?

我没有将PDO用于MySQL和Pg​​SQL,但我是为SQLite做的.有没有办法(没有完全改变dbal背部)在PDO中计算这样的行?在MySQL中,这将是这样的:

$q = $db->query('SELECT a, b, c FROM tbl WHERE oele = 2 GROUP BY boele');
$rows = $q->num_rows;
// and now use $q to get actual data
Run Code Online (Sandbox Code Playgroud)

使用MySQLi和PgSQL驱动程序,这是可能的.所有的PDO都不是!?

PS.我的初始解决方案是扩展SQLResult-> count方法(我自己的)以替换为SELECT ... FROM,SELECT COUNT(1) FROM并且只返回该数字(非常低效,但仅适用于SQLite PDO).但这还不够好,因为在上面的示例查询中是a GROUP BY,这会改变其含义/功能COUNT(1).

php database sqlite pdo

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

SQLite架构信息元数据

我需要在SQLite数据库中获取列名及其表.我需要的是一个包含2列的结果集:table_name | column_name.

在MySQL中,我能够通过数据库上的SQL查询获取此信息INFORMATION_SCHEMA.但是SQLite提供了表sqlite_master:

sqlite> create table students (id INTEGER, name TEXT);
sqlite> select * from sqlite_master;
  table|students|students|2|CREATE TABLE students (id INTEGER, name TEXT)
Run Code Online (Sandbox Code Playgroud)

这导致DDL构造查询(CREATE TABLE)对我没有帮助,我需要解析它以获取相关信息.

我需要获取表的列表并将它们与列连接,或者只获取列和表名列.所以PRAGMA table_info(TABLENAME)不适合我,因为我没有表名.我想获取数据库中的所有列元数据.

有没有更好的方法通过查询数据库来获取结果集的信息?

sqlite information-schema

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

数据库的SQLiteConnection对象泄露了!请修复您的申请

我的申请给了我这个警告

数据库'+ data + data + com_example_test + database'的SQLiteConnection对象被泄露了!请修复您的应用程序以正确结束正在进行的事务,并在不再需要时关闭数据库.

但是每次使用后我都会关闭db对象和光标.

        try {
            while (cursor.moveToNext()) {
              ...
            }
        } finally {
            if (cursor != null && !cursor.isClosed())
                cursor.close();
        }

...
    db.close();
Run Code Online (Sandbox Code Playgroud)

你能帮我理解是什么问题吗?谢谢!!!

UPDATE!虽然一切都关闭了,但 我从这篇帖子中尝试了这个解决方案

我不再有内存泄漏,这是一个很好的解决方案吗?

java database sqlite android

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

运行命令行sqlite3查询并退出

我们可以使用-cmd选项sqlite3来运行查询,但随后sqlite3打开数据库并在那里等待交互式输入.我们如何从命令行运行查询sqlite3并退出?

谢谢,

sqlite shell command-line

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

Android P - 从资产复制数据库后'SQLite:没有这样的表错误'

我有一个数据库保存在我的应用程序资产文件夹中,并在应用程序首次打开时使用以下代码复制数据库.

inputStream = mContext.getAssets().open(Utils.getDatabaseName());

        if(inputStream != null) {

            int mFileLength = inputStream.available();

            String filePath = mContext.getDatabasePath(Utils.getDatabaseName()).getAbsolutePath();

            // Save the downloaded file
            output = new FileOutputStream(filePath);

            byte data[] = new byte[1024];
            long total = 0;
            int count;
            while ((count = inputStream.read(data)) != -1) {
                total += count;
                if(mFileLength != -1) {
                    // Publish the progress
                    publishProgress((int) (total * 100 / mFileLength));
                }
                output.write(data, 0, count);
            }
            return true;
        }
Run Code Online (Sandbox Code Playgroud)

上面的代码运行没有问题,但是当你尝试查询数据库时,你会得到一个SQLite:没有这样的表异常.

此问题仅发生在Android P中,所有早期版本的Android都能正常工作.

这是Android P的已知问题还是有些变化?

sqlite android android-9.0-pie

44
推荐指数
4
解决办法
1万
查看次数

何时关闭android上的数据库连接?每次操作完成后或应用程序退出后

我有一个经常访问本地sqlite3数据库的android应用程序,出于性能考虑,所以我始终保持连接打开.但我的一位朋友建议我每次操作都要打开/关闭连接.

1)你们对这两种方法的看法是什么?利弊/利弊.2)我做了一些测试,发现数据库连接没有太多的性能开销.DB连接的性能开销是否因DB的大小而异?

database sqlite connection android

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