• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd SQLite przy kompilacji apki andorid

Object Storage Arubacloud
0 głosów
77 wizyt
pytanie zadane 31 sierpnia 2019 w Java przez Piotr Brodziak Początkujący (390 p.)

Witam,

Mam problem z bazą SQLite, która łączy się z Androidem. Dostaje taki błąd, nie wiem o co chodzi:

 tbl_remdrs (code 1 SQLITE_ERROR): , while compiling: SELECT _id, content, important FROM tbl_remdrs

(Jest to tutorial z książki Android Studio - Wygodne i efektywne tworzenie aplikacji, właściwie kod jest praktycznie przepisany, więc powinien działać)

package pl.brodziak.refy.remainder;

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

public class RemindersDbAdapter {
    //nazwy kolumn
    public static final String COL_ID="_id";
    public static final String COL_CONENT = "content";
    public static final String COL_IMPORTANT ="important";

    //dotyczące ich indeksy
    public static final int INDEX_ID = 0;
    public static final int INDEX_CONTENT = INDEX_ID+1;
    public static final int INDEX_IMPORTANT = INDEX_CONTENT +1;

    //uzywane w dzienniku zdarzen
    public static final String TAG = "ReamindersDbAdapter";

    private DatabaseHelper mDbHelper;
    private SQLiteDatabase mDb;
    private static final String DATABASE_NAME = "dba_remdrs";
    private static final String TABLE_NAME =  "tbl_remdrs";
    private static final int DATABASE_VESRION = 1;

    private final Context mCtx;
    //polecenie służącedo utworzenia bazy danych
    private static final String DATABASE_CREATE =
            "CREATE TABLE if not exists tbl_remdrs" + TABLE_NAME +
                    " ( " + COL_ID + " INTEGER PRIMARY KEY, " +
                    COL_CONENT+" TEXT, " +
                    COL_IMPORTANT+" INTEGER );";

    public RemindersDbAdapter(Context ctx){
        this.mCtx = ctx;
    }
    //otwarcie
    public void open()throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
       mDb = mDbHelper.getWritableDatabase();
    }

    //zamknięcie
    public void close(){
        if (mDbHelper!=null){
            mDbHelper.close();
        }
    }
    //Tworzenie
    //id tworzy się automatycznie
    public void createReminder(String name, boolean important){
        ContentValues values = new ContentValues();
        values.put(COL_CONENT, name);
        values.put(COL_IMPORTANT, important ? 1 : 0);
        mDb.insert(TABLE_NAME, null,values);
    }
    //przeciążenie pobierające obiekt przypomnienia
    public long createReminder(Reminder reminder){
        ContentValues values = new ContentValues();
        values.put(COL_CONENT, reminder.getmContent());
        values.put(COL_IMPORTANT, reminder.getmImpornant());
        //wstawianei wiersza
        return mDb.insert(TABLE_NAME, null, values);
    }
    //ODCZYT
    public Reminder fetchReminderByID(int id){
        Cursor cursor = mDb.query(TABLE_NAME, new String[]{COL_ID, COL_CONENT, COL_IMPORTANT},COL_ID+"+?",
                new String[]{String.valueOf(id)},null,null,null,null);
        if (cursor!=null)
            cursor.moveToFirst();
        return new Reminder(
                cursor.getInt(INDEX_ID),
                cursor.getString(INDEX_CONTENT),
                cursor.getInt(INDEX_IMPORTANT)

        );
    }

    public Cursor fetchAllReminders(){
        Cursor mCursor = mDb.query(TABLE_NAME,
                new String[]{COL_ID, COL_CONENT, COL_IMPORTANT},
                null,null,null,null, null);
        if (mCursor != null){
            mCursor.moveToFirst();
        }
        return mCursor;
    }
    //AKTUALIZACJA
    public  void updateReminder(Reminder reminder){
        ContentValues values = new ContentValues();
        values.put(COL_CONENT, reminder.getmContent());
        values.put(COL_IMPORTANT, reminder.getmImpornant());
        mDb.update(TABLE_NAME, values, COL_ID +"?=", new String[]{String.valueOf(reminder.getmId())});
    }
    //USUNIĘCIE
    public void deleteReminderById(int nId){
        mDb.delete(TABLE_NAME,COL_ID + "?",new String[]{String.valueOf(nId)});
    }
    public void deleteAllReminders(){
        mDb.delete(TABLE_NAME, null,null);
    }


    ///////////////////////
    //klasa wewnętrzna/////
    ///////////////////////
    public static class DatabaseHelper extends SQLiteOpenHelper{

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

        @Override
        public void onCreate(SQLiteDatabase db) {
            Log.w(TAG, DATABASE_CREATE);
            db.execSQL(DATABASE_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.w(TAG, "Aktualizacja bazy danyh z wersji"+oldVersion+"do wersji"+newVersion+"co powoduje wyczyszczenie bazy danych");
            db.execSQL("DROP TABLE IF EXISTS "+ TABLE_NAME);
            onCreate(db);
        }
    }

}

  


public class ReminderActivity<onOptionsItemSelected> extends AppCompatActivity {
    private ListView mListView;
    private RemindersDbAdapter mDbAdapter;
    private RemindersSimpleCursorAdapter mCursorAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reminder);
        mListView = (ListView) findViewById(R.id.reminders_list_view);
        mListView.setDivider(null);
        mDbAdapter = new RemindersDbAdapter(this);
        mDbAdapter.open();
        Cursor cursor = mDbAdapter.fetchAllReminders();
        String [] from = new String[]{
                RemindersDbAdapter.COL_IMPORTANT
        };
        int [] to = new int []{
                R.id.row_text
        };

        mCursorAdapter = new RemindersSimpleCursorAdapter(ReminderActivity.this, R.layout.reminder_row,
                cursor, from, to,0);
        mListView.setAdapter(mCursorAdapter);

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        mListView = (ListView) findViewById(R.id.reminders_list_view);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                this,
                R.layout.reminder_row,
                R.id.row_text,
                new String [] {"Pierwszy wiersz","Drugi wiersz","Trzeci wiersz","asasas"," Żal","Słó","wszystko","o nic pyttjat","najprostrzych","Lara","Drugi wiersz","Trzeci wiersz","asasas"," Żal","Słó","wszystko","o nic pyttjat","najprostrzych","Lara","Drugi wiersz","Trzeci wiersz","asasas"," Żal","Słó","wszystko","o nic pyttjat","najprostrzych","Lara"}
        );
        mListView.setAdapter(arrayAdapter);

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_reminder, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id =item.getItemId();
        if (id == R.id.action_addRemind){
            Log.d(getLocalClassName(), "Utworzenie nowego przyponienia");
            return true;
        }
        if (id==R.id.exit){
            finish();
        }
        return super.onOptionsItemSelected(item);
    }

}

 

1
komentarz 31 sierpnia 2019 przez KubenQPL Maniak (62,820 p.)

Tak już się nie korzysta z SQLite, to bardzo przestarzały sposób, teraz się używa biblioteki room: https://developer.android.com/training/data-storage/room

Raczej nie masz co się uczyć tym sposobem korzystać z SQLite bo już nigdzie tego nie użyjesz, komercyjnie właściwie tylko Rooma się używa lub jeszcze SQLDelight (https://github.com/square/sqldelight) ale raczej room to przeważająca większość.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 189 wizyt
pytanie zadane 26 maja 2015 w Java przez mredik5 Początkujący (380 p.)
0 głosów
0 odpowiedzi 203 wizyt
pytanie zadane 21 czerwca 2018 w SQL, bazy danych przez manjaro Nałogowiec (37,390 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...