Android开发:利用数据库存储和调用图片路径 (android 数据库 图片路径)

随着移动互联网的发展,越来越多的应用开始使用图片来丰富用户体验。在Android开发中,使用SQLite数据库来存储和调用图片路径是一种常见的方式。本文将介绍如何在Android开发中使用SQLite数据库来存储和调用图片路径。

一、准备工作

首先需要在AndroidManifest.xml文件中添加读写外部存储的权限:

“`

“`

然后在build.gradle文件中添加SQLite依赖:

“`implementation ‘androidx.sqlite:sqlite:2.2.0’“`

二、创建数据库

在Android开发中,我们需要使用SQLiteOpenHelper来创建和管理数据库。因此,我们需要创建一个类来继承SQLiteOpenHelper。在这个类中,我们需要重写onCreate()方法来创建数据库表格,并重写onUpgrade()方法来更新数据库。

“`

public class MyDatabaseHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = “my_app.db”;

private static final int DATABASE_VERSION = 1;

private static final String TABLE_NAME = “my_table”;

private static final String COLUMN_ID = “id”;

private static final String COLUMN_PATH = “path”;

public MyDatabaseHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

@Override

public void onCreate(SQLiteDatabase db) {

String createTableQuery = “CREATE TABLE ” + TABLE_NAME +

“(” + COLUMN_ID + ” INTEGER PRIMARY KEY,” +

COLUMN_PATH + ” TEXT);”;

db.execSQL(createTableQuery);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

String dropTableQuery = “DROP TABLE IF EXISTS ” + TABLE_NAME + “;”;

db.execSQL(dropTableQuery);

onCreate(db);

}

}

“`

在以上示例中,我们创建了一个包含id和path列的my_table表。id列是整数类型的主键,path列是文本类型的列。

三、插入数据

在Android开发中,将图片路径存储到数据库中需要注意以下几个问题:

– 图片路径必须是唯一的

– 为避免路径中存在特殊字符,可以使用Base64编码来保存路径

– 插入数据前需要先查询数据库,以保证图片路径唯一

下面是一个将图片路径存储到数据库的示例:

“`

public static void saveImagePath(Context context, String imagePath) {

// 将图片路径进行Base64编码,避免路径中存在特殊字符

String encodedPath = Base64.encodeToString(imagePath.getBytes(), Base64.DEFAULT);

MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(context);

SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();

// 查询数据库,如果已经存在相同的路径则不插入

String query = “SELECT * FROM ” + MyDatabaseHelper.TABLE_NAME +

” WHERE ” + MyDatabaseHelper.COLUMN_PATH + “='” + encodedPath + “‘;”;

Cursor cursor = db.rawQuery(query, null);

if (cursor.getCount() == 0) {

ContentValues values = new ContentValues();

values.put(MyDatabaseHelper.COLUMN_PATH, encodedPath);

db.insert(MyDatabaseHelper.TABLE_NAME, null, values);

}

cursor.close();

db.close();

}

“`

在以上示例中,我们首先将图片路径进行Base64编码,然后查询数据库,如果不存在相同的图片路径,则将新的路径存储到数据库中。

四、查询数据

从数据库中检索图片路径有两种方式。一种是取出所有路径,一种是根据特定的id来获取路径。以下示例演示两种方式:

“`

public static ArrayList getImagePaths(Context context) {

ArrayList paths = new ArrayList();

MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(context);

SQLiteDatabase db = myDatabaseHelper.getReadableDatabase();

String query = “SELECT * FROM ” + MyDatabaseHelper.TABLE_NAME + “;”;

Cursor cursor = db.rawQuery(query, null);

if (cursor.moveToFirst()) {

do {

String encodedPath = cursor.getString(cursor.getColumnIndex(MyDatabaseHelper.COLUMN_PATH));

String path = new String(Base64.decode(encodedPath.getBytes(), Base64.DEFAULT));

paths.add(path);

} while (cursor.moveToNext());

}

cursor.close();

db.close();

return paths;

}

public static String getImagePathById(Context context, int id) {

MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(context);

SQLiteDatabase db = myDatabaseHelper.getReadableDatabase();

String query = “SELECT * FROM ” + MyDatabaseHelper.TABLE_NAME +

” WHERE ” + MyDatabaseHelper.COLUMN_ID + “='” + id + “‘;”;

Cursor cursor = db.rawQuery(query, null);

String path = null;

if (cursor.moveToFirst()) {

String encodedPath = cursor.getString(cursor.getColumnIndex(MyDatabaseHelper.COLUMN_PATH));

path = new String(Base64.decode(encodedPath.getBytes(), Base64.DEFAULT));

}

cursor.close();

db.close();

return path;

}

“`

在以上示例中,我们从数据库中取出所有路径或根据id获取特定路径。我们使用了Base64编码来保存路径并在检索时进行解码。

五、

相关问题拓展阅读:

android:从数据库中取得的图片,无法显示到模拟器上

应该是你在byte【】转换成bitmap 时候 或者图片转换成byte【】数组时候出现错位等一些问题,导致图片不能正确显示, 我的图片一般都是存储路径的(把图片放在sdcard),然后显示的时候直接从路径读取,上传给服务器时候用fileInfutstream 读取指定路径下的图片 上传给服务器

对数据库存取图片进行的操作:

核心思想:通过二进制流的形式进行存储和读取。

具体:存储图片:一般是通过文件上传的方式进行存储的

1.首先通过request获得表单中图片的地址

2.然后根据这个路径可以使FileInputStream获得文件输入流

3.pstmt.setBinaryStream(i, fis, fis.available())

最后pstmt.executeUpdate();就完成整个插入语句了。

读取:1.根据url的id传一个对应数据库摸个图片的id号

.根据这个id执行查询,通过rst.getBinaryStream(1)返回一个输入流(里面存的是图片)

.读输入流,放到字节数组中,再通过response返回一个能输出二进制流的ServletOutputStream实例(ServletOutputStream sos= response.getOutputStream(); ),

.通过这个输出流把字节数组的字节流写出

希望对你有所帮助哈

图片存数据库?你存个路径把,图片别存数据库。

android 数据库 图片路径的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于android 数据库 图片路径,Android开发:利用数据库存储和调用图片路径,android:从数据库中取得的图片,无法显示到模拟器上的信息别忘了在本站进行查找喔。


数据运维技术 » Android开发:利用数据库存储和调用图片路径 (android 数据库 图片路径)