Как мы можем получить конкретную строку из базы данных sql в студии Android

Я работаю над проектом студии Android, в котором я должен получать данные с определенным именем, выбранным из моего списка, данные хранятся в sql в виде таблицы, например, если я щелкаю имя «Майра», он должен получить данные Майры из таблицы базы данных.

вот мой код класса элемента, здесь сообщение - это имя элемента, нажатого в списке в основном действии

 `public class Itemshow extends AppCompatActivity {
SQLiteOpenHelper sqLiteOpenHelper;
TextView nameCustomer;
TextView phoneCustomer;
TextView medicinesCustomer;
String message;
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_itemshow);



    Bundle bundle=getIntent().getExtras();
    if (bundle!=null)
        message=bundle.getString("item");
    nameCustomer=(TextView)findViewById(R.id.nameTextView);
    nameCustomer.setText(message);


    DatabaseHelper db;
    db=new DatabaseHelper(this);


    Cursor answer = db.getDataForGivenName(message);

    while (answer.moveToNext()){
        // some examples, you can continue from here
        String temp = answer.getString(0);  //0 is the index of the column ID
        String temp2 = answer.getString(1); //1 is the index of the column CUSTOMER_NAME
        // You can possible ad them in Arraylist if you need this data somewhere else
    }




}

}

`

и мой вспомогательный класс базы данных

public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Chemist.db";
public static final String TABLE_NAME = "chemist_table";
public static final String COL_1 = "ID";
public static final String COL_2  = "CUSTOMER_NAME";
public static final String COL_3 = "CUSTOMER_PHONE";
public static final String COL_4 = "MEDICINES";



public DatabaseHelper( Context context) {
    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table "+ TABLE_NAME + " (CUSTOMER_NAME TEXT PRIMARY KEY,CUSTOMER_PHONE TEXT,MEDICINES TEXT)");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
    onCreate(db);

}

public boolean insertData(String customerName,String phone,String medicines )
{
    SQLiteDatabase db=this.getWritableDatabase();
    ContentValues contentValues=new ContentValues();
    contentValues.put(COL_2,customerName);
    contentValues.put(COL_3,phone);
    contentValues.put(COL_4,medicines);
    long result=db.insert(TABLE_NAME,null,contentValues);
    if (result==-1)
        return false;
    else
        return true;

}

public Cursor getAllData(){
    SQLiteDatabase db=this.getWritableDatabase();
    Cursor res=db.rawQuery("select * from "+TABLE_NAME,null);
    return res;
}
public Cursor getDataForGivenName(String name){
    SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
    Cursor result = sqLiteDatabase.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE NAME = '" + name + "'", null);
    return result;
}

}

Я не могу это сделать, пожалуйста, помогите мне. я просто хотел показать данные элемента из всех столбцов, выбранных в списке

вы должны опубликовать свой код основного действия там, где щелкают по списку.

AIMIN PAN 12.10.2018 11:54

@pskink PAN есть только одна ошибка, с которой я столкнулся, когда я использую Cursor answer = db.getDataForGivenName(message);, мое приложение вылетает, пожалуйста, не могли бы вы дать мне решение для этого

Navjyot Singh 12.10.2018 13:05

@pskink Это факт, но я не добавляю одинаковые имена в свою базу данных, тогда почему приложение дает сбой ??

Navjyot Singh 12.10.2018 13:17

нет, я просто использую theList.getItemAtposition (1) .toString и передаю его с помощью ключа

Navjyot Singh 12.10.2018 13:50
0
4
412
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете начать с добавления метода для получения всех данных для данного имени, например, "maira"

 public Cursor getDataForGivenName(String name){
            SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
            Cursor result = sqLiteDatabase.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE NAME = '" + name + "'", null);
            return result;
        }

Затем в помощнике вашей базы данных просто добавьте

Cursor answer = sqLiteHelper.getDataForGivenName(message);

И получите все необходимые данные, например:

while (answer.moveToNext()){
    // some examples, you can continue from here
    String temp = answer.getString(0);  //0 is the index of the column ID
    String temp2 = answer.getString(1); //1 is the index of the column CUSTOMER_NAME
    // You can possible ad them in Arraylist if you need this data somewhere else       
  }

Обратите внимание, что перед тем, как перейти к этому шагу, вам нужно получить имя (миара) из списка с именами, вы можете сделать это, установив некоторые слушатели onclick.

Cursor answer = sqLiteHelper.getDataForGivenName(message); Эта строка при вводе в itemShow.class приводит к сбою приложения.
Navjyot Singh 12.10.2018 12:53

Когда я открываю элемент @ Beasteca, мое приложение вылетает без ошибок, я могу показать вам мою ошибку отладчика java.lang.RuntimeException: Unable to start activity ComponentInfo{androidsingh.navjyotsingh.chemisthelper/androi‌​dsingh.navjyotsingh.‌​chemisthelper.Itemsh‌​ow}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor androidsingh.navjyotsingh.chemisthelper.DatabaseHelper.getDa‌​taForGivenName(java.‌​lang.String)' on a null object reference

Navjyot Singh 12.10.2018 13:12

Да, но после сбоя должна быть трассировка стека. Вы можете найти его в разделе «Выполнить» в нижней части экрана.

Beasteca 12.10.2018 13:14

Вам необходимо инициализировать ваш dbHelper в классе активности.

Beasteca 12.10.2018 13:17
DatabaseHelper db;, а затем db = new DatabaseHelper(this); в методе onCreate() активности
Beasteca 12.10.2018 13:18

После добавления этого также мое приложение вылетает, когда я выбираю элемент списка, но когда я удаляю эту строку `Cursor answer = db.getDataForGivenName (message);` приложение работает отлично @Beasteca

Navjyot Singh 12.10.2018 13:28

почему я не могу получить данные? @Beasteca

Navjyot Singh 12.10.2018 13:29

сообщение = имя вашего списка?

Beasteca 12.10.2018 13:31

message = имя элемента, по которому щелкнули в представлении списка (данные которого мы хотим получить) для перекрестной проверки, я использовал текстовое представление, чтобы показать имя, и оно работает отлично.

Navjyot Singh 12.10.2018 13:36

да, я видел это, нет сообщения - это не имя представления списка, это строковое имя элемента, по которому щелкнули, я снова обновляю код после всех ваших исправлений

Navjyot Singh 12.10.2018 13:42

Другие вопросы по теме