将数据添加到SQLite

时间:2016-01-23 12:14:59

标签: android sqlite

我正在创建我的第一个启用数据的应用,但我正在努力完成最后一部分 - 实际上是添加和检索数据。现在我只关心向表中添加数据。关注this tutorial我已经为我的表创建了模型类,并使用我所有的CRUD方法创建了一个DBHelper类(如果需要,我可以发布所有这些,但不确定它们是否有必要回答这个问题。如果我有问题请纠正我我错了!)。不幸的是,本教程在此结束,并没有详细介绍如何将数据从应用程序的UI传递到数据库中。

经过一些谷歌搜索后,我找到了一个如何将一些数据传递给这些方法的例子,但是只知道如何一次传递一个数据,所以只有在我的表只有一个字段时才真正有用 - 我的只有一个以上之一。

例如,如果我有一个用于“Todo”任务的表,在我的dbhelper中我的create方法可能是;

public void createTodo(String todoText) {
    ContentValues contentValues = new ContentValues();
    contentValues.put("todo", todoText);
    // Insert into DB
    db.insert("todos", null, contentValues);
}

所以从我的活动中我只需要

dao.createTodo(todoTextValue);

对于我的应用程序,我将一次添加多个字段,因此我的create方法看起来像这样;

public long createSite(Site site){
    SQLiteDatabase database = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_SITE_NAME, site.getSiteName());
    values.put(KEY_SITE_LAT, site.getSiteLat());
    values.put(KEY_SITE_LON, site.getSiteLon());
    values.put(KEY_CREATED_AT, site.getSiteCreatedDateTime());

    // Insert Row
    long siteid = database.insert(TABLE_SITES, null, values);

所以我的问题是如何将所有不同的数据传递给createSite方法。

3 个答案:

答案 0 :(得分:1)

    ClassLoader loader = this.getClass().getClassLoader();
    InputStream createTableInputStream = loader.getResourceAsStream("val_table_create.sql");

    if (createTableInputStream == null) {
        logger.severe("No tempalte found for creating table!\n");
        return;
    }

    List<Sheet> bookSheets = getSheets(book);

    for (Sheet sheet : bookSheets) {
        setHeader(table, sheet);

        String exportText = getString(createTableInputStream);
        exportText = exportText.replaceAll(TABLE_NAME, tableName);
        // exportText = exportText.replaceAll(VAL_DATA_TYPE, valDataType);
        // exportText = exportText.replaceAll(MSG_TEXT_DATA_TYPE, messageDataType);
        exportFile(exportText, absoluteWorkspacePath + File.separator + outputPath + File.separator, tableName, ".sql");
    }

    if (createTableInputStream != null) {
        createTableInputStream.close();
    }

将元素添加到您刚添加的类

public long createSite(Model site,String name, String address){
    SQLiteDatabase database = this.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put(KEY_NAME, site.name);
    values.put(KEY_ADDRESS, site.address);

    // Insert Row
    long siteid = database.insert(TABLE_SITES, null, values);

在你的活动中你称之为 在java中添加一个新对象,在本例中为Model

public class Model {
        String name;
        String address;
        //add year as many as you need
        Model(String name, String address){
             this.name=name;
             this.address=address;
        }


    }

你只需转到

Model x = new Model("josh","Ireland");

答案 1 :(得分:1)

我不知道这是否真的需要一个答案,但这里是一个代码......

假设您的Site类是这样的。

    public class Site {
        private String siteName;
        private double siteLat;
        private double siteLon;
        private Date siteCreatedDateTime;

        // getters and setters here
    }

然后,将EditText值中的数据传递给新的Site对象。它会在你的活动中看起来像这样。

EditText siteNameInput = (EditText) findViewById(R.id.siteNameInput);
EditText siteLatInput = (EditText) findViewById(R.id.siteLatInput);
EditText siteLonInput = (EditText) findViewById(R.id.siteLonInput);
EditText siteCreatedDateTimeInput = (EditText) findViewById(R.id.siteCreatedDateTimeInput);

String siteName = siteNameInput.getText().toString();
String siteLat = siteLatInput.getText().toString();
String siteLon = siteLonInput.getText().toString();
String siteCreatedDateTime= siteCreatedDateTimeInput.getText().toString();

Site site = new Site();
site.setSiteName(siteName);
site.setSiteLat(siteLat);
site.setSiteLon(siteLon);
site.setSiteCreatedDateTime(siteCreatedDateTime);

dao.createSite(site);

希望这有助于您...您可以在Java here

中了解有关面向对象编程的更多信息

答案 2 :(得分:0)

Todo和Site是模特。每个变量代表该表的一列。您需要为每个表创建自定义模型。 createSite方法接受Site类型的对象,并将其作为DB中TABLE_SITES中的行添加。 values.put(...)采用columnName,value。所以在这里你给出自己的列名和值。

我建议你使用像活跃的android这样的orm而不是进入所有这些: http://www.activeandroid.com/