gpt4 book ai didi

android - SQLiteProvider/SQLiteLog 错误 : No such table: products

转载 作者:行者123 更新时间:2023-11-29 21:15:55 26 4
gpt4 key购买 nike

我开始使用 novoda/SQLiteProvider在新的 Android/Gradle 项目中遵循他们的“简单”演示项目。似乎我缺少一些导致创建表的步骤/配置。这就是我最终遇到此错误的原因:

SQLiteProvider  W  No constrain against URI: 
content://com.example.providers/products
SQLiteLog E (1) no such table: products
SQLiteDatabase E Error inserting name=book
E android.database.sqlite.SQLiteException:
no such table: products (code 1): ,
while compiling: INSERT INTO products(name) VALUES (?)

E at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
E at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
E at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
E at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
E at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
E at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
E at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
E at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
E at novoda.lib.sqliteprovider.provider.action.InsertHelper.insert(InsertHelper.java:41)
E at novoda.lib.sqliteprovider.provider.SQLiteContentProviderImpl.insertInTransaction(SQLiteContentProviderImpl.java:62)
E at novoda.lib.sqliteprovider.provider.SQLiteContentProvider.bulkInsert(SQLiteContentProvider.java:109)
E at android.content.ContentProvider$Transport.bulkInsert(ContentProvider.java:233)
E at android.content.ContentResolver.bulkInsert(ContentResolver.java:1251)
E at com.example.StorageHelper.store(StorageHelper.java:21)
E at com.example.tasks.DataTask.doInBackground(DataTask.java:38)
E at android.os.AsyncTask$2.call(AsyncTask.java:288)
E at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
E at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E at java.lang.Thread.run(Thread.java:841)
dalvikvm W threadid=11: thread exiting with uncaught exception (group=0x416b7d40)
AndroidRuntime E FATAL EXCEPTION: AsyncTask #1
E Process: com.example, PID: 23203

E java.lang.RuntimeException:
An error occured while executing doInBackground()
E at android.os.AsyncTask$3.done(AsyncTask.java:300)
E at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
E at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
E at java.util.concurrent.FutureTask.run(FutureTask.java:242)
E at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
E at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E at java.lang.Thread.run(Thread.java:841)

E Caused by: android.database.SQLException:
Failed to insert row into
content://com.example.providers/products
E at novoda.lib.sqliteprovider.provider.action.InsertHelper.insert(InsertHelper.java:46)
E at novoda.lib.sqliteprovider.provider.SQLiteContentProviderImpl.insertInTransaction(SQLiteContentProviderImpl.java:62)
E at novoda.lib.sqliteprovider.provider.SQLiteContentProvider.bulkInsert(SQLiteContentProvider.java:109)
E at android.content.ContentProvider$Transport.bulkInsert(ContentProvider.java:233)
E at android.content.ContentResolver.bulkInsert(ContentResolver.java:1251)
E at com.example.StorageHelper.store(StorageHelper.java:21)
E at com.example.tasks.DataTask.doInBackground(DataTask.java:38)
E at android.os.AsyncTask$2.call(AsyncTask.java:288)
E at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E ... 4 more
Process I Sending signal. PID: 23203 SIG: 9

这是我整理的...

// app/build.gradle
dependencies {
compile 'com.android.support:support-v4:19.0.1'
compile 'com.android.support:appcompat-v7:19.0.1'
compile 'com.novoda:sqliteprovider-core:1.0.0'
}

...

// com.example.providers.ProductProvider.java
public class ProductProvider extends SQLiteContentProviderImpl {

private static final String AUTHORITY =
"content://com.example.providers";
private static final String TABLE_NAME_PRODUCTS = "products";
public static final String COL_PRODUCTS_NAME = "name";

public static final Uri PRODUCTS =
Uri.parse(AUTHORITY).buildUpon()
.appendPath(TABLE_NAME_PRODUCTS).build();
}

...

<!-- AndroidManifest.xml -->
<application
<provider
android:name=".providers.ProductProvider"
android:authorities="com.example.providers"
android:exported="false" />
</application>

...

// app/src/main/assets/migrations/001_setup.sql
CREATE TABLE IF NOT EXISTS 'products' (
_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT
);

...

Uri table = ProductProvider.PRODUCTS;
ContentValues values = new ContentValues(1);
values.put(ProductProvider.COL_PRODUCTS_NAME, "book");
getActivity().getContentResolver().insert(table, values);

最佳答案

我认为 1.0.0 版不支持多行 SQL。

两个选项,更改您的迁移文件:

//app/src/main/assets/migrations/001_setup.sql

CREATE TABLE IF NOT EXISTS 'products' (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT);

或者使用最新的快照版本:

 compile 'com.novoda:sqliteprovider-core:1.0.1-SNAPSHOT'

最新版本现已可用,不再是快照

 compile 'com.novoda:sqliteprovider-core:1.0.1'

关于android - SQLiteProvider/SQLiteLog 错误 : No such table: products,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21465492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com