2013-01-08 35 views
0

我在創建的其他Activity中打開創建的數據庫時遇到問題。其實我不知道該怎麼做。在創建數據庫的Activity中插入和查詢方法,工作良好。但我想在其他Activity中打開該數據庫並使用我的查詢。我讀了openOrCreateDatabase()方法,但我不知道如何使用它。我認爲我應該在我的班級Baza中使用createDataBase()方法,但(如遇openOrCreateDatabase())我不知道如何使用它。有人能幫我解決我的問題嗎?SQLite數據庫Android - 在其他活動中使用,打開和查詢數據庫

巴扎代碼:

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); 

} 
} 

第一個活動代碼:

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

次活動代碼:

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的錯誤,當我切換到活動在這裏我想存取權限我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 

我應該更改,添加或刪除什麼?

+0

'由於:java.lang.NullPointerException在com.kajsmig.cookBook.WyszukiwarkaPrzepisowActivity.onCreate(WyszukiwarkaPrzepisowActivity.java:50)'WyszukiwarkaPrzepisowActivity'中的第50行是什麼?請從您的此Activity的'onCreate()'方法發佈相關代碼。 – Sam

+0

Baza bazaDanych = new Baza(getApplicationContext()); String wyborSpinnerDania =「3」; ArrayList szukaneDanie = new ArrayList (); szukaneDanie = bazaDanych.znajdzIdOpisDania(wyborSpinnerDania); blabla.setText(szukaneDanie.get(0)); // < - Line 50 當我評論第50行,應用程序的作品,但課程TextView blabla沒有被覆蓋 – user1953558

+1

@ user1953558:'blabla.setText'創建問題確保已初始化'blabla' textview? –

回答

0

創建新界面中的 「自定義」,像這樣:

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。例如:

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); 
    } 

} 

您必須導入靜態創建的接口。現在再試一次

+0

我看到我有相同的結構 – user1953558

+0

現在可以嗎? – TN888

+0

Nah,我沒有更改代碼,因爲我有相同的,我沒有看到不同之處:( – user1953558