2016-03-14 58 views
0

我已經建立了一個SQLite數據庫,在創建我需要的表方面工作正常。我一直在試圖做的是插入數據庫,但從另一個類(Signup.java)。我想抓取文本輸入到edittext中並將其插入到數據庫中,但僅在單擊按鈕時。Android如何將數據插入到數據庫外的數據庫輔助類

見下面我DatabaseHelper類:

package com.example.testerrquin.euro2016fanguide; 

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

public class DatabaseHelper extends SQLiteOpenHelper { 

public static final String DATABASE_NAME = "Euro2016.db"; 
public static final String TABLE_USERS = "Users_table"; 
public static final String TABLE_CAPACITY = "Capacity_table"; 
public static final int CapacityOne = 1; 

public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 
    SQLiteDatabase db = this.getWritableDatabase(); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("Create table " + TABLE_USERS +" (UserID INTEGER PRIMARY KEY AUTOINCREMENT, Forename TEXT, Surname TEXT, Email TEXT, Password TEXT, Country TEXT)"); 
    db.execSQL("Create table " + TABLE_CAPACITY +" (CapacityID INTEGER PRIMARY KEY AUTOINCREMENT, Capacity INTEGER)"); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CAPACITY); 
    onCreate(db); 
} 
} 

基本上我需要運行開始 「db.execSQL」 的路線。我可能需要在某處引用'db'以鏈接到Databasehelper類,但不確定。此刻,我正在'無法解析符號'db'。

CompleteB.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 


      String grabFirstname = UsernameET.getText().toString(); 
      String grabSurname = SurnameET.getText().toString(); 
      String grabEmail = EmailET.getText().toString(); 
      String grabPassword = PasswordET.getText().toString(); 
      String grabCountry = CountryDrop.getSelectedItem().toString(); 

      db.execSQL("Insert into Users_table (Forename, Surname, Email, Password, Country) values ((" + grabFirstname +"),(" + grabSurname +"),(" + grabEmail +"), (" + grabPassword +"), (" + grabCountry +"))"); 

      Intent i=new Intent(Signup.this,Login.class); 
      startActivity(i); 
     } 
    }); 

在此先感謝。

+0

你應該在你的助手類中做到這一點。添加一個方法,例如addValues(String grabFirstName,String grabSurename ....)等,並將其與內容值一起使用以將其添加到表中。 – Opiatefuchs

+0

然後你不需要一直創建一個新的數據庫對象。在你的情況下,你得到這個錯誤,因爲你沒有定義分貝 – Opiatefuchs

+0

你有你初始化'db'與'context'第一個... – Mohit

回答

1

聲明你在你的SQL助手類需要的任何方法:

public void sampleMethod(String[] arguments) { 
    ContentValues values = new ContentValues(); 
    values.put("Column1", arguments[0]); 
    values.put("Column2", arguments[1]); 
    values.put("Column3", arguments[2]); 
    .... 
    db.insert(TABLE_NAME, null, values); 
} 

在你的活動:

@Override 
    public void onClick(View v) { 

     String grabFirstname = UsernameET.getText().toString(); 
     String grabSurname = SurnameET.getText().toString(); 
     String grabEmail = EmailET.getText().toString(); 
     String grabPassword = PasswordET.getText().toString(); 
     String grabCountry = CountryDrop.getSelectedItem().toString(); 

     DatabaseHelper helper = new DatabaseHelper(context); //replace context with your activity context. "this" would refer to your onClickListener so be careful. 

     helper.sampleMethod(new String[]{ 
      "user", 
      "pass", 
      "foo", 
      "bar", 
      ... 
     }); 

     //rest of your code 
    } 

而且,在另一方面,請確保您關閉數據庫,當你完成用它。我個人會在每個方法中調用getWritableDatabase,然後在方法結束時關閉數據庫。例如:

public class DatabaseHelper extends SQLiteOpenHelper { 

    Context c; 

    public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 
    c = context; 
    } 

@Override 
public void onCreate(SQLiteDatabase db) { 

    db.execSQL("Create table " + TABLE_USERS +" (UserID INTEGER PRIMARY KEY AUTOINCREMENT, Forename TEXT, Surname TEXT, Email TEXT, Password TEXT, Country TEXT)"); 
db.execSQL("Create table " + TABLE_CAPACITY +" (CapacityID INTEGER PRIMARY KEY AUTOINCREMENT, Capacity INTEGER)"); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS); 
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CAPACITY); 
onCreate(db); 
} 

public void sampleMethod(String[] arguments) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put("Column1", arguments[0]); 
    values.put("Column2", arguments[1]); 
    values.put("Column3", arguments[2]); 
    .... 
    db.insert(TABLE_NAME, null, values); 
    db.close(); 
} 
+0

它說什麼「Column1」我應該用表中的列替換它們我想插入? –

+1

是的。用您的表的列名替換。 – SoroushA

+0

乾杯現在得到它 –

1
  1. 在DatabaseHelper的構造函數外聲明「SQLiteDatabase db」實例。
  2. 創建DatabaseHelper類需要PARAM要求,並插入到數據庫
  3. 然後在你的活動創建DatabaseHelper的一個實例,並調用您在步驟中創建的方法2

請檢查是否有其他的方法獨生子模式

1

爲什麼不通過聲明所有方法使DatabaseHelper成爲單例對象?那麼你可以從你的活動的任何地方打電話給它。