2013-05-30 5 views
0

У меня есть общий вопрос об использовании предложений WHERE в SQLite. Я работал с некоторыми SQLite и знаю свой путь. Однако у меня возникают проблемы с предложениями WHERE.Использование предложения WHERE в SQLite

У меня есть приложение для Android, в котором мне нужно сделать несколько простых операций с предложением SQLite WHERE. Однако, несмотря на эксперименты с предложением WHERE весь день, я пришел пустым. Я пытаюсь выполнить очень простые команды SQLite (например, SELECT name FROM tablename WHERE _id=2 или DELETE FROM tablename WHERE name='somename'). Но каждый раз, когда я использую предложение where, я либо возвращаю 0 строк (в случае SELECT), либо удаляет 0 строк.

Название таблицы правильное. Имена столбцов верны. (У меня не было проблем с выбором или вставкой, если я не указываю предложение WHERE.) Я убедился, что запросы/операторы были хорошо сформированы. Я пробовал как сырые запросы/инструкции, так и методы (я обязательно использовал правильные методы для SELECT и DELETE (например, rawQuery() или query() для SELECT}), предоставленных от класса SQLiteDatabase в Android, но ничего не работает ,

Все, что мне нужно, это иметь возможность выполнять простые запросы/утверждения с помощью предложения WHERE. Кто-нибудь имеет представление о том, что происходит?

Вот код, чтобы создать таблицу, в которой я использую:

public static final String TABLE_WORKOUTS = "workouts" 

public static final String W_ID = "_id"; 
public static final String W_WORKOUT_NAME = "workout_name"; 
public static final String W_EXERICSE_NAME = "exercise_name"; 
public static final String W_EXERCISE_SETS = "exercise_sets"; 
public static final String W_EXERCISE_FIRST_ATTRIBUTE = "first_attribute"; 
public static final String W_EXERCISE_SECOND_ATTRIBUTE = "second_attribute"; 
public static final String W_EXERCISE_TYPE = "exercise_type"; 

private static final String createTableWorkouts = "CREATE TABLE " + TABLE_WORKOUTS + " (" + W_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     W_WORKOUT_NAME + " TEXT, " + W_EXERICSE_NAME + " TEXT, " + W_EXERCISE_SETS + " TEXT, " + 
     W_EXERCISE_FIRST_ATTRIBUTE + " TEXT, " + W_EXERCISE_SECOND_ATTRIBUTE + " TEXT, " + W_EXERCISE_TYPE + " TEXT);"; 

Пример запроса: String workoutName = "Some Workout"; Cursor cursor = datasource.executeRawQuery("SELECT * FROM " + WorkoutDatabase.TABLE_WORKOUTS + " WHERE " + WorkoutDatabase.W_EXERICSE_NAME + "='" + workoutName + "'", null);

Пример записи (_id, workout_name, exercise_name, наборы, first_attribute , second_attribute, exercise_type): 23, верхний корпус, скамья, 5, 160, 5, вес

+0

Нет ничего плохого в определении вашей таблицы. Покажите пример запроса и некоторые примеры (-ы), которые вы собираетесь сопоставить. –

+0

@CL. Я выставляю код и примеры, которые вы просили. – Don

+1

Значение в столбце 'exercise_name' -' Bench Press', но вы пытаетесь сопоставить его с 'Some Workout'. –

ответ

1

Значение в столбце exercise_nameBench Press, но вы пытаетесь сравнить его с Some Workout.

0

u можете попробовать вот так.

Реализация 1

String sqlQuery = "select * from Appointment where start_date='" 
       + startDate + "' order by start_date,time(start_date) ASC"; 

     cursor = getReadableDatabase().rawQuery(sqlQuery, null); 
     // Log.e("Appointment ->","Total rows fetched for date "+ 
     // startDate+" "+cursor.getCount()); 
     if (cursor != null && cursor.moveToFirst()) { 
      do { 

      } while (cursor.moveToNext()); 

}

Реализация 2

private boolean isRequestExists(int requestId) { 
    Cursor cursor = null; 
    boolean result = false; 
    try { 
     String[] args = { "" + requestId }; 
     StringBuffer sbQuery = new StringBuffer("SELECT * from ").append(
       TABLE_NAME).append(" where _id=?"); 
     cursor = getReadableDatabase().rawQuery(sbQuery.toString(), args); 
     if (cursor != null && cursor.moveToFirst()) { 
      result = true; 
     } 
    } catch (Exception e) { 
     Log.e("Requestdbhelper", e.toString()); 
    } 
    return result; 
} 
+0

Большое спасибо за предложения кода! К сожалению, это, по сути, то, что я делал. Спасибо за помощь, хотя! – Don

+0

, тогда вы получите какое-либо исключение ??? –

+0

@srikanth_gr Nope. Без исключений. Просто никаких результатов. – Don

0

Привет, вы можете попробовать это с вспомогательным классом

  Cursor cur1 = null, cur2 = null; 
      if (mySQLiteAdapter == null || !mySQLiteAdapter.isOpen()) { 
       mySQLiteAdapter = new SqliteAdapter(
         LoginActivity.this); 
      } 

      try { 
       cur1 = mySQLiteAdapter 
         .executeSQLQuery(
           "select ifnull(max(login_id),0) as userCount from table_login", 
           null); 

       for (cur1.moveToFirst(); !(cur1.isAfterLast()); cur1 
         .moveToNext()) { 
        userCount = cur1.getString(cur1 
          .getColumnIndex("userCount")); 

       } 
      } catch (Exception ex) { 
       Log.w("error while retrieving cursor values", ex.toString()); 
      } finally { 
       cur1.close(); 
       if (mySQLiteAdapter != null || mySQLiteAdapter.isOpen()) { 
        mySQLiteAdapter.close(); 
       } 
      } 

======== ==========================

Вот ваш вспомогательный класс

public Cursor executeSQLQuery(String sql, String[] selectionArgs) { 
    Cursor cursor = null; 
    try { 
     if (database != null) { 
      cursor = database.rawQuery(sql, selectionArgs); 
     } 
    } catch (SQLiteException sqle) { 
     Toast.makeText(context, 
       "Unable to execute sql query \n" + sqle.getMessage(), 
       Toast.LENGTH_SHORT).show(); 
    } 
    return cursor; 
} 
+0

Хорошо, я попробую прямо сейчас. Я дам вам знать, что я получу. – Don

+0

Нет кубиков. Это не сработало. Спасибо за попытку! – Don

+0

затем вытащите db из вашего приложения из ddms-файла explorer и посмотрите, есть ли в вашей таблице запись –

1

Этот работоспособный источник, который будет извлекать список значений из базы данных SQLite, используя условия. С помощью курсора, чтобы получить значения и добавить в класс POJO. Я думаю, этот код поможет вам.

public List<RationNamesPOJO> fetchRationMembers(String rationNumber) { 

    ArrayList<RationNamesPOJO> RationDet = new ArrayList<RationNamesPOJO>(); 

    SQLiteDatabase db = this.getWritableDatabase(); 

    Cursor cur = db.rawQuery("SELECT * FROM " + TABLE_NAME + " where " + PEOPLE_RATION_NUMBER + "='" + rationNumber + "'", null); 

    if (cur.moveToFirst()) { 
     do { 

      RationNamesPOJO rationPojo = new RationNamesPOJO(); 
      rationPojo.setPeople_rationNumber(cur.getString(cur.getColumnIndex(PEOPLE_RATION_NUMBER))); 
      rationPojo.setPeople_aadhaarNumber(cur.getString(cur.getColumnIndex(PEOPLE_AADHAAR_NUMBER))); 
      rationPojo.setPeopleName(cur.getString(cur.getColumnIndex(PEOPLE_NAME))); 
      rationPojo.setPeopleBiometric(cur.getString(cur.getColumnIndex(PEOPLE_FINGER_IMAGE))); 

      RationDet.add(rationPojo); 

     } while (cur.moveToNext()); 
    } 

    return RationDet; 

} 
+0

Спасибо sudharsan !. Его работы, как очарование –

Смежные вопросы