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

properly inserting and getting data from sqlite android

嗨,我是 android 的新手,所以我有这个功能需要从我的数据库中添加和检索。到目前为止,这是我所拥有的,所以我有这组 java 文件 newLoc.java 包含用户单击保存按钮时响应的代码。 Area.java 包含 getter 和 setter。 DBHandler.java 有数据库的东西。 在添加区域我已经记录了它以便我可以检查它是否被添加。问题出在我阅读 table 时。在我的 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

这是我的 getter 和 setter 来自

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

你不应该使用

    'SELECT *'

使用:

  'SELECT KEY_ANAME'

这就是为什么: 通过创建内容值

    values.put(KEY_ANAME, are.getArea())

数据库驱动程序将生成:

  INSERT INTO tabname (col1) values ('my area name')

如果你定义了

   KEY_ANAME = "col1"

也许这就是你真正想做的: 假设你的 table 有这样的定义:

    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())

你的 select 喜欢:

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