Android Studio - SQLite插入不插入多个列

时间:2017-02-27 00:11:59

标签: android sqlite

TL; DR:我认为我在android studio中的SQLite数据库中正确使用put()insert()。 编辑:我也得到这个例外,所以我认为我的错误是在创建数据库的某个地方

E/SQLiteLog: (1) table yarns has no column named _id

我正在使用SQLite数据库制作库存应用程序。但是,似乎我的插入不是向每列添加数据。我的数据库处理程序具有所有必需品,例如表的命名,列,数据库版本。

这是我的DBHandlers onCreate(),我是按照教程制作的。

// Database Version
private static final int DATABASE_VERSION = 2;
// Database Name
private static final String DATABASE_NAME = "yarnInfo.db";

// Contacts table name
private static final String TABLE_NAME = "yarns";
// Shops Table Columns names
private static final String KEY_ID = "_id";
private static final String KEY_BRAND_NAME = "brand_name";
private static final String KEY_YARN_NAME = "yarn_name";
private static final String KEY_COLOR = "color";
private static final String KEY_FIBER = "fiber";
private static final String KEY_BALLS_AVAILABLE = "balls_available";
private static final String KEY_YARDAGE = "yardage";

@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_NAME + "("
            + KEY_ID + " INTEGER PRIMARY KEY,"
            + KEY_BRAND_NAME + " TEXT, "
            + KEY_YARN_NAME + " TEXT, "
            + KEY_COLOR + " TEXT, "
            + KEY_FIBER + " TEXT, "
            + KEY_BALLS_AVAILABLE + " DOUBLE, "
            + KEY_YARDAGE + " DOUBLE " + ")";
    db.execSQL(CREATE_CONTACTS_TABLE);
}

在我的数据库处理程序中添加数据库功能。

public void addYarn(Yarn yarn) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    values.put(KEY_ID,yarn.getID());
    values.put(KEY_BRAND_NAME, yarn.getBrandName()); // Yarn Brand Name
    values.put(KEY_YARN_NAME, yarn.getYarnName()); // Yarn Name
    //db.insert(TABLE_NAME, null, values);
    values.put(KEY_COLOR, yarn.getColor()); // Yarn Color
    values.put(KEY_FIBER, yarn.getFiber()); // Yarn Fiber
    values.put(KEY_BALLS_AVAILABLE, yarn.getBallsAvailable());
    values.put(KEY_YARDAGE, yarn.getYardage()); // Yarn yardage

    db.insert(TABLE_NAME, null, values);
}

如果我在纱线名称和纱线颜色之间取消注释第一个db.insert(...),我可以读取品牌名称和纱线名称。

使用我的数据库处理程序,这就是我在mainActivity中添加纱线的方式。

    myDB.addYarn(new Yarn(1, "Red Heart", "Comfy", "Red", "100% Acrylic", 5.3, 400.0));
    myDB.addYarn(new Yarn(2, "Baron", "Baby", "Blue", "100% Acrylic", 3, 400.0));
    myDB.addYarn(new Yarn(3, "Knit Picks", "Lux", "Purple", "100% Silk", 2, 50));

我正在使用“brand_name - yarn_name”显示纱线的列表视图。但我不能添加颜色,纤维或其他任何东西。这个功能在我的mainActivity中,并填充listView。

public void refreshDB() {
    final ListView listView = (ListView) findViewById(R.id.listView);
    ArrayList<String> theList = new ArrayList<>();
    final Cursor data = myDB.getCursor();
    Toast.makeText(this, "count:" + myDB.findLastID(),     Toast.LENGTH_LONG).show();

if (data.getCount() == 0) {
    Toast.makeText(this, "There are no contents in this list!", Toast.LENGTH_LONG).show();
} else {
    while (data.moveToNext()) {
        theList.add(data.getString(1) + " - " + data.getString(2));
        ListAdapter listAdapter = new ArrayAdapter<>(this, android.R.layout.simple_expandable_list_item_1, theList);
        listView.setAdapter(listAdapter);
    }
}

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent intent = new Intent(MainActivity.this, yarnView.class);
        intent.putExtra("key", position);
        startActivity(intent);
    }
});
}

同样,当我取消注释db.insert(...)时,我得到插入的纱线列表和“count = 3”的吐司。当我按原样离开时,我得到一个“count = 0”而没有列表。我也无法在列表中添加其他列。 (我的onclicklistener也没有工作,如果您发现任何问题...我想将ID发送到另一个活动以显示有关纱线的更多细节)

E.g。这不起作用,应用程序崩溃。

theList.add(data.getString(1) + " - " + data.getString(2)" - " + data.getString(3));

所以我不认为插入是在所有列中添加。如果它不在这里我的问题可能在哪里?

感谢您的帮助。

0 个答案:

没有答案