Получить определенный столбец из базы данных SQLite

В настоящее время я работаю над приложением для Android, и оно в основном создает напоминания о лекарствах, когда и как их принимать, и один из вариантов, который я хотел иметь, - это получить список всех названий лекарств, чтобы пользователь мог отправьте этот список на конкретный адрес электронной почты. Все, что у меня есть на данный момент, - это электронное письмо, но я не знаю, как получить названия лекарств. Я создал новый метод в классе обработчика базы данных под названием get all names, но я не уверен, что это правильно. Также, как только этот список будет получен, как мне включить его в намерение электронной почты?

Рецепт:

package com.example.finalapp;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;

import java.util.ArrayList;
import java.util.List;


public class Prescription extends Activity {

    private Button btn_order, btn_locate;
    private List list=new ArrayList();
    private ArrayAdapter<String> adapter;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.prescription);

        btn_order = (Button) findViewById(R.id.btn_order);
        btn_locate = (Button) findViewById(R.id.btn_locate);

        btn_locate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                startActivity(new Intent(Prescription.this, PharmacyMapFragment.class));
            }
        });



//        DatabaseHandler db=new DatabaseHandler(this);
//        list = db.getAllNames();
//        //final Cursor accountCursor = db.getAccount(userPosition);
//        db.close();






        btn_order.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_SENDTO);
                intent.setData(Uri.parse("mailto:")); // only email apps should handle this
                intent.putExtra(Intent.EXTRA_SUBJECT, "Prescription order for ");
                intent.putExtra(Intent.EXTRA_TEXT, "Medications");
                if (intent.resolveActivity(getPackageManager()) != null) {
                    startActivity(intent);
                }
            }
        });










    }

}

Обработчик базы данных:

package com.example.finalapp;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import java.util.ArrayList;


public class DatabaseHandler extends SQLiteOpenHelper {

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "ReminderManager";

    // table name
    private static final String TABLE_REMINDERS = "Reminders";
    private static final String TABLE_TIPS = "Tips";

    // Table Columns names

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_REMINDERS_TABLE = "CREATE TABLE " + TABLE_REMINDERS + "( counter INTEGER PRIMARY KEY , medname TEXT , medinfo  TEXT,"+
                "interval  INTEGER ,TimeUnit TEXT,Freq INTEGER,weekdays TEXT,Times TEXT, StartTime TEXT,StartDate DATE,EndDate DATE)";
        db.execSQL(CREATE_REMINDERS_TABLE);
        String CREATE_TIPS_TABLE = "CREATE TABLE " + TABLE_TIPS + "( id INTEGER PRIMARY KEY, title  TEXT,"+
                "intro_text TEXT )";
        db.execSQL(CREATE_TIPS_TABLE);
        Log.d("DatabaseHandler","Database Created");
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_REMINDERS);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_TIPS);
        // Create tables again
        onCreate(db);
    }

    int deleteReminder(String name)
    {
        SQLiteDatabase db = this.getWritableDatabase();
        return db.delete(TABLE_REMINDERS,"medname" + "='" + name + "'",null);
    }

    void addReminder(ArrayList al) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put("counter", (int) al.get(0));
        values.put("medname", ""+al.get(1));
        values.put("medinfo", ""+al.get(2));
        values.put("interval", (int) al.get(3));
        values.put("TimeUnit", ""+al.get(4));
        values.put("Freq", ""+al.get(5));
        values.put("weekdays", ""+al.get(6));
        values.put("Times",""+al.get(7));
        values.put("StartTime", ""+al.get(8));
        values.put("StartDate", ""+al.get(9));
        values.put("EndDate", ""+al.get(10));

        // Inserting Row
        db.insert(TABLE_REMINDERS, null, values);
        Log.d("Inserted:","Row Inserted");
        db.close(); // Closing database connection

        ArrayList all=new ArrayList();
        all.add(al.get(0));
        all.add(al.get(1));
        //final boolean hi = al.add("hi");
        FragmentReminder rm=new FragmentReminder();
        rm.receiveData(al);
    }

    void addTips(ArrayList al) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("id", (int)al.get(0));
        values.put("title", ""+al.get(1));
        values.put("intro_text", ""+al.get(2));

        // Inserting Row
        db.insert(TABLE_TIPS, null, values);
        Log.d("Inserted:",values+"");
        db.close(); // Closing database connection
    }



    // Getting single contact
    ArrayList getReminder(int count) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_REMINDERS, new String[] { "counter","medname",
                        "medinfo", "interval","TimeUnit","Freq","weekdays","Times","StartTime","StartDate","EndDate"}, "counter" + "=?",
                new String[] { ""+count },null,null,null,null);
        if (cursor != null)
            cursor.moveToFirst();

        ArrayList al=new ArrayList();

        al.add(cursor.getString(0));al.add(cursor.getString(1));al.add(cursor.getString(2));al.add(cursor.getString(3));
        al.add(cursor.getString(4));al.add(cursor.getString(5));al.add(cursor.getString(6));al.add(cursor.getString(7));
        al.add(cursor.getString(8));al.add(cursor.getString(9));al.add(cursor.getString(10));

        return al;

    }

    // Getting All Contacts
    public ArrayList getAllReminders() {
        ArrayList ReminderList = new ArrayList();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_REMINDERS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()){
            do{
                ReminderList.add(cursor.getString(1));
            }while(cursor.moveToNext());
            db.close();
        }

        return ReminderList;
    }

    // Getting All Contacts
    public ArrayList getAllNames() {
        ArrayList NamesList = new ArrayList();
        // Select All Query
        String selectQuery = "SELECT" + "medname" +   "* FROM " + TABLE_REMINDERS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()){
            do{
                NamesList.add(cursor.getString(1));
            }while(cursor.moveToNext());
            db.close();
        }

        return NamesList;
    }




    // Getting Reminder Count
    public int getRemindersCount() {
        String countQuery = "SELECT  * FROM " + TABLE_REMINDERS;
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        if (cursor.getCount()==0)
            return 0;
        // looping through all rows and adding to list
        cursor.moveToLast();
        int count=Integer.parseInt(cursor.getString(0));

        db.close();
        return count;
    }

    public ArrayList getReminder(String s) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_REMINDERS, new String[] { "counter","medname",
                        "medinfo", "interval","TimeUnit","Freq","weekdays","Times","StartTime","StartDate","EndDate"}, "medname" + "=?",
                new String[] {s },null,null,null,null);
        if (cursor != null)
            cursor.moveToFirst();

        ArrayList al=new ArrayList();

        al.add(cursor.getString(0));al.add(cursor.getString(1));al.add(cursor.getString(2));al.add(cursor.getString(3));
        al.add(cursor.getString(4));al.add(cursor.getString(5));al.add(cursor.getString(6));al.add(cursor.getString(7));
        al.add(cursor.getString(8));al.add(cursor.getString(9));al.add(cursor.getString(10));

        return al;
    }
}

Используйте заявление WHERE

IntelliJ Amiya 29.03.2018 13:12

вы это сослались? developer.android.com/training/data-storage/sqlite.html#java. это поможет

vaibhav 29.03.2018 13:18

Я использую метод ниже, как бы я назвал это в намерении электронной почты?

jaghz123 29.03.2018 13:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
938
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Вы можете попробовать следующую команду, чтобы получить список определенных столбцов.

public String[] getit(String tablename)
{
    try {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor x = db.rawQuery("SELECT * FROM "+tablename, null);
    int n=x.getCount();
    x.moveToFirst();
    String[] a=new String[n];int i=0;
   do
    {
        a[i]=x.getString(x.getColumnIndex("medname"));
        i++;
    } while(x.moveToNext());

    x.close();
    return a;
    }
    catch (Exception e)
    {
        return null;
    }
}

Или измените свой код как,

  NamesList.add(cursor.getString(x.getColumnIndex("medname")));

В намерении электронной почты используйте putExtra ()

StringBuilder sb = new StringBuilder(); 
for (String s : db.getit("table")) {
    sb.append(s);
    sb.append("\n");
}
intent.putExtra(Intent.EXTRA_TEXT, sb.toString());

Что касается этого метода, как бы я назвал это в намерении электронной почты?

jaghz123 29.03.2018 13:25

Спасибо! Он работает и отображает лекарство в списке так, как я хотел.

jaghz123 29.03.2018 16:40

Прежде всего, у ArrayList должен быть тип данных. В вашем случае это должно быть String, поскольку вы получаете названия лекарств. Так что используйте ArrayList <String>

Замените этим свой метод getAllNames и посмотрите, работает ли он.

public ArrayList<String> getAllNames() {
  ArrayList<String> mNamesList = new ArrayList<>();
  // Select All Query
  String selectQuery = "SELECT medname FROM " + TABLE_REMINDERS;

  SQLiteDatabase db = this.getReadableDatabase();
  Cursor cursor = db.rawQuery(selectQuery, null);
  cursor.moveToFirst()

  for(int i = 0; i < cursor.getCount; i++){
   mNamesList.add(cursor.getString(cursor.getColumnIndex("medname")));
  } 

  db.close();

  return mNamesList;
}

Вернитесь назад, если у вас возникнут проблемы!

Похоже, произошла ошибка для cursor.getCount. Это должно быть где-то заявлено?

jaghz123 29.03.2018 15:08

Я знаю, что вы решили свою проблему, но вы всегда должны указывать возникшую ошибку / исключение!

Parag Pawar 31.03.2018 13:33

1. Включите этот метод в свой класс DatabaseHandler.

public Cursor readData(SQLiteDatabase sqlite)
    {
        //Method for reading data from table

        return (sqlite.query(DbContract.TABLE_NAME,null,"medname",null,null,null,null));

    }

2. Следуйте этому коду там, где вы хотите данные.

 DbHelper dbHelper= new DbHelper(this);
            SQLiteDatabase database= dbHelper.getReadableDatabase();
            Cursor cursor= dbHelper.readData(database);
            if (cursor.getCount()>0)
            {
                while (cursor.moveToNext())
                {
                    String medName;

                    medName=cursor.getString(cursor.getColumnIndex("medname"));
               }
            }

что такое DbContract?

jaghz123 29.03.2018 15:04

DbContract - это класс, в котором я объявляю все строковые константы для sqlite. Например, имя таблицы, имена столбцов. Например, общедоступный статический final String TABLE_NAME = "SqlTable";

Sachin Soma 30.03.2018 06:51

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