在我的Android应用程序中:如何在SQLiteOpenHelper的onCreate方法中访问Context?
我是开发新手,通过将图像转换为字节数组并将其存储到 BLOB 中的 SQLite 数据库(在下面的代码中找到),我成功地将图像存储到数据库中。但是我不知道如何将音频/视频存储到数据库中,任何人都可以帮助我 PLZ ...
public void getImage(View view){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/* video/*");
startActivityForResult(Intent.createChooser(intent, "select picture"), 1);
}
public void onActivityResult(int requestCode, int resultCode, Intent data){
if(resultCode == RESULT_OK){
Uri imageUri = data.getData();
String imagePath = getPath(imageUri);
image1.setVisibility(View.VISIBLE);
image1.setImageURI(imageUri);
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
Toast.makeText(getApplicationContext(), ""+bitmap, Toast.LENGTH_SHORT).show();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
img = byteArrayOutputStream.toByteArray();
}
}
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, …Run Code Online (Sandbox Code Playgroud) sqlite android sqliteopenhelper android-sqlite android-database
这两种方法有什么区别吗?两者都返回一个打开的SQLiteDatabase.如果不存在,则两者都可以创建数据库.当需要读/写时,SQLiteOpenHelper也有getWriteableDatabase ...
我应该使用哪种方法?基于我见过的示例代码,我首先使用SQLiteOpenHelper创建我的数据库,但在需要使用数据库时调用SQLiteDatabase.openDatabase.
我有一个有两个活动的应用程序.
其中一个列出了几个值,而另一个则向DB添加了新值.
我有一个从SQLiteOpenHelper扩展的类,并管理数据库连接,查询等.
现在,我理解在SQLiteOpenHelper的构造函数中,您必须传递一个上下文,该上下文用于确定是否必须创建新数据库或打开现有数据库.
但是如果我在每个活动中都有一个SQLiteOpenHelper类的实例,那么上下文就会有所不同.
有办法避免这种情况吗?
谢谢.
我想创建一个更新触发器,
我可以在“BEGIN”和“END”之间创建一个变量,并通过 select sql 语句的查询设置值吗?然后通过判断这个变量来执行“if”“else”语句
我正在创建一个使用SQLiteDatabase来存储项目的应用程序ListView.但是,在填充数据库中的数据时出现错误ListView,应用程序崩溃.
这是我的数据库 -
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 NotesDatabase extends SQLiteOpenHelper {
private static final String NOTE_NAME = "name";
private static final String NOTE_ID = "id";
private static final String NOTE_SUBJECT = "subject";
private static final String DATABASE_NAME = "notesDatabase";
private static final String TABLE_NOTES = "notes";
private static final int DATABASE_VERSION = 1;
private static final String CREATE_NOTES_TABLE = "CREATE TABLE " + TABLE_NOTES …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用我的SQLiteOpenHelper对象在Android Studio中针对我的应用数据库编写junit测试.每次遇到insert方法我都会得到一个NullPointerException.我在使用getContext()和我设置的mockContext之间来回走动,但没有骰子.我启动并运行了我的模拟器.有人可以告诉我我做错了什么吗?
public class LocationDatabaseHelperTest extends AndroidTestCase {
private SQLiteDatabase testDB;
private SQLiteDatabase readDB;
private LocationDatabaseHelper dbh;
private RenamingDelegatingContext mockContext;
private ContentValues cv;
/**
*Sets up a mock context to initialize the
* LocationDatabaseHelper object.
* @throws Exception
*/
public void setUp() throws Exception {
super.setUp();
final String prefix = "test";
mockContext = new RenamingDelegatingContext(getContext(),prefix);
dbh = new LocationDatabaseHelper(mockContext);
try {
testDB = dbh.getWritableDatabase();
} catch(Exception ex){
ex.printStackTrace();
}
readDB = dbh.getReadableDatabase();
cv = new ContentValues();
}
/**
*Tests that …Run Code Online (Sandbox Code Playgroud) android.database.sqlite.SQLiteOpenHelper如果其构造函数的name参数为null:1,则提供使用内存数据库的能力:
字符串:数据库文件的字符串,或者对于内存数据库为null
如果SQLiteOpenHelper使用nullname参数多次实例化,它们是否访问相同的内存数据库,或者每次都创建一个单独的内存数据库?
我想使用 fts5 扩展创建一个表
使用 fts5 创建虚拟表 TABLE_FTS_FOOD_ITEM (content='food_items', Shrt_Desc, Energy_Kcal);
但我收到这个错误。
android.database.sqlite.SQLiteException:没有这样的模块:fts5
早些时候我使用的是 fts4,运行良好。我可以在 android 中将 fts5 与 sqLitedatabase 一起使用吗?
我们有一个SQLite数据库和一个对应的SQLiteOpenHelper子类。这个助手有一个onDowngrade我想为其编写Espresso测试的实现。
完整的onDowngrade实现在这里可用。这是它的简化版本:
@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("CREATE TABLE IF NOT EXISTS foo_tmp (_id integer primary key, bar text not null, baz text not null);");
db.execSQL("INSERT INTO foo_tmp(_id,bar,baz) SELECT _id,bar,baz FROM foo;");
db.execSQL("DROP TABLE IF EXISTS foo;");
db.execSQL("RENAME TABLE foo_tmp TO foo;");
}
Run Code Online (Sandbox Code Playgroud)
该测试将加载具有很高版本号以及已添加或已删除列的数据库转储。然后,它将获得一个可读的数据库,并确保该版本已降级为当前的预期版本,并且列名是预期的列名。完整的资源在这里。看起来是这样的:
@Test
public void testMigration() throws IOException {
writeDatabaseFile("database" + File.separator + dbFilename);
InstancesDatabaseHelper databaseHelper = new InstancesDatabaseHelper();
SQLiteDatabase db = databaseHelper.getReadableDatabase(); …Run Code Online (Sandbox Code Playgroud)