SQLite数据库Android的 - 使用,在数据库中的其他活动的开幕式和查询开幕式、数据库中、数据库、SQLite

2023-09-12 05:59:15 作者:仗剑游

我有问题,与其他活动超过创建开放式创建的数据库。其实我不知道该怎么做。插入并在创建数据库活动查询方法,做工不错。但我想打开其他活动的数据库,并使用我的查询。我读 openOrCreateDatabase()方法,但我不知道如何使用它。我想我应该在我的课巴扎使用的CreateDatabase()方法,但(如情况下 openOrCreateDatabase())我不知道如何使用它。可能有人帮助我解决我的问题?

I'm having problems with open created database in other Activity than was created. Actually I don't know how to do it. Insert and query methods in Activity where database was created, works good. But I want to open that database in other Activity and use my queries. I read about openOrCreateDatabase() method but I don't know how to use it. I think I should use createDataBase() method in my class Baza but (as in case openOrCreateDatabase()) I don't know how to use it. Could someone help me with solving my problems?

巴扎code:

import java.util.ArrayList;

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

public class Baza extends SQLiteOpenHelper {


SQLiteDatabase db;
static final String dbName ="cookBook.db";
static final int dbVersion = 2;

// tabela przepisy
static final String TabelaPrzepisyNazwa = "Przepisy";
static final String TabPrzepisyCol1 = "_id";            static final int    TabPrzepisyCol1Number = 1;
static final String TabPrzepisyCol2 = "Nazwa";          static final int    TabPrzepisyCol2Number = 2;  
static final String TabPrzepisyCol3 = "Kategoria";      static final int    TabPrzepisyCol3Number = 3;
static final String TabPrzepisyCol4 = "Cena";           static final int    TabPrzepisyCol4Number = 4;
static final String TabPrzepisyCol5 = "Przygotowanie";  static final int    TabPrzepisyCol5Number = 5;
static final String TabPrzepisyCol6 = "Kalorycznosc";   static final int    TabPrzepisyCol6Number = 6;
static final String TabPrzepisyCol7 = "Czas";           static final int    TabPrzepisyCol7Number = 7;




static final String TabelaPrzepSkladNazwa = "PrzepSklad";
static final String TabPrzepSkladCol1 = "_id";          static final int    TabPrzepSkladCol1Number = 1;
static final String TabPrzepskladCol2 = "Nazwa";        static final int    TabPrzepskladCol2Number = 2;    
static final String TabPrzepskladCol3 = "Ilosc";        static final int    TabPrzepskladCol3Number = 3;
static final String TabPrzepskladCol4 = "IdDania";      static final int    TabPrzepskladCol4Number = 4;


static final String przepisyTabCreate = "CREATE TABLE " + TabelaPrzepisyNazwa + "(" + 
        TabPrzepisyCol1+ " INTEGER PRIMARY KEY, " +
        TabPrzepisyCol2+ " TEXT, " + 
        TabPrzepisyCol3+ " TEXT, " +
        TabPrzepisyCol4+ " INTEGER, " +
        TabPrzepisyCol5+ " TEXT, " +
        TabPrzepisyCol6+ " INTEGER, " +
        TabPrzepisyCol7+ " INTEGER)";


static final String przepSkladTabCreate = "CREATE TABLE " + TabelaPrzepSkladNazwa + "(" + 
        TabPrzepSkladCol1+ " INTEGER PRIMARY KEY, " +
        TabPrzepskladCol2+ " TEXT, " +
        TabPrzepskladCol3+ " INTEGER, " +
        TabPrzepskladCol4+ " INTEGER)"; 




public Baza(Context context) {

    super(context, dbName, null, dbVersion);
    // TODO Auto-generated constructor stub
}


@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    db.execSQL(przepisyTabCreate);
    db.execSQL(przepSkladTabCreate);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    db.execSQL("DROP TABLE IF EXISTS "+ TabelaPrzepisyNazwa);
    db.execSQL("DROP TABLE IF EXISTS "+ TabelaPrzepSkladNazwa);

}

public void onOpen(SQLiteDatabase db) {

}

public long dodajDanieDoBazy(String name, String cat, int price, String opis, int kcal, int czas)
{
    db = super.getWritableDatabase();
     ContentValues cv=new ContentValues();

       cv.put(TabPrzepisyCol2, name);
       cv.put(TabPrzepisyCol3, cat);
       cv.put(TabPrzepisyCol4, price);
       cv.put(TabPrzepisyCol5, opis);
       cv.put(TabPrzepisyCol6, kcal);
       cv.put(TabPrzepisyCol7, czas);

       return (db.insert(TabelaPrzepisyNazwa, null, cv));
}


public long dodajSkladnikDoDania(String nazwaSkladnika, int iloscSkladnika, int idDania)
{
    db = super.getWritableDatabase();
     ContentValues cv=new ContentValues();

       cv.put(TabPrzepskladCol2, nazwaSkladnika);
       cv.put(TabPrzepskladCol3, iloscSkladnika);
       cv.put(TabPrzepskladCol4, idDania);

       return (db.insert(TabelaPrzepSkladNazwa, null, cv));     
}

public ArrayList<String> znajdzIdOpisDania (String phraze)
{
    ArrayList<String> ListaDoZwrotu = new ArrayList<String>();
    db=super.getReadableDatabase();
    String[] ktoreKolumny = {TabPrzepisyCol1, TabPrzepisyCol2, TabPrzepisyCol4, TabPrzepisyCol5, TabPrzepisyCol6, TabPrzepisyCol7};
    String WHERE = TabPrzepisyCol2 + " =?";
    String[] wyszukiwanie = {phraze};
    Cursor c = db.query(TabelaPrzepisyNazwa,ktoreKolumny,WHERE, wyszukiwanie, null, null, null);
    try {
        if(c.moveToFirst()) {
            String temp = new String();
            temp = c.getString(c.getColumnIndex(TabPrzepisyCol1));
            ListaDoZwrotu.add(temp);
            temp = c.getString(c.getColumnIndex(TabPrzepisyCol2));
            ListaDoZwrotu.add(temp);
            temp = c.getString(c.getColumnIndex(TabPrzepisyCol4));
            ListaDoZwrotu.add(temp);
            temp = c.getString(c.getColumnIndex(TabPrzepisyCol5));
            ListaDoZwrotu.add(temp);
            temp = c.getString(c.getColumnIndex(TabPrzepisyCol6));
            ListaDoZwrotu.add(temp);
            temp = c.getString(c.getColumnIndex(TabPrzepisyCol7));
            ListaDoZwrotu.add(temp);
            return ListaDoZwrotu;
        }
        else return null;
    }
    catch (Exception e)     {
        return null;
    }
}



public ArrayList<String> znajdzSkladnikiDania (String phraze)
{
    ArrayList<String> listaSkladnikow = new ArrayList<String>();
    db=super.getReadableDatabase();
    String[] ktoreKolumny = {TabPrzepskladCol2, TabPrzepskladCol3};
    String WHERE = TabPrzepskladCol4 + " =?";
    String[] wyszukiwanie = {phraze};
    Cursor c = db.query(TabelaPrzepSkladNazwa,ktoreKolumny,WHERE, wyszukiwanie, null, null, null);
    try {
        if(c.moveToFirst()) {
            do {
                String temp = c.getString(c.getColumnIndex(TabPrzepskladCol2)) + " - " 
                        + c.getString(c.getColumnIndex(TabPrzepskladCol3));
                listaSkladnikow.add(temp);
                } while (c.moveToNext());

            return listaSkladnikow;
        }
        else return null;
        }
        catch (Exception e)     {
            return null;
        }
}

public ArrayList<String> find(String phraze)
{
    ArrayList<String> listaWyszukan = new ArrayList<String>();
    db=super.getReadableDatabase();
    String[] ktoreKolumny = {TabPrzepisyCol2};
    String WHERE = TabPrzepisyCol3 + " =?";
    String[] wyszukiwanie = {phraze};
    Cursor c = db.query(TabelaPrzepisyNazwa,ktoreKolumny,WHERE, wyszukiwanie, null, null, null);
    //String zwr = Integer.toString(c.getCount());
    try {
    if(c.moveToFirst()) {
        do {
        String temp = c.getString(c.getColumnIndex(TabPrzepisyCol2));
        listaWyszukan.add(temp);
        } while (c.moveToNext());

        return listaWyszukan;
    }
    else return null;
    }
    catch (Exception e)     {
        return null;
    }
}

public ArrayList<String> findByPrice(int price)
{
    ArrayList<String> listaWyszukan = new ArrayList<String>();
    db=super.getReadableDatabase();
    String[] ktoreKolumny = {TabPrzepisyCol2};
    String WHERE = TabPrzepisyCol4 + " <?";
    String[] wyszukiwanie = {Integer.toString(price)};
    Cursor c = db.query(TabelaPrzepisyNazwa,ktoreKolumny,WHERE, wyszukiwanie, null, null, null);
    try {
    if(c.moveToFirst()) {
        do {
        String temp = c.getString(c.getColumnIndex(TabPrzepisyCol2));
        listaWyszukan.add(temp);
        } while (c.moveToNext());

        return listaWyszukan;
    }
    else return null;
    }
    catch (Exception e)     {
        return null;
    }
}


public void deleteAll()
{
     db=super.getReadableDatabase();
     db.delete(TabelaPrzepisyNazwa, null, null);
     db.delete(TabelaPrzepSkladNazwa, null, null);

}
}

第一个活动code:

First Activity code:

bazaDanych = new Baza(getApplicationContext());
bazaDanych.deleteAll();
bazaDanych.dodajDanieDoBazy("Ex 1", "Cat1", 4, "description", 280, 40);

第二项活动code:

Second Activity code:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_wyszukiwarkaprzepisow);

    tytul = (TextView) findViewById(R.id.textView1);
    blabla = (TextView) findViewById(R.id.textView2);
    ustawCzcionke(tytul);

    Baza bazaDanych = new Baza(getApplicationContext());
String wyborSpinnerDania = "3";
ArrayList<String> szukaneDanie = new ArrayList<String>();
szukaneDanie = bazaDanych.znajdzIdOpisDania(wyborSpinnerDania);
blabla.setText(szukaneDanie.get(0));
//blabla.setText("exa");

}

logcat的错误,当我切换到活动在这里我想存取权限我的数据库:

Logcat errors when i switch to Activity where i want to get acces my db:

W/dalvikvm(14576): threadid=1: thread    Exiting with uncaught    Exception (group=0x4001d5a0)
E/AndroidRuntime(14576): FATAL    EXCEPTION: main
E/AndroidRuntime(14576): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kajsmig.cookBook/com.kajsmig.cookBook.WyszukiwarkaPrzepisowActivity}: java.lang.NullPointerException
E/AndroidRuntime(14576):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1872)
E/AndroidRuntime(14576):    at android.app.ActivityThread.startActivityNow(ActivityThread.java:1692)
E/AndroidRuntime(14576):    at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
E/AndroidRuntime(14576):    at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
E/AndroidRuntime(14576):    at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:656)
E/AndroidRuntime(14576):    at android.widget.TabHost.setCurrentTab(TabHost.java:326)
E/AndroidRuntime(14576):    at com.kajsmig.cookBook.ExtendActivity.przlaczAktywnosc(ExtendActivity.java:90)
E/AndroidRuntime(14576):    at com.kajsmig.cookBook.PrzepisyActivity.onGesturePerformed(PrzepisyActivity.java:293)
E/AndroidRuntime(14576):    at android.gesture.GestureOverlayView.fireOnGesturePerformed(GestureOverlayView.java:728)
E/AndroidRuntime(14576):    at android.gesture.GestureOverlayView.access$400(GestureOverlayView.java:55)
E/AndroidRuntime(14576):    at android.gesture.GestureOverlayView$FadeOutRunnable.run(GestureOverlayView.java:743)
E/AndroidRuntime(14576):    at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime(14576):    at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(14576):    at android.os.Looper.loop(Looper.java:150)
E/AndroidRuntime(14576):    at android.app.ActivityThread.main(ActivityThread.java:4385)
E/AndroidRuntime(14576):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(14576):    at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(14576):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
E/AndroidRuntime(14576):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
E/AndroidRuntime(14576):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(14576): Caused by: java.lang.NullPointerException
E/AndroidRuntime(14576):    at com.kajsmig.cookBook.WyszukiwarkaPrzepisowActivity.onCreate(WyszukiwarkaPrzepisowActivity.java:50)
E/AndroidRuntime(14576):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
E/AndroidRuntime(14576):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836)
E/AndroidRuntime(14576):    ... 19 more

我应该怎么改变,增加或删除?

What should I change, add or delete?

推荐答案

创建新的接口定义,像这样的:

Create new interface "Defined", like this :

import android.provider.BaseColumns;

public interface Stale extends BaseColumns {
public static final String NAZWA_TABELI1 = "konta"; 
public static final String NAZWA_TABELI2 = "notatki"; 
public static final String NAZWA_TABELI3 = "logowania"; 

//TABELA 1 
public static final String INT1 = "id1";
public static final String LOGIN = "login"; 
public static final String HASH = "hash";

// TABELA 2
public static final String INT2 = "id2";
public static final String TYTUL = "tytul";
public static final String TRESC = "tresc";
public static final String KIEDY = "kiedy"; 
public static final String KTO = "kto"; 


// TABELA 3
public static final String INT3 = "id3";
public static final String KTORY = "ktory";
public static final String WANN = "wann"; 

}

在此创建新类扩展SQLiteOpenHelper。下面是例子:

After this create new class extends SQLiteOpenHelper. Here is example :

public class Bazodanowiec extends SQLiteOpenHelper {

    public static final String NAZWA_BAZY = "database.db";
    public static final int WERSJA_BAZY = 1;

    public Bazodanowiec(Context kon)
    {
        super(kon, NAZWA_BAZY, null, WERSJA_BAZY );
    }

    public void onCreate(SQLiteDatabase bd)
    {
        bd.execSQL("CREATE TABLE IF NOT EXISTS " + NAZWA_TABELI1 + " (" + INT1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + LOGIN + " VARCHAR(60) NOT NULL, " + HASH + " VARCHAR(64) NOT NULL);");
        bd.execSQL("CREATE TABLE IF NOT EXISTS " + NAZWA_TABELI2 + " (" + INT2 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + TYTUL + " VARCHAR(60) NOT NULL, " + TRESC + " TEXT NOT NULL, " + KIEDY + " TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, " + KTO + " INTEGER NOT NULL, FOREIGN KEY(kto) REFERENCES konta(id1));");
        bd.execSQL("CREATE TABLE IF NOT EXISTS " + NAZWA_TABELI1 + " (" + INT3 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KTORY + " INTEGER NOT NULL, " + WANN + " TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY(ktory) REFERENCES konta(id1));");
    }


    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

      db.execSQL("DROP TABLE IF EXISTS " + NAZWA_TABELI1 + ";");
      db.execSQL("DROP TABLE IF EXISTS " + NAZWA_TABELI2 + ";");
      db.execSQL("DROP TABLE IF EXISTS " + NAZWA_TABELI3 + ";");
      onCreate(db);
    }

}

您必须导入静态创建的接口。现在,尝试再次

You must import static created interface. Try now again