嗨我非常新的android所以我有这个功能,需要从我的数据库添加和检索。到目前为止这里是我的,所以我有这组java文件 newLoc.java包含用户单击保存按钮时响应的代码。 Area.java包含getter和setter。 DBHandler.java有数据库的东西。 在添加区域我记录了它,以便我可以检查它是否被添加。问题是我正在读表。在我的newLoc.java中,我还调用了getALLAREA函数来检查记录是否被插入但是唯一的输出就是数据库中记录的ID,我做错了什么想法? 代码在这里
newLoc.java
这是用户点击保存按钮时响应的代码。它从editText获取数据然后调用DBHanlder来添加数据
public void onClick(View v)
{
String text ="user created";
Toast tempMessage =
Toast.makeText(newLoc.this,
text,
Toast.LENGTH_SHORT);
tempMessage.show();
areaname = narea.getText().toString();
DBHandler db = new DBHandler(newLoc.this);
Log.d("Insert: ", "Inserting .." + areaname);
db.addNArea( new Area(areaname));
Log.d("Reading: " , "Reading users..");
List<Area> area = db.getALLAREA();
for(Area ar : area)
{
String arean = ar.getArea();
Log.d("Areas" , arean);
}
}
Area.java
这是我在区域内的吸气剂和设定者
public class Area
{
private int arID;
private String narea;
public Area()
{
}
public Area(String area)
{
this.narea = area;
}
public void setArea(String area)
{
this.narea = area;
}
public String getArea()
{
return narea;
}
}
DBHandeler.java
这是完成数据库工作的地方。在addNArea
中,我在try中放入一个日志来检查是否添加了数据。日志正在打印来自用户的数据,所以我认为它正确插入,因为我无法从日志中看到错误
public void addNArea(Area are)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_ANAME, are.getArea());
try
{
db.insert(TABLE_AREA, null, values);
Log.d("Insert: ", "Inserting .." + are.getArea());
}
catch (SQLException e)
{
Log.d("error: " , "" + e);
}
db.close();
}
//view areas
public List<Area> getALLAREA()
{
List<Area> arealist = new ArrayList<Area>();
String selectQuery = "SELECT * FROM " + TABLE_AREA;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
Area allarea = new Area();
allarea.setArea(cursor.getString(0));
arealist.add(allarea);
} while (cursor.moveToNext());
}
return arealist;
}
现在的问题是,在我的newLoc.java
我无法看到我添加的区域列表。关于我做错了什么的任何想法?非常感谢!
答案 0 :(得分:1)
你不应该使用
'SELECT *'
使用:
'SELECT KEY_ANAME'
这就是为什么: 通过创建内容值
values.put(KEY_ANAME, are.getArea())
db驱动程序将生成:
INSERT INTO tabname (col1) values ('my area name')
如果您定义了
KEY_ANAME = "col1"
也许这就是你真正想要做的事情: 假设你的表有这个定义:
TArea (pk_area int pkey, area_name varchar(100))
比你的插图看起来像:
private static final String COL_NAME = "area_name";
private static final String PKEY = "pk_area";
private static final String TAB_AREA = "TArea";
...
values.put(COL_NAME, are.getArea())
你的选择如下:
String sql = "SELECT " + PKEY +", "+ COL_NAME + " FROM " + TAB_AREA;
Cusor cur = db.rawQuerry(sql, null);
...
int id = cur.getInt(0);
String name = getString.get(1);