我正在创建我的第一个启用数据的应用,但我正在努力完成最后一部分 - 实际上是添加和检索数据。现在我只关心向表中添加数据。关注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方法。
答案 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/