Android Sqlite“没有这样的表”错误

穆罕默德·P。

我正在尝试了解 android 中的 Sqlite 数据库,但我无法处理简单的工作。当我使用“insertWord”在数据库中插入一条记录时,出现此错误。这看起来很有趣,因为类型表是由程序创建并插入值的。我究竟做错了什么?。

这是我的代码(Database.Java)。

package com.pekgenc.mehmet.spinnerexample;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.annotation.NonNull;
import android.util.Log;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**
 * Created by Mehmet on 18.08.2017.
 */

public class Database extends SQLiteOpenHelper {

    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "mywordbank";

    // Labels table name
    private static final String TABLE_TYPES = "types";

    // Labels table column names
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";

    // Words table name
    private static final String TABLE_WORDS = "words";

    // Words table column names
    private static final String WKEY_ID = "id";
    private static final String WKEY_TUR_NAME = "tur_id";
    private static final String WKEY_ENGLISH = "english";
    private static final String WKEY_TURKISH = "turkish";
    private static final String WKEY_EXAMPLE = "example";

    public Database(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CATEGORIES_TABLE = "CREATE TABLE " + TABLE_TYPES + "("
                + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + " TEXT)";

        String CREATE_WORDS_TABLE = "CREATE TABLE " + TABLE_WORDS + "("
                + WKEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + WKEY_TUR_NAME + " INTEGER,"
                + WKEY_ENGLISH + " TEXT," + WKEY_TURKISH + " TEXT," + WKEY_EXAMPLE + " TEXT)";

        db.execSQL(CREATE_CATEGORIES_TABLE);
        try {
            db.execSQL(CREATE_WORDS_TABLE);
        }
        catch (SQLiteException es)
        {
            Log.e("ERR: ", es.getMessage());
        }


        // Inserting label values
        db.execSQL("INSERT INTO " + TABLE_TYPES + "(" + KEY_NAME + ")" + " VALUES ('Adjective')");
        db.execSQL("INSERT INTO " + TABLE_TYPES + "(" + KEY_NAME + ")" + " VALUES ('Adverb')");
        db.execSQL("INSERT INTO " + TABLE_TYPES + "(" + KEY_NAME + ")" + " VALUES ('Conjunction')");
        db.execSQL("INSERT INTO " + TABLE_TYPES + "(" + KEY_NAME + ")" + " VALUES ('Determiner')");
        db.execSQL("INSERT INTO " + TABLE_TYPES + "(" + KEY_NAME + ")" + " VALUES ('Idiom')");
        db.execSQL("INSERT INTO " + TABLE_TYPES + "(" + KEY_NAME + ")" + " VALUES ('Interjection')");
        db.execSQL("INSERT INTO " + TABLE_TYPES + "(" + KEY_NAME + ")" + " VALUES ('Noun')");
        db.execSQL("INSERT INTO " + TABLE_TYPES + "(" + KEY_NAME + ")" + " VALUES ('Phrasal Verb')");
        db.execSQL("INSERT INTO " + TABLE_TYPES + "(" + KEY_NAME + ")" + " VALUES ('Phrase')");
        db.execSQL("INSERT INTO " + TABLE_TYPES + "(" + KEY_NAME + ")" + " VALUES ('Preposition')");
        db.execSQL("INSERT INTO " + TABLE_TYPES + "(" + KEY_NAME + ")" + " VALUES ('Pronoun')");
        db.execSQL("INSERT INTO " + TABLE_TYPES + "(" + KEY_NAME + ")" + " VALUES ('Verb')");
        db.execSQL("INSERT INTO " + TABLE_TYPES + "(" + KEY_NAME + ")" + " VALUES ('Other')");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_TYPES);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_WORDS);
        onCreate(db);
    }

    // Get all types
    public List<String> getAllLabels() {
        List<String> labels = new ArrayList<String>();

        String selectQuery = "SELECT * FROM " + TABLE_TYPES;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
            do {
                labels.add(cursor.getString(1));
            } while(cursor.moveToNext());
        }

        cursor.close();
        db.close();

        return labels;
    }

    // inserting a word in database
    public void insertWord(int tur_id, String english, String turkish, String example) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(WKEY_TUR_NAME, tur_id);
        values.put(WKEY_ENGLISH, english);
        values.put(WKEY_TURKISH, turkish);
        values.put(WKEY_EXAMPLE, example);

        try {
            db.insertOrThrow(TABLE_WORDS, null, values);
        }
        catch (SQLiteException e) {
            Log.e("ERR: ", e.getMessage());
        }
        db.close();
    }

    public List<String> fetchAllWords() {
        List<String> words = new ArrayList<String>();
        String selectQuery = "SELECT english, turkish FROM " + TABLE_WORDS;

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
            do {
                words.add(cursor.getString(1));
            } while(cursor.moveToNext());
        }

        cursor.close();
        db.close();

        return words;
    }
}

(添加Activity.Java)

package com.pekgenc.mehmet.spinnerexample;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import java.util.List;

public class AddActivity extends AppCompatActivity {

    EditText textEng, textTur, textExp;
    Button btnAdd, btnBack;
    Spinner sp;
    ArrayAdapter<String> adaptor;
    int selectedIndex;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);

        textEng = (EditText) findViewById(R.id.editTextEnglish);
        textTur = (EditText) findViewById(R.id.editTextTurkish);
        textExp = (EditText) findViewById(R.id.editTextExample);
        btnAdd  = (Button) findViewById(R.id.buttonAdd);
        btnBack = (Button) findViewById(R.id.buttonBack);
        sp      = (Spinner)findViewById(R.id.spinnerType);

        loadSpinnerData();

        sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                selectedIndex = parent.getSelectedItemPosition() + 1;
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Database db = new Database(getApplicationContext());
                db.insertWord(selectedIndex, textEng.getText().toString(), textTur.getText().toString(), textExp.getText().toString());
                db.close();
            }
        });
    }

    private void loadSpinnerData() {

        Database db = new Database(getApplicationContext());
        List<String> labels = db.getAllLabels();

        adaptor = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, labels);
        adaptor.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp.setAdapter(adaptor);
    }
}

(日志猫)

08-20 20:29:42.621 16118-16118/com.pekgenc.mehmet.spinnerexample E/SQLiteLog: (1) no such table: words
08-20 20:29:42.622 16118-16118/com.pekgenc.mehmet.spinnerexample E/ERR:: no such table: words (code 1): , while compiling: INSERT INTO words(example,english,turkish,tur_id) VALUES (?,?,?,?)

谢谢你。

缺口

你的代码看起来没问题,是不是你在添加 words 表时已经有了数据库?尝试删除应用程序并再次启动,这应该安全地重新创建所有表。如果这是问题,请在将来正确使用 DB version 字段

我建议在 Android 上使用GreenDAO for sqlite,它会让事情变得更容易

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android :: SQLite错误:没有这样的表

来自分类Dev

Android中的SQLite问题,“没有这样的表”错误

来自分类Dev

android sqlite没有这样的表

来自分类Dev

没有这样的表(Android SQLite)

来自分类Dev

Android SQLite(1)没有这样的表:查看错误

来自分类Dev

android P中的sqlite数据库错误“没有这样的表”

来自分类Dev

android.database.sqlite.SQLiteException:没有这样的表

来自分类Dev

SQLite在Android上没有这样的列错误

来自分类Dev

SQLite在Android上插入没有这样的列错误

来自分类Dev

SQLite Android没有这样的列错误

来自分类Dev

Android sqlite 更新错误没有这样的列

来自分类Dev

Android sqlitedatabase没有这样的表

来自分类Dev

没有这样的表:SQLiteOpenHelper Android

来自分类Dev

没有这样的表:SQLiteOpenHelper Android

来自分类Dev

Android SQLite错误:android.database.sqlite.SQLiteException:没有这样的列:(代码1)

来自分类Dev

android.database.sqlite.SQLiteException:表中没有这样的列

来自分类Dev

没有这样的表-在SQLite Android中插入值时出错

来自分类Dev

引起原因:android.database.sqlite.SQLiteException:没有这样的表,同时编译了DELETE FROM

来自分类Dev

如何解决Android Sqlite中没有这样的表错误

来自分类Dev

Android SQLite异常:没有这样的列

来自分类Dev

SQlite错误:“没有这样的表”

来自分类Dev

无法启动活动,android.database.sqlite.SQLiteException:没有这样的表,而在编译时:SELECT * FROM table

来自分类Dev

无法启动活动,android.database.sqlite.SQLiteException:没有这样的表,而在编译时:SELECT * FROM table

来自分类Dev

android.database.sqlite.SQLiteException:没有这样的列:highID(Sqlite 代码 1):

来自分类Dev

Android SQLiteException没有这样的列

来自分类Dev

Android sqlite数据库在更新查询时没有这样的列

来自分类Dev

没有这样的列:EPF(代码1 SQLITE_ERROR)Xamarin android

来自分类Dev

没有这样的列:在Android中编译sqlite时,rowId(代码1)

来自分类Dev

SQLite数据库错误:没有这样的表

Related 相关文章

  1. 1

    Android :: SQLite错误:没有这样的表

  2. 2

    Android中的SQLite问题,“没有这样的表”错误

  3. 3

    android sqlite没有这样的表

  4. 4

    没有这样的表(Android SQLite)

  5. 5

    Android SQLite(1)没有这样的表:查看错误

  6. 6

    android P中的sqlite数据库错误“没有这样的表”

  7. 7

    android.database.sqlite.SQLiteException:没有这样的表

  8. 8

    SQLite在Android上没有这样的列错误

  9. 9

    SQLite在Android上插入没有这样的列错误

  10. 10

    SQLite Android没有这样的列错误

  11. 11

    Android sqlite 更新错误没有这样的列

  12. 12

    Android sqlitedatabase没有这样的表

  13. 13

    没有这样的表:SQLiteOpenHelper Android

  14. 14

    没有这样的表:SQLiteOpenHelper Android

  15. 15

    Android SQLite错误:android.database.sqlite.SQLiteException:没有这样的列:(代码1)

  16. 16

    android.database.sqlite.SQLiteException:表中没有这样的列

  17. 17

    没有这样的表-在SQLite Android中插入值时出错

  18. 18

    引起原因:android.database.sqlite.SQLiteException:没有这样的表,同时编译了DELETE FROM

  19. 19

    如何解决Android Sqlite中没有这样的表错误

  20. 20

    Android SQLite异常:没有这样的列

  21. 21

    SQlite错误:“没有这样的表”

  22. 22

    无法启动活动,android.database.sqlite.SQLiteException:没有这样的表,而在编译时:SELECT * FROM table

  23. 23

    无法启动活动,android.database.sqlite.SQLiteException:没有这样的表,而在编译时:SELECT * FROM table

  24. 24

    android.database.sqlite.SQLiteException:没有这样的列:highID(Sqlite 代码 1):

  25. 25

    Android SQLiteException没有这样的列

  26. 26

    Android sqlite数据库在更新查询时没有这样的列

  27. 27

    没有这样的列:EPF(代码1 SQLITE_ERROR)Xamarin android

  28. 28

    没有这样的列:在Android中编译sqlite时,rowId(代码1)

  29. 29

    SQLite数据库错误:没有这样的表

热门标签

归档