2013-02-03 41 views
0

我正在嘗試爲我的android應用程序創建一個SQLite Db,我嘗試了很多在線教程,並且它們都不適合我!我已張貼下面我的代碼:在Android中創建並連接到SQLite數據庫

public class DatabaseHandler extends SQLiteOpenHelper { 

    // All Static variables 
    // Database Version 
    private static final int DATABASE_VERSION = 1; 

    // Database Name 
    private static final String DATABASE_NAME = "usersManager"; 

    // Contacts table name 
    private static final String TABLE_CONTACTS = "users"; 

    // Contacts Table Columns names 
    private static final String KEY_ID = "id"; 
    private static final String KEY_NAME = "name"; 

    public DatabaseHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    // Creating Tables 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" 
       + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + ")"; 
     db.execSQL(CREATE_CONTACTS_TABLE); 
    } 

    // Upgrading database 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS); 

     // Create tables again 
     onCreate(db); 
    } 



import java.util.List; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 


public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     DatabaseHandler db = new DatabaseHandler(this); 

我不能看到錯誤在我的代碼,但是當我在位置檢查是分貝應創建無所不有。

+0

感謝ü大家對烏拉圭回合的幫助,它爲我工作! – user1877082

回答

1

SQLiteOpenHelper很懶。在必要之前它不會執行任何操作。因此,只有當您嘗試訪問數據(或插入新數據)時纔會創建您的數據庫。

0

創建查詢來執行時,您必須小心謹慎,特別是使用空格和逗號。

改變這一行

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + ")"; 
     db.execSQL(CREATE_CONTACTS_TABLE); 

白衣:

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + " (" + KEY_ID + " INTEGER PRIMARY KEY, " + KEY_NAME + " TEXT)"; 
     db.execSQL(CREATE_CONTACTS_TABLE); 
4

除了避免長時間一個內襯連接的字符串:

@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_CONTACTS_TABLE = 
      "CREATE TABLE " + TABLE_CONTACTS + 
      "(" + 
       KEY_ID + " INTEGER PRIMARY KEY," + 
       KEY_NAME + " TEXT" + //--last value has no comma-- 
      ")"; 

    db.execSQL(CREATE_CONTACTS_TABLE); 
} 

呼叫getWritableDataBase()打開數據庫,它將如果創建它並不在那裏。

0

您確實沒有創建數據庫,您只創建SQLiteOpenHelper的實例,但對於創建或打開數據庫,您必須使用getWritableDatabase()或getReadableDatabase()方法。 SQLiteDatabase db = new DataBaseHandler(this).getWritableDatabase();返回頁首返回頁首返回頁首返回頁首

3

試試這個

public class DataBase extends SQLiteOpenHelper{ 


    static String createBDSQL = "CREATE TABLE Notas (id integer primary key autoincrement, title TEXT)"; 

    public DataBase(Context context, String name, CursorFactory factory, int version) { 
     super(context, name, factory, version); 
    } 

    @Override 
     public void onCreate(SQLiteDatabase db) { 
      db.execSQL(createBDSQL); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      db.execSQL("DROP TABLE IF EXISTS Notas"); 
      db.execSQL(createBDSQL); 
    } 
} 

在MainActivity.java

DataBase notasdb = new DataBase(this, "DBSample.db", null, 1); 
SQLiteDatabase db = notasdb.getWritableDatabase(); 
+0

我認爲最好在數據庫類中保留最終的字符串 –

0

在主要活動

SQLiteDatabase sql; 
sql=db.getWritableDatabase(); (where db is DB Handler)