在这里,我们将给大家分享关于android–SQLite–是否可以通过insert语句插入BLOB?的知识,同时也会涉及到如何更有效地androidSQLiteInsertOrUpdate的使用、an
在这里,我们将给大家分享关于android – SQLite – 是否可以通过insert语句插入BLOB?的知识,同时也会涉及到如何更有效地android SQLite InsertOrUpdate的使用、android sqlite检查是否插入新值、android – Service.onStartCommand() – 是否可以返回多个标志?、android – SQLite.insert返回-1但数据插入数据库的内容。
本文目录一览:- android – SQLite – 是否可以通过insert语句插入BLOB?
- android SQLite InsertOrUpdate的使用
- android sqlite检查是否插入新值
- android – Service.onStartCommand() – 是否可以返回多个标志?
- android – SQLite.insert返回-1但数据插入数据库
android – SQLite – 是否可以通过insert语句插入BLOB?
我正在使用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]); } } }
…
我想传递一个常量到上面显示的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')",name) values(BITMAP2,'2.jpg')",name) values(BITMAP3,'3.jpg')"} }
任何帮助将会很多,
谢谢,
Tulio Zahn
解决方法
insert into memes(img,name) values(X'0102030405060708090a0b0c0d0e0f','1.jpg')
但是,这通常是一个坏主意;相反,请看看parameterised queries.他们将让您编写一次使用占位符而不是实际值的语句,然后重复使用多次,根据需要填写占位符:
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,"2.jpg"); p.execute();
(警告—代码未测试.)
一般来说,您应该在任何地方使用参数化查询,因为它们是一种可靠的方式来避免sql注入攻击,另外通常更容易和更清晰.应该不惜一切代价避免将字符串混合在一起来组合SQL查询.
android SQLite InsertOrUpdate的使用
在SQL中,是支持insertOrUpdate的,但在android SQLite中并不支持了,那我们怎么办呢?很简单
比如有以下表结构:
其中,id是自动增长的索引,注意,现在很关键:
如果你想name值存在时,更新这条记录,不存在时增加一条记录,那么你就设name为唯一索引; 这样就能实现我们的目标。
例如:
replace into test(name,age) values(''zs'',22)
replace into test(name,age) values(''zs'',22)
replace into test(name,age) values(''zs'',22)
执行上述语句后你会发现,后两条的作用是update(其实它是先delete,后insert)的
我的博客其它文章列表
http://my.oschina.net/helu
android sqlite检查是否插入新值
我正在使用sqlite.我成功创建了数据库和表.我还编写了可以在我的表中插入新值的代码.我的代码工作正常,但现在我想显示例如:如果插入新值,则显示toast消息,否则在toast或其他内容中显示错误消息.
这是我对表源代码的插入:
public void InsertToPhysicalPersonTable(String FirstName, String LastName,
String FullName, String FatherName) {
try {
ContentValues newValues = new ContentValues();
newValues.put("FirstName", FirstName);
newValues.put("LastName", LastName);
newValues.put("FullName", FullName);
newValues.put("FatherName", FatherName);
db.insert(AddNewPhysicalPerson, null, newValues);
} catch (Exception e) {
// Todo: handle exception
e.printstacktrace();
Toast.makeText(myContext, "Something wrong", Toast.LENGTH_SHORT).show();
}
}
我这样调用我的函数:
loginDataBaseAdapter.InsertToPhysicalPersonTable("FirstName",
"LastName",
"FullName",
"FatherName"
);
如果有人知道解决方案,请帮助我.
谢谢
解决方法:
insert()方法返回新插入行的行ID,如果发生错误则返回-1.
更改
db.insert(AddNewPhysicalPerson, null, newValues);
像这样
long rowInserted = db.insert(AddNewPhysicalPerson, null, newValues);
if(rowInserted != -1)
Toast.makeText(myContext, "New row added, row id: " + rowInserted, Toast.LENGTH_SHORT).show();
else
Toast.makeText(myContext, "Something wrong", Toast.LENGTH_SHORT).show();
android – Service.onStartCommand() – 是否可以返回多个标志?
所以我应该从onStartCommand()返回START_STICKY标志.
我也希望如果我的服务将被系统销毁,因为内存不足,当系统重新创建它时 – onStartCommand()将以最初启动服务的相同意图被调用.
因为这个原因 – 我想使用START_FLAG_REDELIVERY标志.
根据文档 – http://developer.android.com/reference/android/app/Service.html#ProcessLifecycle,我所描述的肯定会发生(实际上发生在我身上)
我知道我可以使用startForground()启动服务,这可以防止服务在内存不足时被系统杀死,但我不想使用这种方法,无论如何 – 根据文档:系统仍然可以在极低的记忆压力下杀死它.
所以如果我可以从onStartCommand()返回它将是完美的
START_STICKY | START_FLAG_REDELIVERY
但根据文档,你似乎只能使用其中一个标志(也许我错了?).
那么有可能以某种方式开始以我描述的方式工作的服务吗?
解决方法
android – SQLite.insert返回-1但数据插入数据库
protected long put(String tableName,ContentValues values) { sqliteDatabase db = (!mInTransaction) ? mHelper.getWritableDatabase() : mDb; long success = db.insert(tableName,null,values); return success; }
此方法返回-1但数据已插入数据库.我检查了我的数据,没关系.任何人都可以帮助我:(
这是我的表:
CREATE TABLE选项(category_no INTEGER NOT NULL,subcategory_no INTEGER NOT NULL,quiz_no INTEGER NOT NULL,choice_no INTEGER NOT NULL,answer TEXT NOT NULL,content_id INTEGER NOT NULL,PRIMARY KEY(category_no,quiz_no,choice_no));
解决方法
关于android – SQLite – 是否可以通过insert语句插入BLOB?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android SQLite InsertOrUpdate的使用、android sqlite检查是否插入新值、android – Service.onStartCommand() – 是否可以返回多个标志?、android – SQLite.insert返回-1但数据插入数据库等相关知识的信息别忘了在本站进行查找喔。
本文标签: