2016-01-23 201 views
0

我正在创建我的第一个启用数据的应用程序,但我正在与最后一部分挣扎 - 实际上是添加和检索数据。现在我只关心向表中添加数据。以下this tutorial我已经创建了我的表和一个DBHelper类与我的所有CRUD方法的模型类(我可以发布所有这些如果需要但不知道他们有必要回答这个问题,请纠正我,如果我错了!)。不幸的是,教程在这里结束,并没有详细讨论如何将数据从应用程序的UI传递到数据库。将数据添加到SQLite

经过Google的一些搜索,我发现了一个如何传递一些数据到这些方法的例子,但一次只传递一个数据,所以只有当我的表只有一个字段时才真正有用 - 我的更多不止一个。例如,如果我有一个表“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); 

对于我的应用我会在同一时间内添加多个领域,所以我创建方法如下所示;

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方法。

+0

你所说的“创造”的方法呢? “createSite”方法? –

+0

我不清楚你问什么,确切地说。看起来你已经明白了。 –

+0

道歉,是的确切 –

回答

1

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

假设你的站点类是这样的。

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

0

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

而是进入这一切的,我建议你使用像Android活跃的ORM: http://www.activeandroid.com/

1
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); 

将元素添加到了类,你只需要添加

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; 
     } 


    } 

而且在你活动你打电话给这个 在java中添加一个新的对象在这种情况下Model

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

,你只是传递给

dao.createTodo(x); 
+3

如果你不打算使用它并且只是单独传递String值,那么拥有该模型有什么意义呢? – Mo1989

+0

是的,他可以创建一个模型,但如果他问如何传递元素,是因为我不想创建一个对象。 – JMR

+0

“网站”是模型。他只需要添加变量。 – Mo1989

相关问题