从sqlite android正确插入和获取数据

时间:2016-07-17 12:43:19

标签: android sqlite android-sqlite

嗨我非常新的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我无法看到我添加的区域列表。关于我做错了什么的任何想法?非常感谢!

1 个答案:

答案 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);