我试图在应用程序同步时更新数据库中每一行的"html"列.我已经使用本教程在这里将应用程序添加到"配置文件"列表中.这是我在SyncAdapter中使用的代码:
private static void performSync(Context context, Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) throws OperationCanceledException {
MySQLiteHelper openHelperClass;
SQLiteDatabase sqliteDatabase;
String str;
mContentResolver = context.getContentResolver();
Log.i(TAG, "performSync: " + account.toString());
Log.v(TAG, "CDS Opened!");
openHelperClass = new MySQLiteHelper(context);
sqliteDatabase = openHelperClass.getWritableDatabase();
Log.v(TAG, "CDS loaded db!");
Cursor cursor = sqliteDatabase.query("offline", null, null, null, null, null, null);
Log.v(TAG, "CDS queried!");
if(cursor != null) {
Log.v(TAG, "Cursor not null!");
Log.v(TAG,cursor.toString());
if(cursor.moveToFirst()) {
Log.v(TAG, "first pos");
while(cursor.moveToNext()) {
Log.v(TAG, "1"); …Run Code Online (Sandbox Code Playgroud) 我有一个子查询的查询,返回多行.
我有一个包含列表的表和一个包含用户的表.我在这两个表之间创建了一个多对多表,称为list_user.
LIST
id INTEGER
list_name TEXT
list_description TEXT
USER
id INTEGER
user_name TEXT
LIST_USER
id INTEGER
list_id INTEGER
user_id INTEGER
Run Code Online (Sandbox Code Playgroud)
我的子查询查询
SELECT * FROM user WHERE id = (SELECT user_id FROM list_user WHERE list_id = 0);
Run Code Online (Sandbox Code Playgroud)
子查询工作(我在代码中使用它,所以0实际上是一个变量),它返回多行.但是上层查询只返回一行,这很合乎逻辑; 我检查id是否等于某个东西,它只检查子查询的第一行.
如何更改我的语句,以便在上层查询中获得多行?
当我尝试从我的Activity中的数据库SQLite获取数据时
DataBaseAdapterCars mDbHelper = new DataBaseAdapterCars(this);
mDbHelper.createDatabase();
mDbHelper.open();
Car[] carsList= mDbHelper.getDataDBCarsArray(uso, eta,
category, class);
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
12-10 17:14:47.069: E/AndroidRuntime(17936): FATAL EXCEPTION: main
12-10 17:14:47.069: E/AndroidRuntime(17936): java.lang.StringIndexOutOfBoundsException
12-10 17:14:47.069: E/AndroidRuntime(17936): at android.app.ContextImpl.validateFilePath(ContextImpl.java:1649)
12-10 17:14:47.069: E/AndroidRuntime(17936): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:555)
12-10 17:14:47.069: E/AndroidRuntime(17936): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
12-10 17:14:47.069: E/AndroidRuntime(17936): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
12-10 17:14:47.069: E/AndroidRuntime(17936): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
12-10 17:14:47.069: E/AndroidRuntime(17936): at com.my.app.db.DataBaseHelper.createDataBase(DataBaseHelper.java:36)
12-10 17:14:47.069: E/AndroidRuntime(17936): at com.my.app.db.DataBaseAdapterCars.createDatabase(DataBaseAdapterCars.java:42)
12-10 17:14:47.069: E/AndroidRuntime(17936): at com.my.app.Cars.initializeData(Cars.java:111)
12-10 17:14:47.069: E/AndroidRuntime(17936): at com.my.app.Cars$MyAsync$1.run(Cars.java:156)
12-10 17:14:47.069: E/AndroidRuntime(17936): at android.os.Handler.handleCallback(Handler.java:587)
12-10 17:14:47.069: E/AndroidRuntime(17936): at android.os.Handler.dispatchMessage(Handler.java:92) …Run Code Online (Sandbox Code Playgroud) 我有以下型号:
class Model(...):
date = DateField()
user = ForeignKey()
data = ForeignKey()
time = IntegerField()
Run Code Online (Sandbox Code Playgroud)
我想为每个用户提供单个数据的时间总和字段,所以我这样做:
Model.objects.filter(date=..., data=...).values('user_id').annotate(time=Sum('time'))
Run Code Online (Sandbox Code Playgroud)
但我收到的结果如下:
[{'user_id':1,'时间':20},{'user_id':1,'时间':10},{'user_id':2,'时间':20}]
所以分组不起作用.我检查了django生成的查询,我不知道为什么django也使用日期和数据进行分组,而不仅仅是用户.我做错了什么或者这只是SQLite问题?
我正在开发一个能够通过将问题导出到数据库来进行测验的程序.我在互联网上看了一下,它说在python中导入或导出到数据库的最简单方法之一是使用SQLite3插件,所以我正在尝试它.这是我第一次我在python中使用了SQLite3插件,并且我在self.connection.commit()中遇到语法错误:
def AddQuestion(self, Question, Answer1, Answer2, Answer3, Answer4):
self.cursor.execute("""INSERT INTO questions
VALUES (?, ?, ?, ?, ?, ?)""", (None, Question, Answer1, Answer2, Answer3, Answer4, CorrectAnswer)
self.connection.commit()
Run Code Online (Sandbox Code Playgroud)
如果我通过在它之前添加#将其转换为注释,它会告诉我此处的打印是语法错误:
print ("Would you like to make a test? Or would you like to take a test?")
Run Code Online (Sandbox Code Playgroud)
也许是我的缩进,或者我做错了什么?
import squlite3
class QuestionStorage(object):
def _init_(self, path):
self.connection = sqlite3.connect(path)
self.cursor = self.connection.cursor ()
def Close(self):
self.cursor.close()
self.connection.close()
def CreateDb(self):
query = """CREATE TABLE questions
(id INTEGER PRIMARY KEY, Question TEXT, Answer1 TEXT, Answer2 TEXT, Answer3 …Run Code Online (Sandbox Code Playgroud) 如果libsqlite不是线程安全的,则类似这样的代码
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
__block NSArray *__albumsCollection = albumCollections;
dispatch_apply(count, queue, ^(size_t i)
{
MPMediaItem *albumObj = [[__albumsCollection objectAtIndex:i] representativeItem];
///// making some sqlite queries
});
Run Code Online (Sandbox Code Playgroud)
会引发一个BAD_EXEC。
那么如何使此代码线程安全?
我的解决方案是使用主队列
dispatch_apply(count, dispatch_get_main_queue(), ^(size_t i)
{
/// my sqllite queries
});
Run Code Online (Sandbox Code Playgroud)
但我对此不满意。如何使它更好?
在我的应用程序中,我想获取特定行的id.我使用以下代码:
public String getid(String heading) throws SQLException
{
System.out.println("ddbpos="+heading);
long recc=0;
String rec=null;
Cursor mCursor = db.rawQuery(
"SELECT id FROM savedstoriestable WHERE heading="+heading , null);
if (mCursor != null)
{
mCursor.moveToFirst();
recc=mCursor.getLong(0);
rec=String.valueOf(recc);
}
return rec;
}
Run Code Online (Sandbox Code Playgroud)
我的数据库看起来像这样:
id heading Description
1 Congress countdown for 2014 polls: ghdfsfdghsdjfsdfhds
Possibility of UPA-III hinges on how other
Run Code Online (Sandbox Code Playgroud)
但它显示" Force to close"错误:
我的Logcat如下:
12-24 12:02:10.733: E/AndroidRuntime(22030): Uncaught handler: thread main exiting due to uncaught exception
12-24 12:02:10.804: E/AndroidRuntime(22030): android.database.sqlite.SQLiteException: near "countdown": syntax …Run Code Online (Sandbox Code Playgroud) 我不认为我Cursor非常了解我几乎可以肯定我的代码可能是错的,所以我要将我的整个代码链接起来
package com.tanukiproductions.battleforchristmas;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class SQLiteTable {
public static final String KEY_ROWID = "_id";
public static final String KEY_LEVEL = "level";
public static final String KEY_HEALTH = "health";
public static final String KEY_NAME = "name";
public static final String KEY_CRIT = "crit";
public static final String KEY_CRIT_RANGE = "crit_range";
public static final String KEY_CRIT_INC = "crit_increment";
public static final String KEY_HIT_RANGE = "hit_range";
public static final …Run Code Online (Sandbox Code Playgroud) 我有桌子:
CREATE TABLE Reports (
_id INTEGER NOT NULL PRIMARY KEY,member_id INTEGER,
is_conf BOOLEAN,
name TEXT,
started INTEGER,
finished INTEGER,
description TEXT,
obj_id INTEGER NOT NULL,
FOREIGN KEY (obj_id) REFERENCES Objects (_id));Run Code Online (Sandbox Code Playgroud)
我想把数据拿到哪里member_id = NULL.String sql = "SELECT _id, name FROM Reports WHERE member_id = NULL";
Cursor cursor = db.rawQuery(sql, null);Run Code Online (Sandbox Code Playgroud)
不起作用.
我有下面的代码定义的表
CREATE TABLE Products
(
P_Id INTEGER PRIMARY KEY,
name TEXT,
price REAL,
sellPrice REAL,
plu INTEGER,
codeBar TEXT,
tax INTEGER,
amount INTEGER,
date TEXT
);
Run Code Online (Sandbox Code Playgroud)
当我尝试执行查询时,我得到一个语法错误(这是一个准备好的语句)
select *
from Products
where P_Id = min(select P_Id from Products where codeBar=?);
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?这个查询有什么问题?
我得到的确切错误消息是:
java.sql.SQLException:接近"select":语法错误
谢谢你的帮助.