随着移动互联网的发展,越来越多的应用开始使用图片来丰富用户体验。在Android开发中,使用SQLite数据库来存储和调用图片路径是一种常见的方式。本文将介绍如何在Android开发中使用SQLite数据库来存储和调用图片路径。
创新互联公司基于分布式IDC数据中心构建的平台为众多户提供四川雅安服务器托管 四川大带宽租用 成都机柜租用 成都服务器租用。
一、准备工作
首先需要在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编码来保存路径并在检索时进行解码。
五、
相关问题拓展阅读:
应该是你在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:从数据库中取得的图片,无法显示到模拟器上的信息别忘了在本站进行查找喔。
香港服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。
网页名称:Android开发:利用数据库存储和调用图片路径(android数据库图片路径)
转载来源:http://www.shufengxianlan.com/qtweb/news19/187069.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联