tul*_*84z 13 database sqlite android blob bitmap
我正在开发一个Android应用程序,我正在使用Sqlite数据库来存储一些位图.我希望在用户安装应用程序时自动插入一些图像.
我正在使用SQLiteOpenHelper类,如下所示:
public class DatabaseHelper extends SQLiteOpenHelper {
...
DatabaseHelper(Context context, String nameOfDB, int version, String[] scriptSQLCreate,
String scriptSQLDelete) {
super(context, nameOfDB, null, version);
this.scriptSQLCreate = scriptSQLCreate;
this.scriptSQLDelete = scriptSQLDelete;
}
@Override
public void onCreate(SQLiteDatabase db) {
int numScripts = scriptSQLCreate.length;
for(int i = 0; i<numScripts; i++){
Log.i(TAG,"Creating database, executing script " + i);
db.execSQL(scriptSQLCreate[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
...
我想将一个常量传递给上面显示的scriptSQLCreate参数,如下所示:
private static final String[] SCRIPT_DATABASE_CREATE = {
"create table memes( id integer primary key autoincrement," +
+ " img blob not null," +
+ " name text not null unique)" ,
"insert into memes(img,name) values(BITMAP1,'1.jpg')",
"insert into memes(img,name) values(BITMAP2,'2.jpg')",
"insert into memes(img,name) values(BITMAP3,'3.jpg')"}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都会得到很大的帮助,
Thx,Tulio Zahn
Dav*_*ven 21
如果你真的,真的想要你可以使用一个很长的十六进制文字作为blob文字:
insert into memes(img, name) values(X'0102030405060708090a0b0c0d0e0f', '1.jpg')
Run Code Online (Sandbox Code Playgroud)
然而,这通常是一个坏主意; 相反,去看参数化查询.它们将允许您使用占位符而不是实际值编译语句,然后重复使用多次,根据需要填充占位符:
SQLiteStatement p = sqlite.compileStatement("insert into memes(img, name) values(?, ?)");
byte[] data = loadData("1.jpg");
p.bindBlob(1, data);
p.bindString(2, "1.jpg");
p.execute();
byte[] data = loadData("2.jpg");
p.bindBlob(1, data);
p.bindString(2, "2.jpg");
p.execute();
Run Code Online (Sandbox Code Playgroud)
(警告---代码未经过测试.)
通常,您应该在任何地方使用参数化查询,因为它们是避免SQL注入攻击的可靠方法,而且通常更容易和更清晰.应该不惜一切代价避免通过将字符串粘合在一起来组装SQL查询.
| 归档时间: |
|
| 查看次数: |
26553 次 |
| 最近记录: |