• 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

VPS Starter Arubacloud
0 głosów
80 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 199 wizyt
pytanie zadane 26 maja 2015 w Java przez mredik5 Początkujący (380 p.)
0 głosów
0 odpowiedzi 218 wizyt
pytanie zadane 21 czerwca 2018 w SQL, bazy danych przez manjaro Nałogowiec (37,390 p.)

92,775 zapytań

141,703 odpowiedzi

320,567 komentarzy

62,109 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

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!

...