我的Android应用程序中的SQLIte数据库遇到了一些问题.问题是数据库永远不会更新,甚至不会在模拟器的多次重启,Eclipse或从DDMS中删除之后更新.
这是我的onCreate方法,位于扩展SQLiteOpenHelper的类中:
public void onCreate(SQLiteDatabase database) {
try {
database.execSQL(ESSENCE_TABLE_CREATE);
database.execSQL(PACCO_TABLE_CREATE);
database.execSQL(TAVOLE_TABLE_CREATE);
database.rawQuery("insert into essenza values(1, 'Rovere')",
null); // added later
} catch (SQLException e) {
Log.e("DB", e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
在实例化帮助程序后,我请求对数据库的引用:
helper = new DBHelper(context, dbpath + "/" + DATABASE_NAME);
database = helper.getWritableDatabase();
Run Code Online (Sandbox Code Playgroud)
似乎rawQuery语句(稍后添加)未执行,而且正在使用的数据库是从先前版本缓存的.我也试图改变数据库的版本,但它没有用.我错过了什么吗?提前致谢.
我在这个子喷气机上阅读了很多主题,但没有人能回答我的问题.
我从并发线程访问我的数据库,我的SQLiteOpenHelper实现了单例的设计模式,所以我的应用程序只有一个实例.
我使用以下代码访问我的数据库:
SQLiteDatabase db = DatabaseHelper.getInstance().getWritableDatabase();
...
Do some update in the DB
...
db.close();
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我仍然得到"db already closed"错误,getWritableDatabase()方法是否应该锁定数据库,直到调用close()为止?来自其他线程的其他getWritableDatabase()调用应该等到db关闭?这是对的还是我错过了什么?
首先,我是Android应用程序的新手,并没有独立工作.我处理这个时,我的队友已经采取了设计,并要求我设置数据库和方法来完成这个,等等.
因此,虽然大多数情况似乎没问题,但我提出:
Context context = null;
DataBaseHelper drinksDataBase = new DataBaseHelper(context);
Run Code Online (Sandbox Code Playgroud)
进入他的主要活动.
构造函数如下:
public DataBaseHelper(Context context) {
super(context, DB_NAME, null, 1);
this.myContext = context;
try{
createDataBase();
}
catch(IOException e){
}
}
Run Code Online (Sandbox Code Playgroud)
忽略null,我假设是应用程序崩溃的当前原因,我将如何获取应用程序的正确上下文,以便我可以使我的数据库工作?
它实际上似乎正在崩溃,this.getReadableDatabase()所以这是否是空的上下文,我不知道.
由于以下原因,Logcat无法启动:
[2012-10-12 10:37:57 - Unexpected error while launching logcat. Try reselecting the device.] device not found
com.android.ddmlib.AdbCommandRejectedException: device not found
at com.android.ddmlib.AdbHelper.setDevice(AdbHelper.java:752)
at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:373)
at com.android.ddmlib.Device.executeShellCommand(Device.java:462)
at com.android.ddmuilib.logcat.LogCatReceiver$1.run(LogCatReceiver.java:109)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
提前致谢,
詹姆士
当我试图获得可读或可写的数据库时,我收到此错误."SQLiteCantOpenDatabaseException:未知错误(代码14)无法打开数据库"我在SQLiteOpenHelper中遇到了这个奇怪的问题,我在这里看到了一些类似问题,但是没有一个能解决我的问题.像我一样绝望,我在下面发布我的代码希望有人发现我没有看到的东西......
(一个重要的信息:我从另一个工作中得到这个应用程序.但是我调试它的非常时间,我仍然没有更改dbname.这与前一个应用程序的名称(ks.db).这个数据库存在在我的调试设备但tr.db没有)
我的DatabaseHelper类是这样的:
//Singleton
private static DatabaseHelper sInstance;
//Log
private static String TAG = "Database";
private static final String NAME_DB = "tr.db";
private static final String PATH_DB_DEBUG = "/mnt/sdcard/";
private static final int VERSION = 4;
//TABLE NAMES
private static final String TABLE_USERS = "users";
private static final String TABLE_TRACKS = "tracks";
private static final String TABLE_ROTAS = "rotas";
...
/**
*
* @param context
* @return Unique instance of DataBaseHelper
*/
public static synchronized DatabaseHelper getInstance(Context context) {
if …Run Code Online (Sandbox Code Playgroud) 我正在尝试在旧的sqlite数据库表中添加新列。这些表是动态的。我的意思是,它们是在应用程序用户在应用程序中添加特定数据时创建的。
表名称具有类似的后缀。前缀取决于用户输入。现在,在android中,如何在不丢失先前数据的情况下在这些表中添加新列?
这是我第一次使用SQLiteOpenHelper(或android上的数据库).当我得到一个可写的数据库时,我想知道为什么onCreate没有被调用在每个新类的实例上.难道我做错了什么?
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "MyDatabase.db";
private static final int DATABASE_VERSION = 1;
private String PrSQLcmd = "";
public DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE IF NOT EXISTS Contact(Firstname TEXT, LastName TEXT");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
Run Code Online (Sandbox Code Playgroud)
}
我在4.4版本中运行的android模拟器上做了很多测试.在我的应用程序上,我使用SQLiteOpenHelper创建一个带有一个表的sqlite数据库:
package com.findwords.modeles;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import com.findwords.MainActivity;
import com.findwords.controleurs.MenuController;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* Created by louk on 02/01/14.
*/
public class DictionaryDbHelper extends SQLiteOpenHelper{
// declare constants fields
private static final String DB_PATH = "/data/data/com.findwords/databases/";
private static final String DB_NAME = "dictionary_db";
private static final int DB_VERSION = 1;
// declared constant SQL Expression
private static final String DB_CREATE =
"CREATE TABLE dictionary ( " +
"_id integer …Run Code Online (Sandbox Code Playgroud) 我要将其插入到我的表中的歌曲名称包含"'"(撇号),因此,在请求被执行时会出错.我该如何解决呢?
Cursor pid = mDB.rawQuery("select Id FROM MusicPlayer WHERE "Path ='" + sname + "';", null);
Run Code Online (Sandbox Code Playgroud)
我得到sname运行时所以.. sname =/mnt/sdcard/Now Thats What I Call Music 85 [Bubanee]/16 - Let's Get Ready To Rhumble (100% Radio Mix) - PJ & Duncan.mp3
我得到以下错误..
android.database.sqlite.SQLiteException: near "s": syntax error: , while compiling: SELECT Id FROM MusicPlayer WHERE Path ='/mnt/sdcard/Now Thats What I Call Music 85 [Bubanee]/16 - Let's Get Ready To Rhumble (100% Radio Mix) - PJ & Duncan.mp3';
因为sname包含let's带有' …
我正在使用本教程在我的Android项目中实现SQLite功能.
我有这个SQLiteOpenHelper代码:
public class HHSSQLiteHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "HHS.db";
private static final String TABLE_VENDORS = "vendors";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_VENDORID = "vendorId";
public static final String COLUMN_COMPANYNAME = "companyName";
public HHSSQLiteHandler(Context context, String vendor,
SQLiteDatabase.CursorFactory factory, int company) {
super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}
. . .
Run Code Online (Sandbox Code Playgroud)
...但尝试以这种方式实例化该类:
protected void onPostExecute(String result) {
try {
JSONArray jsonArr …Run Code Online (Sandbox Code Playgroud) 我ListView在我的应用程序中,用户可以添加/删除项目.我正在使用SQLiteDatabase应用程序未使用时存储项目但是,SQLiteDatabase给我一个奇怪的错误说"No such table found:subjects(code 1).我无法弄清楚为什么会发生这种情况,我以前曾经使用SQLiteDatabase过几次,但这次它只是不起作用.
这是我的代码:
SubjectsDatabase.java -
import java.util.ArrayList;
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 SubjectsDatabase extends SQLiteOpenHelper {
private static final String SUBJECT_ID = "id";
private static final String SUBJECT_NAME = "name";
private static final String DATABASE_NAME = "subjectsDatabase";
private static final String TABLE_SUBJECTS = "subjects";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE …Run Code Online (Sandbox Code Playgroud)