如何在我的 Android 应用程序中启动模拟器时填充 SQLite 数据库。

谢尔顿·约翰

我有一个包含 4 个字段的 excel 文件,我想在首次使用模拟器时用来填充数据库。以前,我曾经将数据库文件直接存储在手机上,但如果在创建时填充这些项目会更容易。如何在模拟器启动时从 excel 文件或文本文件中读取并填充数据库?

迈克

假设电子表格如下:-

在此处输入图片说明

已使用文件资源管理器将其保存为名为Book1.csvCSV文件应用程序的资产文件夹(如果需要,创建名为 assets 的文件夹)例如

在此处输入图片说明

IE D:\Android_Applications\LoadDataFromExcel\app\src\main\assets

和一个 DatabaseHelper(即 SQLiteOpenHelper 的子类),如下所示:-

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DBNAME = "mydb";
    public static final int DBVERSION = 1;
    public static final String MYDATA_TBL = "mydata";
    public static final String MYDATA_ID_COL = "_id";
    public static final String MYDATA_NAME_COL = "_name";
    public static final String MYDATA_AMOUNT_COL = "_amount";
    public static final String MYDATA_DATE_COL = "_date";
    public static final String MYDATA_DESCRIPTION_COL = "_description";

    private static final String TBLCREATESQL =
            "CREATE TABLE " + MYDATA_TBL +
                    "(" +
                    MYDATA_ID_COL + " INTEGER PRIMARY KEY," +
                    MYDATA_NAME_COL + " TEXT," +
                    MYDATA_AMOUNT_COL + " INTEGER," +
                    MYDATA_DATE_COL + " TEXT, " +
                    MYDATA_DESCRIPTION_COL + " TEXT" +
                    ")";

    private SQLiteDatabase mDB;


    public DatabaseHelper(Context ccontext) {
        super(ccontext, DBNAME, null, DBVERSION);
        mDB = this.getWritableDatabase();
    }

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

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

    }

    public long insertRow(String name, int amount, String date, String description) {
        ContentValues cv = new ContentValues();
        cv.put(MYDATA_NAME_COL,name);
        cv.put(MYDATA_AMOUNT_COL,amount);
        cv.put(MYDATA_DATE_COL,date);
        cv.put(MYDATA_DESCRIPTION_COL,description);
        return mDB.insert(MYDATA_TBL,null,cv);
    }
}

然后你可以有一些基于:-

public class MainActivity extends AppCompatActivity {

    DatabaseHelper dbh;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dbh = new DatabaseHelper(this);
        loadExternalData();
    }


    private void loadExternalData() {

        InputStream importdata;
        BufferedReader br;
        String line;
        String[] splitdata;
        int linecount = 0;

        final String tag = "loadExternalData";
        try {
            importdata = this.getAssets().open("Book1.csv");
        } catch (IOException e) {
            Log.d(tag,"Error opening asset file");
            return;
        }
        br = new BufferedReader(new InputStreamReader(importdata));
        try {
            while ( (line = br.readLine()) != null) {
                // Skip column headings
                if (linecount++ > 0) {
                     splitdata = line.split(",");
                     dbh.insertRow(
                             splitdata[0],
                             new Integer(splitdata[1]),
                             splitdata[2],
                             splitdata[3]
                     );
                }
            }
        } catch (IOException e) {
            Log.d(tag,"IO Error reading data at line " + (linecount + 1));
            e.printStackTrace();
        }
    }
}

笔记!这是非常基本的,而是一个原则性的演示,例如它不会处理数据中的逗号,并且每次运行它都会创建一组新的行

结果数据库:-

在此处输入图片说明

编辑 - 更改为仅添加一次行(但允许添加新数据)

1) 向 DatabaseHelper 类添加新方法:-

public boolean ifRowExists(String name, int amount, String date, String description) {
    Cursor csr = mDB.query(MYDATA_TBL,null,
            MYDATA_NAME_COL + "=? AND " +
                    MYDATA_AMOUNT_COL + "=? AND " + 
                    MYDATA_DATE_COL + "=? AND " + 
                    MYDATA_DESCRIPTION_COL + "=?",
            new String[]{name,Integer.toString(amount), date, description},
            null,null,null
    );
    boolean rv = csr.getCount() > 0;
    csr.close();
    return rv;
}

2) 修改loadExternalData调用类中方法以检查被插入的行是否存在:-

private void loadExternalData() {

    InputStream importdata;
    BufferedReader br;
    String line;
    String[] splitdata;
    int linecount = 0;

    final String tag = "loadExternalData";
    try {
        importdata = this.getAssets().open("Book1.csv");
    } catch (IOException e) {
        Log.d(tag,"Error opening asset file");
        return;
    }
    br = new BufferedReader(new InputStreamReader(importdata));
    try {
        while ( (line = br.readLine()) != null) {
            // Skip column headings
            if (linecount++ > 0) {
                splitdata = line.split(",");
                if (!dbh.ifRowExists(splitdata[0], new Integer(splitdata[1]), splitdata[2], splitdata[3])) {
                    dbh.insertRow(
                            splitdata[0],
                            new Integer(splitdata[1]),
                            splitdata[2],
                            splitdata[3]
                    );
                }
            }
        }
    } catch (IOException e) {
        Log.d(tag,"IO Error reading data at line " + (linecount + 1));
        e.printStackTrace();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Android中侦听SQLite数据库更改

来自分类Dev

如何在android sqlite中更新数据库表?

来自分类Dev

如何在android的Sqlite数据库中创建表

来自分类Dev

如何在android中对sqlite数据库进行排序

来自分类Dev

如何在Android中更好地安排我的SQLite数据库类

来自分类Dev

如何在Android应用程序中使用外部sqlite数据库

来自分类Dev

如何从android应用程序在SQLite数据库中创建一个新表

来自分类Dev

如何使用cursorloader读取Android中的SQLite数据库?

来自分类Dev

如何保护android中的sqlite数据库不被盗

来自分类Dev

如何从Android中的SQLite数据库获取空值

来自分类Dev

在Android中首次使用SQLite数据库。如何?

来自分类Dev

如何使用cursorloader读取Android中的SQLite数据库?

来自分类Dev

Android如何从SQLite数据库的列中获取值

来自分类Dev

如何从Android中的SQLite数据库获取空值

来自分类Dev

如何检查android中是否存在Sqlite数据库?

来自分类Dev

如何从Android中的SQLite数据库获取名称

来自分类Dev

如何在Android的Play商店上载新版本的我的应用之前测试升级的sqlite数据库

来自分类Dev

尝试打开sqlite数据库后,我的android应用程序崩溃

来自分类Dev

如何从 Android 应用程序的 SQLite 数据库中读取 sqlite 文本 - 字段(不是字符串)

来自分类Dev

如何在Android中更新现有sqlite数据库中的数据

来自分类Dev

如何在Android中从sqlite数据库插入和获取数据?

来自分类Dev

如何在Android上的SQLite数据库中插入数据

来自分类Dev

Android:如何在sqlite数据库中搜索数据并将其显示在列表视图中

来自分类Dev

如何在 Android ListView 中显示来自 SQLite 数据库的特定数据

来自分类Dev

在我的应用程序中升级sqlite数据库

来自分类Dev

如何使用SQLite数据库开发Android应用程序?

来自分类Dev

在Android中升级SQLite数据库

来自分类Dev

android中的sqlite数据库错误

来自分类Dev

在Android中连接SQLite数据库

Related 相关文章

  1. 1

    如何在Android中侦听SQLite数据库更改

  2. 2

    如何在android sqlite中更新数据库表?

  3. 3

    如何在android的Sqlite数据库中创建表

  4. 4

    如何在android中对sqlite数据库进行排序

  5. 5

    如何在Android中更好地安排我的SQLite数据库类

  6. 6

    如何在Android应用程序中使用外部sqlite数据库

  7. 7

    如何从android应用程序在SQLite数据库中创建一个新表

  8. 8

    如何使用cursorloader读取Android中的SQLite数据库?

  9. 9

    如何保护android中的sqlite数据库不被盗

  10. 10

    如何从Android中的SQLite数据库获取空值

  11. 11

    在Android中首次使用SQLite数据库。如何?

  12. 12

    如何使用cursorloader读取Android中的SQLite数据库?

  13. 13

    Android如何从SQLite数据库的列中获取值

  14. 14

    如何从Android中的SQLite数据库获取空值

  15. 15

    如何检查android中是否存在Sqlite数据库?

  16. 16

    如何从Android中的SQLite数据库获取名称

  17. 17

    如何在Android的Play商店上载新版本的我的应用之前测试升级的sqlite数据库

  18. 18

    尝试打开sqlite数据库后,我的android应用程序崩溃

  19. 19

    如何从 Android 应用程序的 SQLite 数据库中读取 sqlite 文本 - 字段(不是字符串)

  20. 20

    如何在Android中更新现有sqlite数据库中的数据

  21. 21

    如何在Android中从sqlite数据库插入和获取数据?

  22. 22

    如何在Android上的SQLite数据库中插入数据

  23. 23

    Android:如何在sqlite数据库中搜索数据并将其显示在列表视图中

  24. 24

    如何在 Android ListView 中显示来自 SQLite 数据库的特定数据

  25. 25

    在我的应用程序中升级sqlite数据库

  26. 26

    如何使用SQLite数据库开发Android应用程序?

  27. 27

    在Android中升级SQLite数据库

  28. 28

    android中的sqlite数据库错误

  29. 29

    在Android中连接SQLite数据库

热门标签

归档