谁能告诉我一个方法来防止SQL注入用于建立查询时SQLite,其中WHERE子句的"myval IN (string_1, ... , string_n)"条件?
我想通过注释动态构建命令文本,并从字符串列表中添加这些注释的参数.有没有更简单的方法 ?
谢谢.
iPhone 3.0支持Core Data,它似乎是开发人员的绝佳工具.但SQL语句似乎更容易启动,但核心数据更容易维护数据库.但我正在考虑SQL语句,因为它似乎有更好的性能.我认为哪一个更适合iPhone开发,有什么建议吗?
我有两张桌子,Proteins和Species.Protein有Species.Id外键约束.当我插入数据时,我知道蛋白质所属物种的名称,但不知道Id.所以我做了以下事情:
PreparedStatement query = connection.prepareStatement(
"SELECT Id FROM Species WHERE ShortName = ?");
query.setString(1, protein.getSpecies().getShortName());
ResultSet result = query.executeQuery();
if (result.next()) {
PreparedStatement statement = connection.prepareStatement(
"INSERT INTO Proteins(SpeciesId, UniProtKBAccessionNumber) VALUES (?, ?)");
statement.setString(1, result.getString(1));
statement.setString(2, protein.getUniProtKBAccessionNumber().toString());
statement.execute();
}
else
throw new IllegalArgumentException("The species of this protein is not recognized!");
Run Code Online (Sandbox Code Playgroud)
基本上,我得到与名称对应的Id,然后插入蛋白质.这在许多方面看起来非常笨拙.是否有更优雅的方式来实现这一目标?我正在研究SQLite数据库.
这是一些硬编码语法.IPAddr是一个int,这是sqlite,将被移植到mysql.
语法不起作用AND V.IPAddr <> 0.可能是因为V是左连接而可能不存在(null?).我怎样才能让它成功V == null || V.IPAddr <> Val?
select Post.id, name, body,
(select count() from Votes where id=Post.id AND (type & 4)<> 0) as DV
from Post
left join Votes as V on V.id=Post.id
where flag='1' AND V.IPAddr <> 0 AND DV<1
limit 1
Run Code Online (Sandbox Code Playgroud) 我一直在想节约使用字典和数组等等,岂不是更有效地使用数据库,只是读取和写入到它,而不是通过阵列运行,得到键和值,等等等等的数据?它需要包含很多文本.
如何在iphone上设置和使用数据库?
此外,如果在应用程序运行时期间写入数据库,它会存储吗?我的意思是不需要序列化等等?
好吧我知道fmdb已经完全过时了,核心数据就在它的位置,但是现在,我只需要调整一个我正在使用的应用程序,它使用fmdb从资源文件夹中的sqlite数据库中读取.
我需要能够写入我的数据库.执行查询的最佳方法是什么?我尝试过做同样的事情,从db读取:
FMResultSet * set = [[UIApp database] executeQuery:[customQueries selectAll], book];
Run Code Online (Sandbox Code Playgroud)
我将字符串selectAll从SELECT语句更改为INSERT INTO语句,并将变量book传递给insert,但这似乎不起作用......
我错过了什么?为了能够写入我的sqlite db,我该怎么做?谢谢!
我有一张桌子
EntryLog(Name String, CheckIn Boolean)
Run Code Online (Sandbox Code Playgroud)
我想计算每个名字的签到数量.如何编写查询以将结果作为单个结果集?
RoR/SQL新手在这里.
我的日期时间列' deleted_at'都未初始化.运行此查询会返回错误:
SELECT * FROM variants v
ON v.id = ovv0.variant_id INNER JOIN option_values_variants ovv1
ON v.id = ovv1.variant_id INNER JOIN option_values_variants ovv2
ON v.id = ovv2.variant_id INNER JOIN option_values_variants ovv3
ON v.id = ovv3.variant_id INNER JOIN option_values_variants ovv4
ON v.id = ovv4.variant_id
WHERE v.deleted_at = NULL
AND v.product_id = 1060500595
Run Code Online (Sandbox Code Playgroud)
但是,如果我将我的日期时间值设置为0,并将我的查询设置为v.deleted_at = 0,则会向我返回正确的变体.
如何检查未初始化/ NULL日期时间?
我试图通过Android应用程序从SQLiteDB中删除记录,这是我使用代码删除记录的方式
//Snippet of code in my DBAdapter Class
public boolean DeleteRecord(String ContactName) {
Log.i(TAG, "DeleteRecord(String ContactName)");
Log.i(TAG, ContactName);
return db.delete(TABLE_SIMPLETABLE_CLIENT1,KEY_EMPLOYEE_NAME + "="
+ContactName,null);
}
从另一个类,我试图通过打开数据库并调用此方法并再次关闭数据库来调用此方法,这就是我编码的方式,
//我的DBApplication类中的代码片段
public void onClick(DialogInterface dialog,
int which) {
DBAdapter.open();
DBAdapter.DeleteRecord(DeleteRecord);
//DeletRecord is string value that in DB(Sivaram)
DBAdapter.close();
}
当我部署它时,我得到以下错误,
08-25 14:52:20.602: ERROR/AndroidRuntime(231): android.database.sqlite.SQLiteException: no such column: Sivaram: , while compiling: DELETE FROM SimpleTable1 WHERE Employee_Name=Sivaram
找到解决方案,请帮助我
提前致谢...
sqlite ×10
iphone ×3
android ×2
insert ×2
sql ×2
annotations ×1
c# ×1
core-data ×1
database ×1
fmdb ×1
foreign-keys ×1
jdbc ×1
mysql ×1
objective-c ×1
select ×1