我如何将 Sqlite 数据库中的图像保存为 blob?
How i can save an Image in Sqlite database as blob?
这是我用来在 database.cs 中将图片保存为 base64String TEXT 的代码。
public void CreateDatabase(string sqldb_name)
{
try
{
sqldb_message = "";
string sqldb_location = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string sqldb_path = Path.Combine(sqldb_location, sqldb_name);
bool sqldb_exists = File.Exists(sqldb_path);
if(!sqldb_exists)
{
//Adding new fields
//For adding new fields we have to define the field on the "create" query, in this case, we're adding "BirthDay" field which is VARCHAR
sqldb = SQLiteDatabase.OpenOrCreateDatabase(sqldb_path,null);
sqldb_query = "CREATE TABLE IF NOT EXISTS MyTable (_id INTEGER PRIMARY KEY AUTOINCREMENT, Art TEXT, Album VARCHAR, Artist VARCHAR, Country VARCHAR, Year INT, Genre VARCHAR, Style VARCHAR, Format VARCHAR);";
sqldb.ExecSQL(sqldb_query);
sqldb_message = "Database: " + sqldb_name + " created";
}
else
{
sqldb = SQLiteDatabase.OpenDatabase(sqldb_path, null, DatabaseOpenFlags.OpenReadwrite);
sqldb_message = "Database: " + sqldb_name + " opened";
}
sqldb_available=true;
}
catch(SQLiteException ex)
{
sqldb_message = ex.Message;
}
}
//Adds a new record with the given parameters
//Adding new fields
//We have to modify the CRUD (Create, Read, Update and Delete) operations by adding the new "BirthDay" field, in this case, we're adding the new string parameter "sBirthDay"
public void AddRecord(string @IMG, string sAlbum, string sArtist, string sCountry, int iYear, string sGenre, string sStyle, string sFormat)
{
try
{
//Adding new fields
//We have to modify the CRUD (Create, Read, Update and Delete) operations by adding the new "BirthDay" field to the query and assign the value "sBirthDay"
sqldb_query = "INSERT INTO MyTable (Art, Album, Artist, Country, Year, Genre, Style, Format) VALUES ('" + @IMG + "','" + sAlbum + "','" + sArtist + "','" + sCountry + "','" + iYear + "','" + sGenre + "','" + sStyle + "','" + sFormat + "');";
sqldb.ExecSQL(sqldb_query);
sqldb_message = "Record saved";
}
catch(SQLiteException ex)
{
sqldb_message = ex.Message;
}
}
我应该对代码进行哪些更改才能将图像保存为数据库中的 blob?
有两种保存图片的方法
1.You 可以使用位图将其保存在文件中,然后获取图像路径并将其作为字符串保存在 Db 中
2.Convert 将其转换为字节数组并保存为 Blob
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
SQLite 旨在包含大约 400KB 的数据。将图像存储在 SQLite Db 中不会很好。上面写的图片路径方法比较好
如果适合您的需要,您最好使用 Picasso、Universal Image Loader 等图像加载库。这样你就可以只保留图像url。图像由库缓存。
这是我用来在 database.cs 中将图片保存为 base64String TEXT 的代码。
public void CreateDatabase(string sqldb_name)
{
try
{
sqldb_message = "";
string sqldb_location = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string sqldb_path = Path.Combine(sqldb_location, sqldb_name);
bool sqldb_exists = File.Exists(sqldb_path);
if(!sqldb_exists)
{
//Adding new fields
//For adding new fields we have to define the field on the "create" query, in this case, we're adding "BirthDay" field which is VARCHAR
sqldb = SQLiteDatabase.OpenOrCreateDatabase(sqldb_path,null);
sqldb_query = "CREATE TABLE IF NOT EXISTS MyTable (_id INTEGER PRIMARY KEY AUTOINCREMENT, Art TEXT, Album VARCHAR, Artist VARCHAR, Country VARCHAR, Year INT, Genre VARCHAR, Style VARCHAR, Format VARCHAR);";
sqldb.ExecSQL(sqldb_query);
sqldb_message = "Database: " + sqldb_name + " created";
}
else
{
sqldb = SQLiteDatabase.OpenDatabase(sqldb_path, null, DatabaseOpenFlags.OpenReadwrite);
sqldb_message = "Database: " + sqldb_name + " opened";
}
sqldb_available=true;
}
catch(SQLiteException ex)
{
sqldb_message = ex.Message;
}
}
//Adds a new record with the given parameters
//Adding new fields
//We have to modify the CRUD (Create, Read, Update and Delete) operations by adding the new "BirthDay" field, in this case, we're adding the new string parameter "sBirthDay"
public void AddRecord(string @IMG, string sAlbum, string sArtist, string sCountry, int iYear, string sGenre, string sStyle, string sFormat)
{
try
{
//Adding new fields
//We have to modify the CRUD (Create, Read, Update and Delete) operations by adding the new "BirthDay" field to the query and assign the value "sBirthDay"
sqldb_query = "INSERT INTO MyTable (Art, Album, Artist, Country, Year, Genre, Style, Format) VALUES ('" + @IMG + "','" + sAlbum + "','" + sArtist + "','" + sCountry + "','" + iYear + "','" + sGenre + "','" + sStyle + "','" + sFormat + "');";
sqldb.ExecSQL(sqldb_query);
sqldb_message = "Record saved";
}
catch(SQLiteException ex)
{
sqldb_message = ex.Message;
}
}
我应该对代码进行哪些更改才能将图像保存为数据库中的 blob?
有两种保存图片的方法
1.You 可以使用位图将其保存在文件中,然后获取图像路径并将其作为字符串保存在 Db 中
2.Convert 将其转换为字节数组并保存为 Blob
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
SQLite 旨在包含大约 400KB 的数据。将图像存储在 SQLite Db 中不会很好。上面写的图片路径方法比较好
如果适合您的需要,您最好使用 Picasso、Universal Image Loader 等图像加载库。这样你就可以只保留图像url。图像由库缓存。