我已经在我的桌子上创建了我的桌子SQLiteOpenHelper onCreate()但收到了
SQLiteException: no such table
Run Code Online (Sandbox Code Playgroud)
要么
SQLiteException: no such column
Run Code Online (Sandbox Code Playgroud)
错误.为什么?
注意:
(这是每周数十个类似问题的合并摘要.试图在这里提供一个"规范的"社区维基问题/答案,以便所有这些问题可以引导到一个很好的参考.)
我是Android新手,我必须创建一个需要使用SQLite数据库的应用程序.我对SQLite的配备不是很好.
你能告诉我这个类的目的和用途SQLiteOpenHelper,并提供一个简单的数据库创建和插入示例吗?
我发现很多东西一样close the connection和close the cursor,但我做这一切的东西.仍然SQLite连接泄漏,我收到这样的警告:
A SQLiteConnection object for database was leaked!
Run Code Online (Sandbox Code Playgroud)
我有一个数据库管理器,我在我的活动中调用以下代码:
DatabaseManager dbm = new DatabaseManager(this);
Run Code Online (Sandbox Code Playgroud)
我的数据库管理器类的代码现在如下:
public class DatabaseManager {
private static final int DATABASE_VERSION = 9;
private static final String DATABASE_NAME = "MyApp";
private Context context = null;
private DatabaseHelper dbHelper = null;
private SQLiteDatabase db = null;
public static class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
//create database …Run Code Online (Sandbox Code Playgroud) 假设我在SQLiteOpenHelper中有一个包含2列的数据库表test_table和相应的创建脚本:
DB_VERSION = 1:
public void onCreate(SQLiteDatabase db)
{
db.execSql("CREATE table test_table (COL_A, COL_B);
}
Run Code Online (Sandbox Code Playgroud)
这是最初的应用版本1,发布在Play商店中.
过了一会儿,应用程序和使用的数据库都有更新.我想SQLiteOpenHelper类必须像这样调整:
DB_VERSION = 2:
public void onCreate(SQLiteDatabase db)
{
db.execSql("CREATE table test_table (COL_A, COL_B, COL_C)");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSql("ALTER TABLE test_table ADD Column COL_C");
}
Run Code Online (Sandbox Code Playgroud)
一段时间后,另一个应用更新:
DB_VERSION = 3:
public void onCreate(SQLiteDatabase db)
{
db.execSql("CREATE table test_table (COL_A, COL_B, COL_C, COL_D)");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSql("ALTER TABLE test_table ADD Column COL_D"); …Run Code Online (Sandbox Code Playgroud) 我正在使用SQLiteOpenHelper进行数据插入.我需要插入2500个id和2500个名字,所以需要花费太多时间.请任何人帮我如何减少插入时间.我们可以一次插入多个记录吗?任何人帮助我.先感谢您.码:
public class DatabaseHandler extends SQLiteOpenHelper {
SQLiteDatabase db;
private static final int DATABASE_VERSION = 8;
private static final String TABLE_CITY = "CITYDETAILS";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.mContext = context;
}
public void onCreate(SQLiteDatabase db) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CITY );
String CREATE_CITY_TABLE = "CREATE TABLE " + TABLE_CITY + "("
+ CityId + " INTEGER," + CityName + " TEXT " + ")";
db.execSQL(CREATE_CITY_TABLE);
db.execSQL(CREATE_RechargeTypes_TABLE);
this.db=db;
}
@Override
public void onUpgrade(SQLiteDatabase db, …Run Code Online (Sandbox Code Playgroud) 我是Android SQLite的新手.这就是我所拥有的:
db.sqlite在我的assets文件夹中.db.sqlite将替换为新的数据库(我将从项目中删除旧文件并添加新文件).我关心的是:
这是我扩展SQLiteOpenHelper类的方法.我按照我在互联网上找到的教程:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DataBaseHelper extends SQLiteOpenHelper{
//The Android's default system path of your application database.
private static String DB_PATH = "/data/data/com.mydomain.myapp/databases/";
private static String DB_NAME = "db.sqlite";
private SQLiteDatabase myDataBase;
private final Context myContext;
/* …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我有一个listview.我通过SQLiteDatabase中的查询获取数据.当我从db获取数据时,我收到此错误:

当我从第20行到第21行时发生.

我尝试将cursor.deactivate()和cursor.close()放在regel 50上.但没有结果.任何人都知道为什么我会得到这个错误以及如何解决它?谢谢 :)
我是Libgdx的新手,我在游戏中使用数据库时遇到了麻烦.
我搜索了一个关于如何使用Libgdx使SQLite在Android和桌面应用程序上工作的教程,但我找不到一个简单的教程.
我最后一次在Android中使用数据库时,创建了一个扩展自的类SQLiteOpenHelper.
使用Libgdx有一种简单的方法吗?或者至少,有人能指点我一步一步的教程或类似的东西吗?
编辑
我忘了说我正在寻找让我管理版本的东西SQLiteOpenHelper.换句话说,当我在代码上更改我的数据库版本时,我想在apk安装上在Android中重新创建我的数据库.
解
在@42n4回答之后,我管理了如何使用SQLiteOpenHelperAndroid应用程序和JDBC桌面应用程序连接到SQLite数据库.
首先,我为桌面和Android应用程序创建了一个"通用类":
//General class that needs to be implemented on Android and Desktop Applications
public abstract class DataBase {
protected static String database_name="recycling_separation";
protected static DataBase instance = null;
protected static int version=1;
//Runs a sql query like "create".
public abstract void execute(String sql);
//Identical to execute but returns the number of rows affected (useful for updates)
public abstract int executeUpdate(String sql);
//Runs …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我得到这个数据库磁盘映像是一些用户的格式错误(代码11)错误.我用Google搜索并了解到,当数据库映像格式错误时,Android会删除它并重新创建新的数据库文件,这对某些用户来说正在发生.
这里的问题是10个用户中的我得到这个错误,db只为2-3个用户重新创建,我无法在logcat中得到错误,为什么会发生这种情况.如果db对10个用户的格式错误,那么为什么它不为所有10个用户重新创建数据库仅为2-3个用户?有人能指出我正确的方向如何处理它?
更新:我仍然无法重现问题,但我能够得到一些日志,他们在这里
08-28 08:35:44.847 E/SQLiteLog(15123): (11) database corruption at
line 65088 of [00bb9c9ce4]
08-28 08:35:44.847 E/SQLiteLog(15123): (11) statement aborts at 67
08-28 08:35:44.857 E/DefaultDatabaseErrorHandler(15123): Corruption
reported by sqlite on database:
/data/data/com.retail.posmaster/databases/GrofersRetail
08-28 08:35:45.377 D/dalvikvm(15123): GC_EXPLICIT freed 2639K, 62%
free 7479K/19228K, paused 4ms+8ms, total 82ms
08-28 08:35:45.727 E/DefaultDatabaseErrorHandler(15123): !@ Delete old
.mark file
08-28 08:35:45.737 E/DefaultDatabaseErrorHandler(15123): !@ DB
Corruption has happened before this
08-28 08:35:45.757 E/DefaultDatabaseErrorHandler(15123): !@ DB
Corruption has happened before this
Run Code Online (Sandbox Code Playgroud) 我最近更新了我的一个(开源)Android应用程序,我的用户正在获得一个我无法复制的例外.关键部分是:
android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5)
然后
Caused by: android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.airlocksoftware.hackernews/databases/hacker_news_cache.db' to 'en_US'.
这种情况发生在使用Android 2.3 - 4.2.1的设备上,并且在我尝试连接数据库的应用程序中的多个位置.我使用它后关闭数据库.
我找不到有关"未能更改db语言环境"异常的更多信息.当我查看SQLiteConnection的源代码(第386行)时,它似乎是'android_metadata'表或'使用新的语言环境更新索引'的问题.
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:137)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
at java.util.concurrent.FutureTask.run(FutureTask.java:239)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856) Caused by: android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.airlocksoftware.hackernews/databases/hacker_news_cache.db' to 'en_US'.
at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:386)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:218)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789)
at …Run Code Online (Sandbox Code Playgroud) android ×10
sqliteopenhelper ×10
sqlite ×6
database ×1
export ×1
import ×1
java ×1
libgdx ×1
sqlexception ×1