【问题标题】:Error:no such table: When Inserting Data in Sqlite Database错误:没有这样的表:在 Sqlite 数据库中插入数据时
【发布时间】:2015-08-11 11:49:00
【问题描述】:

我正在尝试将数据插入sqlite Database。我正在关注YoutubeTutorial 来完成这项任务。

我编写了以下代码,它成功创建了Sqlite Database file,但是当我尝试插入数据时,它给了我错误消息。

我已经编写了以下代码。请指导我在这里做错了什么。

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME="ep";  
    public static final String TABLE_NAME= "transactionsHistory";
    public static final String ID= "ID";
    public static final String MESSAGE= "MESSAGE";
    public static final String CREATE_TABLE= "create table "+ TABLE_NAME + " ( "+ID+" INTEGER PRIMARY KEY AUTO INCREMENT, "+MESSAGE+" TEXT)";
    public static final String DROP_TABLE= "DROP TABLE IF EXISTS"+ TABLE_NAME; 
    private Context context;


    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null , 1);
        SQLiteDatabase db= this.getWritableDatabase();
        this.context= context; 
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            db.execSQL(CREATE_TABLE);
        } catch (SQLException e) {                  
            e.printStackTrace();        
        }
  }

public void insertData(DatabaseHelper dbHelper , String Message){

    SQLiteDatabase db= dbHelper.getWritableDatabase();

    ContentValues contentValues= new ContentValues();
    contentValues.put(MESSAGE, Message);
    db.insert(TABLE_NAME, null, contentValues);

    Log.d("Insert Successfull ", "Value : "+Message + " :Data Inserted");
}

在 Activity 中调用 DB 类

public class SuccessActivity extends Activity {

    TextView successMessage;
    String failureMessage;
    DatabaseHelper myDb;

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

        myDb= new DatabaseHelper(this);

        myDb.insertData(myDb, "This is a Random Message ");

错误

08-11 13:16:46.883: I/SqliteDatabaseCpp(22338): sqlite returned: error code = 1, msg = no such table: transactionsHistory, db=/data/data/com.example.ep/databases/ep
08-11 13:16:46.903: E/SQLiteDatabase(22338): Error inserting MESSAGE=This is a Random Message 
08-11 13:16:46.903: E/SQLiteDatabase(22338): android.database.sqlite.SQLiteException: no such table: transactionsHistory: , while compiling: INSERT INTO transactionsHistory(MESSAGE) VALUES (?)
08-11 13:16:46.903: E/SQLiteDatabase(22338):    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
08-11 13:16:46.903: E/SQLiteDatabase(22338):    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)

【问题讨论】:

  • 我认为您已经更改了表名,并且在再次运行之前没有卸载应用程序。卸载应用程序并再次运行。看看这是否对您有帮助。
  • 为什么是myDb.insertData(myDb, ...?复制粘贴错误?
  • 我从DDBMS 中删除了sqlite database 文件并重新启动应用程序..但问题仍然存在
  • 它是myDb.insertData(myDb, "This is a Random Message ");
  • 为什么需要那个参数?此外,您可能希望显示该方法的实现,因为错误发生在那里......

标签: android sql sqlite android-sqlite


【解决方案1】:

没有创建您的表,因为您的 create table 语句中有错误。 AUTOINCREMENT 之间不应有空格 - 即应该是:

public static final String CREATE_TABLE= "create table "+ TABLE_NAME + " ( "+ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+MESSAGE+" TEXT)";

【讨论】:

  • 非常感谢!!我在stackoverflow 上看到了所有与此相关的问题,其中许多包含Syntax Error,我觉得他们怎么会这么盲目>
  • 很高兴为您提供帮助。犯这样的小错误很容易做到,有时您会忽略明显的期望问题比实际复杂得多!如果您对它解决问题感到满意,请接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多