如何通过传递两个数字作为参数从数据库中获取数据?

时间:2017-01-31 13:48:41

标签: android sql database sqlite android-sqlite

我希望通过传递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从他们开始。

3 个答案:

答案 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以确认它确实返回数据

  1. 表现不佳
  2. 在任何索引列上使用函数调用,例如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 + "' ";

描述:仅仅因为您使用您的成员函数传递字符串值,这会在从数据库中获取数据时导致不确定性。