新聞中心
隨著移動互聯(lián)網(wǎng)的發(fā)展,越來越多的應(yīng)用開始使用圖片來豐富用戶體驗。在Android開發(fā)中,使用SQLite數(shù)據(jù)庫來存儲和調(diào)用圖片路徑是一種常見的方式。本文將介紹如何在Android開發(fā)中使用SQLite數(shù)據(jù)庫來存儲和調(diào)用圖片路徑。

創(chuàng)新互聯(lián)公司基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺為眾多戶提供四川雅安服務(wù)器托管 四川大帶寬租用 成都機柜租用 成都服務(wù)器租用。
一、準(zhǔn)備工作
首先需要在AndroidManifest.xml文件中添加讀寫外部存儲的權(quán)限:
“`
“`
然后在build.gradle文件中添加SQLite依賴:
“`implementation ‘a(chǎn)ndroidx.sqlite:sqlite:2.2.0’“`
二、創(chuàng)建數(shù)據(jù)庫
在Android開發(fā)中,我們需要使用SQLiteOpenHelper來創(chuàng)建和管理數(shù)據(jù)庫。因此,我們需要創(chuàng)建一個類來繼承SQLiteOpenHelper。在這個類中,我們需要重寫onCreate()方法來創(chuàng)建數(shù)據(jù)庫表格,并重寫onUpgrade()方法來更新數(shù)據(jù)庫。
“`
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);
}
}
“`
在以上示例中,我們創(chuàng)建了一個包含id和path列的my_table表。id列是整數(shù)類型的主鍵,path列是文本類型的列。
三、插入數(shù)據(jù)
在Android開發(fā)中,將圖片路徑存儲到數(shù)據(jù)庫中需要注意以下幾個問題:
– 圖片路徑必須是唯一的
– 為避免路徑中存在特殊字符,可以使用Base64編碼來保存路徑
– 插入數(shù)據(jù)前需要先查詢數(shù)據(jù)庫,以保證圖片路徑唯一
下面是一個將圖片路徑存儲到數(shù)據(jù)庫的示例:
“`
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();
// 查詢數(shù)據(jù)庫,如果已經(jīng)存在相同的路徑則不插入
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編碼,然后查詢數(shù)據(jù)庫,如果不存在相同的圖片路徑,則將新的路徑存儲到數(shù)據(jù)庫中。
四、查詢數(shù)據(jù)
從數(shù)據(jù)庫中檢索圖片路徑有兩種方式。一種是取出所有路徑,一種是根據(jù)特定的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;
}
“`
在以上示例中,我們從數(shù)據(jù)庫中取出所有路徑或根據(jù)id獲取特定路徑。我們使用了Base64編碼來保存路徑并在檢索時進行解碼。
五、
相關(guān)問題拓展閱讀:
- android:從數(shù)據(jù)庫中取得的圖片,無法顯示到模擬器上
android:從數(shù)據(jù)庫中取得的圖片,無法顯示到模擬器上
應(yīng)該是你在byte【】轉(zhuǎn)換成bitmap 時候 或者圖片轉(zhuǎn)換成byte【】數(shù)組時候出現(xiàn)錯位等一些問題,導(dǎo)致圖片不能正確顯示, 我的圖片一般都是存儲路徑的(把圖片放在sdcard),然后顯示的時候直接從路徑讀取,上傳給服務(wù)器時候用fileInfutstream 讀取指定路徑下的圖片 上傳給服務(wù)器
對數(shù)據(jù)庫存取圖片進行的操作:
核心思想:通過二進制流的形式進行存儲和讀取。
具體:存儲圖片:一般是通過文件上傳的方式進行存儲的
1.首先通過request獲得表單中圖片的地址
2.然后根據(jù)這個路徑可以使FileInputStream獲得文件輸入流
3.pstmt.setBinaryStream(i, fis, fis.available())
最后pstmt.executeUpdate();就完成整個插入語句了。
讀取:1.根據(jù)url的id傳一個對應(yīng)數(shù)據(jù)庫摸個圖片的id號
.根據(jù)這個id執(zhí)行查詢,通過rst.getBinaryStream(1)返回一個輸入流(里面存的是圖片)
.讀輸入流,放到字節(jié)數(shù)組中,再通過response返回一個能輸出二進制流的ServletOutputStream實例(ServletOutputStream sos= response.getOutputStream(); ),
.通過這個輸出流把字節(jié)數(shù)組的字節(jié)流寫出
希望對你有所幫助哈
圖片存數(shù)據(jù)庫?你存?zhèn)€路徑把,圖片別存數(shù)據(jù)庫。
android 數(shù)據(jù)庫 圖片路徑的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于android 數(shù)據(jù)庫 圖片路徑,Android開發(fā):利用數(shù)據(jù)庫存儲和調(diào)用圖片路徑,android:從數(shù)據(jù)庫中取得的圖片,無法顯示到模擬器上的信息別忘了在本站進行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)站欄目:Android開發(fā):利用數(shù)據(jù)庫存儲和調(diào)用圖片路徑(android數(shù)據(jù)庫圖片路徑)
地址分享:http://www.5511xx.com/article/dpdiscd.html


咨詢
建站咨詢
