2013-01-01 101 views
3

喜逢我非常新的android的发展,我想数据库添加到我的应用程序初始化SQLite数据库的Android

的问题是,我不知道如何初始化整只表一次。

我做了很多阅读,我发现你可以在 帮助类中重写onCreate(SQLiteDatabase db)方法。

这是我的数据字段和我onCreate(SQLiteDatabase db)方法

public static final String KEY_ROWID = "_id"; 
    public static final String KEY_NAME = "name"; 
    public static final String KEY_EIGHTU = "8u"; 
    public static final String KEY_NINEU = "9u"; 
    public static final String KEY_TENU = "10u"; 
    public static final String KEY_ELEVENU = "11u"; 
    private static final String TAG = "DBAdapter"; 

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

但我不知道怎么的任何想法..?

我的主要问题是,我有我想要初始化

+0

你首先必须创建一个_table_来,然后有_rows_初始化 –

+0

我没有创建表和所有我只是随便与初始化麻烦.. – user1936104

+0

@Arash我做了令人惊讶的是他们没有太多的初始化 – user1936104

回答

0

,如果你想填充它在代码中多行,本教程将帮助。这是一系列14个视频教程。

http://thenewboston.org/watch.php?cat=6&number=111

如果要访问预装的数据库,看看这个链接。

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

但没有一个解决了使用,您将需要为平板电脑内容提供商的。但是两者都会让你开始,一旦你了解它们,你可以学习提供者。

+0

您的第一个链接现在似乎被破坏了。 – Suragch

0

onCreate()方法之前和private static final String TAG = "DBAdapter";这一行之后写下行,它会解决你的问题。

private static final String DATABASE_CREATE = "create table mTable1 
        (_id integer primary key autoincrement, 
        name text not null, 8u text not null, 9u text not null, 
        10u text not null, 11u text not null);"; 
+0

hello @Dipak谢谢你的回答,但是这段代码只创建表,但并没有给它初始值,我需要做的只是给多行初始值一次 – user1936104

4

尝试这个办法:

public class MyDBHelper 
{ 
    // Database properties 
    private static final String DATABASE_NAME = "Test.sqlite"; 
    private static final String DATABASE_TABLE_NAME = "Table 1"; 
    private static final int DATABASE_VERSION = 4; 

    // Table1 properties 
    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_NAME = "name"; 
    public static final String KEY_EIGHTU = "8u"; 
    public static final String KEY_NINEU = "9u";  
    public static final String KEY_TENU = "10u"; 
    public static final String KEY_ELEVENU = "11u"; 
    private static final String TAG = "DBAdapter"; 

    // Create Script 
    private static final String DATABASE_CREATE_PLAYER = "CREATE TABLE IF NOT EXISTS " + DATABASE_TABLE_NAME + "(" + KEY_ROWID + " INTEGER, " + KEY_NAME + " TEXT, " + KEY_EIGHTU + " TEXT, " + KEY_NINEU + " TEXT, " + KEY_TENU + " TEXT, " + KEY_ELEVENU + " TEXT);";   
    private final Context m_context; 
    private DatabaseHelper m_dbHelper; 
    public static SQLiteDatabase m_db; 
    public MyDBHelper(Context ctx) 
    { 
     this.m_context = ctx; 
     m_dbHelper = new DatabaseHelper(m_context); 
    } 

    private static class DatabaseHelper extends SQLiteOpenHelper 
    { 
     DatabaseHelper(Context context) 
     { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

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

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

    //---opens the database--- 
    public MyDBHelper open() throws SQLException 
    { 
     m_db = m_dbHelper.getWritableDatabase(); 
     return this; 
    } 

    //---closes the database---  
    public void close() 
    { 
     if (m_db != null) 
      m_db.close(); 
     if (m_dbHelper != null) 
      m_dbHelper.close(); 
    } 
} 
+0

在onCreate中,你需要执行DATABASE_CREATE_PLAYER而不是DATABASE_TABLE_NAME – findusl

0
import java.util.ArrayList; 
import java.util.List; 

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

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 = "contactsManager"; 

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

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

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," 
      + KEY_PH_NO + " 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); 
} 

您也可以访问这些网站的完整参考,并更好地理解::

androidhive.info/Sqlite Tutorial -

3

其他的答案做似乎没有回答如何实际用初始值填充数据库,所以我会分享我是如何在这里做到的。

基本上,您将数据库列保存为xml文件中的字符串数组。我将只显示一个数组,但您可以为其他列做更多的工作。 (但是,需要注意的是,多列不会混淆数组顺序,从而搞乱了数据库行。)

制作/res/values/arrays.xml文件并将该数组添加到它。

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <string-array name="my_array"> 

      <item>string 1</item> 
      <item>string 2</item> 
      <item>string 3</item> 
      <item>string 4</item> 
      <item>string 5</item> 

    </string-array> 

</resources> 

然后,您可以在辅助类中创建数据库时获取该数组。下面是我做的:

private static class DatabaseHelper extends SQLiteOpenHelper { 

    private final Context fContext; 

    // constructor 
    DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     fContext = context; 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE " + TABLE_NAME + " (" 
       + FIRST_COLUMN + " INTEGER PRIMARY KEY," 
       + SECOND_COLUMN + " TEXT NOT NULL," 
       + THIRD_COLUMN + " INTEGER," 
       + FOURTH_COLUMN + " TEXT NOT NULL" 
       + ");"); 

     // Initialize the db with values from my_array.xml 
     final int DEFAULT_THIRD_COLUMN = 1; 
     final String DEFAULT_FOURTH_COLUMN = ""; 
     ContentValues values = new ContentValues(); 
     Resources res = fContext.getResources(); 
     String[] myArray = res.getStringArray(R.array.my_array); 
     for (String item : myArray){ 
      values.put(SECOND_COLUMN, item); 
      values.put(THIRD_COLUMN, DEFAULT_THIRD_COLUMN); 
      values.put(FOURTH_COLUMN, DEFAULT_FOURTH_COLUMN); 
      db.insert(TABLE_NAME, null, values); 
     } 
    } 

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

     Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
       + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
     onCreate(db); 

    } 
} 

请参阅以下链接以获得更多帮助:

我做的另一件事是做提前的数据库和那么只需在安装应用程序时将其复制到数据库文件夹即可。如果您有大量数据并且您不想从Internet上下载数据库,这可能会更好。如果您想复制数据库,请参阅this answer