我想知道可以采用 1 或 2 个参数的 execSQL 方法。
为什么使用第二种方法,如果我可以使用对象直接在SQLite db上进行操作?
例如:
db.execSQL("INSERT INTO "+ TableName +" VALUES (null, ?)",
new Object[] { type.getName() })
Run Code Online (Sandbox Code Playgroud)
这比使用这个更好吗
db.execSQL("INSERT INTO "+ TableName +" VALUES (null,"+ type.getName() +")")
Run Code Online (Sandbox Code Playgroud)
第一个例子更安全吗?
执行时更快?
更容易阅读……
还是一样?
在这里,我提供了一个完全可重现的代码,它演示了整个问题。问题是,当我从“父”表中删除行时,不会删除“子”表中的相应行,即使它们具有ON DELETE CASCADE指定的外键。所以这是代码:
>>> import sqlite3
>>> cnx = sqlite3.connect("mytest.db")
>>> cursor = cnx.cursor()
>>> cnx.execute("BEGIN")
<sqlite3.Cursor object at 0x7f0ab0923490>
>>> cursor.execute("CREATE TABLE test_table (id integer)")
<sqlite3.Cursor object at 0x7f0ab0923420>
>>> cursor.execute("CREATE UNIQUE INDEX id_primary ON test_table(id)")
<sqlite3.Cursor object at 0x7f0ab0923420>
>>> cursor.execute("INSERT INTO test_table (id) VALUES (1),(2),(3)")
<sqlite3.Cursor object at 0x7f0ab0923420>
>>> cursor.execute("CREATE TABLE test_table_2(id_fk integer, txt text, FOREIGN KEY (id_fk) REFERENCES test_table(id) ON DELETE CASCADE)")
<sqlite3.Cursor object at 0x7f0ab0923420>
>>> cursor.execute("INSERT INTO test_table_2 (id_fk, txt) VALUES …Run Code Online (Sandbox Code Playgroud) 我很确定我的问题与 Koa 或 SQLite3 的使用没有直接关系,而是与 JavaScript 的一般使用有关。
我有以下几点server.js:
var http = require('http');
var koa = require('koa');
var route = require('koa-route');
var app = koa();
var sqlite3 = require('sqlite3').verbose();
var dbFile = 'coc.db';
var db = new sqlite3.Database(dbFile);
var members = [];
var printMembers = function(name){
db.each(query, [name], function(err, row){
members.push(row);
});
return members;
}
app.use(route.get('/', index));
function *index() {
this.body = printMembers("name");
}
app.listen(8008);
console.log('Koa listening on port 8008');
Run Code Online (Sandbox Code Playgroud)
当我启动服务器并localhost:8008第一次访问时,我只得到一个空数组 ( []) 作为响应。这是变量的内容members。当我重新加载时,正如预期的那样,我得到了我的 …
我知道如何使用 MPAndroidChart 在条形图中显示原始数据,但我在实际场景中遇到了问题。我的 sqlite 数据库中有一些数据,我想在条形图中显示它们。请给我一些参考或简单的例子。
数据库表有两列月份和一些数字。例如:一月 = 200,二月 = 300,等等。
我搜索了很多,但找不到合适的。他们要么是 2-3 岁,要么不是我提到的那种类型。
提前致谢。
使用 sql 查询,我得到 100 个结果行。我需要知道这 100 行内的单行位置。我有可以循环检查的独特字段,但这需要很长时间。有没有办法可以在查询结果中获得单个项目的位置。
例如:我有一个带有唯一用户 ID 的表(12, 13, 20, 21, 34, 5)。这些用户按创建日期排序。如何id = 34使用 sql 查询获取用户位置?
我有大量的实体,例如 10k 个实体都已更新。我需要一种快速更改状态并最终将它们提交到数据库的方法。
BaseOtiveContext.Entry(Entity).State = EntityState.Modified;
Run Code Online (Sandbox Code Playgroud)
对于批量插入,我可以通过增加范围轻松获得非常快速的结果。
BaseOtiveContext.Contacts.AddRange(Entities)
Run Code Online (Sandbox Code Playgroud)
我为每个更新的实体尝试了并行,但是当集合中的对象被修改时它会抛出一个错误。
我需要一种方法来做到这一点:
BaseOtiveContext.Contacts.AddRange(Entities)
Run Code Online (Sandbox Code Playgroud)
但同时将状态更改为
.State = EntityState.Modified;
Run Code Online (Sandbox Code Playgroud) 所以,我正在处理一个项目,我想从 RecyclerView 中删除一个项目,但我希望用户能够通过在 Snackbar 中按“撤消”来恢复该项目。RecyclerView 项目从 SQLite 数据库中提取数据,当用户删除一个项目时,它也会从 RecyclerView 和数据库中我的表的相应行中删除它。我的问题是我似乎无法弄清楚如何恢复已删除的数据(SQLite 数据)。
我试图在我的 DataBaseHelper 类中创建一个方法,该方法将位置作为参数,以便我的光标知道要访问哪一行,然后我使用光标将该行的所有值分配给一个 AlarmData(我的 setter 和 getter 类)对象和将其返回给我的适配器类,以便我可以尝试在 Snackbar 的 UNDO 操作方法中恢复表的行。
这是代码:
数据库助手
// Is public AlarmData even legal? that's my setter and getter class
// and the object type I'm trying to return
public AlarmData recoverAlarms(int position) {
AlarmData recoverData = new AlarmData();
String ALARM_RESTORE_QUERY = "SELECT * FROM " + TABLE_ALARMS + " WHERE " + COLUMN_INDEX +
" = " + position + ";";
SQLiteDatabase …Run Code Online (Sandbox Code Playgroud) 我已经使用 sqlite 插入数据并取回结果,但我所做的是首先显示包含获取的值的列表,如果没有值,则列表显示空视图,指示用户将新项目添加到sqlite 数据库。但是当我尝试这个时,它向我显示一个错误,数据库中不存在这样的表。我想知道如何检查表是否已创建或是否有值。如果没有,如何向用户抛出异常以向表中插入新项目。
数据库:
public class BuisnessDatabaseHandler extends SQLiteOpenHelper {
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "receiptExample";
// Labels table name
private static final String TABLE_LABELS = "buisnesslabels";
private static final String KEY_ID = "id";
private static final String KEY_IMAGE = "image";
private static final String KEY_STATUS="status";
private static final String KEY_UPLOADSTATUS = "uplaodstatus";
private static final String KEY_USERID="userid";
SQLiteDatabase db;
public BuisnessDatabaseHandler(Context context) {
super(context, …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我新创建的 SQLite 数据库中创建一个表。出于某种原因,我收到了 SQLException:
try {
logger.debug("Trying to create table powerperms_permissions if not exists");
statement.execute("CREATE TABLE IF NOT EXISTS powerperms_permissions ( "
+ "id INT NOT NULL AUTOINCREMENT,"
+ "uuid VARCHAR ( 64 ) NOT NULL,"
+ "permission VARCHAR ( 64 ) NOT NULL,"
+ "world VARCHAR ( 32 ) NULL,"
+ "PRIMARY KEY ( id ) );");
} catch (SQLException e) {
logger.error("Couldn't create permissions table",e);
}
Run Code Online (Sandbox Code Playgroud)
投掷
[07:49:17 ERROR]: [PowerPerms] Couldn't create permissions table
java.sql.SQLException: [SQLITE_ERROR] SQL error …Run Code Online (Sandbox Code Playgroud) 我正在抓取网站以获取某些详细信息,然后从那里我想将它们保存在数据库中,以下是上述任务的功能:
def store(title, body):
conn = sqlite3.connect('test2.db')
print("Connection established")
conn.execute("insert into crawled (title, body) values (\"%s\", \"%s\");",(title, body))
conn.commit()
print("Records Created Successfully")
conn.close()
Run Code Online (Sandbox Code Playgroud)
但我不断收到此错误:
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 2 supplied
Run Code Online (Sandbox Code Playgroud)
我已经浏览了Stack 中所有可用的解决方案,但没有一个解决方案可以解决我的问题,请有人告诉我我的错误。