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

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


咨詢
建站咨詢
