我希望通过传递2个值(例如
)从我的数据库中获取一些数据getdata("1","5");
我的数据库中的函数和id在数据库中存储为String。
getdata(String FromMember_id,String ToMember_id){
}
我还使用id来获取数据,但我没有得到数据
查询
"SELECT * FROM MilkCollection WHERE cast(member_code as REAL)
BETWEEN '"+ FromMember_id + "' AND '" +ToMember_id+ "' ";
何时使用此查询而不进行投射
"SELECT * FROM MilkCollection WHERE member_code '"+ FromMember_id + "'
AND '" + ToMember_id + "'"
当我不转换member_code并执行相同的查询时它会显示数据,但它显示其他数据,如17,18,19,我猜它的起始值为17,18,19因为有1从他们开始。
答案 0 :(得分:0)
以下是一些用于为get发送对象的工作代码。您可以比较并查看失误的位置。
public String getPreachLogString(long day, String time) {
String selectQuery;
SQLiteDatabase db;
Cursor cursor;
String myPath = DATABASE_PATH + DATABASE_NAME;
db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
selectQuery = "SELECT * FROM TABLE WHERE day = " + day + " AND time = \"" + time + "\"";
cursor = db.rawQuery(selectQuery, null);
要在搜索中使用字符串,我将\"
中的字符串换行包裹在'
中。不确定为什么要将成员ID存储为字符串,假设您涉及字母,但尝试将member_code作为TEXT进行转换,以便在2个对象之间进行逻辑比较。
你想要完成的是我可以一直这样做。你只需要正确比较。
public ArrayList<String> getMonthlyWork(int year, int month) {
long thismonth = 0;
long nextmonth = 0;
String selectQuery;
SQLiteDatabase db;
ArrayList<String> result = new ArrayList<>();
SimpleDateFormat formatDate = new SimpleDateFormat("dd-MM-yyyy", Locale.US);
String myPath = DATABASE_PATH + DATABASE_NAME;
Calendar c = Calendar.getInstance();
c.set(year, month, 1);
thismonth = c.getTimeInMillis();
if (month < 11) {
c.set(Calendar.MONTH, month + 1);
} else {
c.set(Calendar.MONTH, 0);
c.set(Calendar.YEAR, year + 1);
}
nextmonth = c.getTimeInMillis();
db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
selectQuery = "SELECT * FROM TABLE WHERE day >= " + thismonth + " AND day < " + nextmonth;
答案 1 :(得分:0)
似乎John Bravdo已经为您提供了一个工作示例
让我谈谈以下两个方面: 1.为什么后面的SQL没有返回结果?
代码: “SELECT * FROM MilkCollection WHERE cast(member_code as REAL) BETWEEN'“+ FromMember_id +”'AND'“+ ToMember_id +”'“;
带参数值: SELECT * FROM MilkCollection WHERE强制转换(member_code为REAL) 在1和5之间;
答案:你的表没有任何包含值1到5的记录,但它的记录值为17,18,19。尝试传递值17和19而不是1和5,然后它应该返回值。此外,在检查程序之前,直接测试数据库中的SQL以确认它确实返回数据
在任何索引列上使用函数调用,例如cast(member_code为REAL),将无法使用索引(常规索引)。因此,这个SQL将扫描整个表。随着表格大小的增长,您将开始看到性能不佳。因此,您需要使用整数类型的列,以便按整数值进行过滤。您可以在获得带宽后添加此列。如果表只有1MB的磁盘,那么您需要考虑将有多少并发用户触发此SQL调用。如果有1000个用户同时运行它,那么它将导致1GB的磁盘I / O(虽然数据库引擎可以缓存它)并且它也会很慢
答案 2 :(得分:0)
根据我的理解你的问题,你需要输入你的传递值到REAL
,这肯定会为你提供一个解决方案。
"SELECT * FROM MilkCollection WHERE cast(member_code as REAL) >='"+ FromMember_id + "' AND cast(member_code as REAL) <= '" + ToMember_id + "' ";
描述:仅仅因为您使用您的成员函数传递字符串值,这会在从数据库中获取数据时导致不确定性。