首页 \ 问答 \ SQLite异常:没有像table这样的东西(SQLite Exception : no such like table)

SQLite异常:没有像table这样的东西(SQLite Exception : no such like table)

我在Android Studio中读了一个简单的数据库,但当我点击保存按钮时,它会抛出一个异常“SQLite Exception:no like like table”。 我无法理解问题出在哪里? 我在下面分享代码和logcat。 感谢您的帮助。

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;


public class Database{


    public static final String LOG_MESSAGE = "message";
    DatabaseHelper databaseHelper;
    public Database(Context context){
        databaseHelper = new DatabaseHelper(context);
    }

    public long insertData(String name){
        SQLiteDatabase db = databaseHelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(DatabaseHelper.NAME, name);
        long id= db.insert(DatabaseHelper.TABLE_NAME ,null,contentValues);
        db.close();
        return id;
    }

    public String getAllData(){
        SQLiteDatabase db = databaseHelper.getWritableDatabase();
        String[] columns = {DatabaseHelper.ID, DatabaseHelper.NAME};
        Cursor cursor = db.query(DatabaseHelper.TABLE_NAME,columns,null,null,null,null,null);
        StringBuffer buffer = new StringBuffer();
        while(cursor.moveToNext()){
            int id = cursor.getInt(0);
            String name = cursor.getString(1);
            buffer.append(id +" "+name +"\n");
        }
        cursor.close();
        return buffer.toString();
    }



 static class DatabaseHelper extends SQLiteOpenHelper{

    //database tanımlamaları buradan başlar
    private static final String DATABASE_NAME = "veritabanim.db";
    private static final int DATABASE_VERSION = 3;
    private  static final String TABLE_NAME = "veritabani";
    private static final String ID = "_id";
    private static final String NAME = "name";
    private static final String CREATE_TABLE =
                   "CREATE TABLE " + TABLE_NAME +
                    "("
                    + ID + "INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + NAME + "VARCHAR(255)" +
                    "); ";
    private static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
    private Context context;



    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.context =context;
        Log.i(LOG_MESSAGE,"constructur");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //CREATE TABLE deneme2 (_id INTEGER PRIMARY KEY AUYOINCREMENT, name VARCHAR(255));
        //yazılması gereken sorgu yukarıdakidir.

        try {
            Log.i(LOG_MESSAGE,"oncreate");
            db.execSQL(CREATE_TABLE);
        } catch (SQLException e) {
            e.printStackTrace();
        }


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        try {
            Log.i(LOG_MESSAGE,"upgrade");
            db.execSQL(DROP_TABLE);
            onCreate(db);
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}
}

主要活动

package com.example.ilk.deneme2veritabanislemleri;


import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;


public class Database{


    public static final String LOG_MESSAGE = "message";
    DatabaseHelper databaseHelper;
    public Database(Context context){
        databaseHelper = new DatabaseHelper(context);
    }

    public long insertData(String name){
        SQLiteDatabase db = databaseHelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(DatabaseHelper.NAME, name);
        long id= db.insert(DatabaseHelper.TABLE_NAME ,null,contentValues);
        db.close();
        return id;
    }

    public String getAllData(){
        SQLiteDatabase db = databaseHelper.getWritableDatabase();
        String[] columns = {DatabaseHelper.ID, DatabaseHelper.NAME};
        Cursor cursor = db.query(DatabaseHelper.TABLE_NAME,columns,null,null,null,null,null);
        StringBuffer buffer = new StringBuffer();
        while(cursor.moveToNext()){
            int id = cursor.getInt(0);
            String name = cursor.getString(1);
            buffer.append(id +" "+name +"\n");
        }
        cursor.close();
        return buffer.toString();
    }



 static class DatabaseHelper extends SQLiteOpenHelper{

    //database tanımlamaları buradan başlar
    private static final String DATABASE_NAME = "veritabanim.db";
    private static final int DATABASE_VERSION = 3;
    private  static final String TABLE_NAME = "veritabani";
    private static final String ID = "_id";
    private static final String NAME = "name";
    private static final String CREATE_TABLE =
                   "CREATE TABLE " + TABLE_NAME +
                    "("
                    + ID + "INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + NAME + "VARCHAR(255)" +
                    "); ";
    private static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
    private Context context;



    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.context =context;
        Log.i(LOG_MESSAGE,"constructur");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //CREATE TABLE deneme2 (_id INTEGER PRIMARY KEY AUYOINCREMENT, name VARCHAR(255));
        //yazılması gereken sorgu yukarıdakidir.

        try {
            Log.i(LOG_MESSAGE,"oncreate");
            db.execSQL(CREATE_TABLE);
        } catch (SQLException e) {
            e.printStackTrace();
        }


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        try {
            Log.i(LOG_MESSAGE,"upgrade");
            db.execSQL(DROP_TABLE);
            onCreate(db);
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}
}

logcat的

06-27 19:07:21.286  29194-29194/com.example.ilk.deneme2veritabanislemleri E/SQLiteLog﹕ (1) no such table: veritabani
06-27 19:07:21.286  29194-29194/com.example.ilk.deneme2veritabanislemleri E/SQLiteDatabase﹕ Error inserting name=yazı
    android.database.sqlite.SQLiteException: no such table: veritabani (code 1): , while compiling: INSERT INTO veritabani(name) VALUES (?)
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
            at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
            at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
            at com.example.ilk.deneme2veritabanislemleri.Database.insertData(Database.java:28)
            at com.example.ilk.deneme2veritabanislemleri.MainActivity$1.onClick(MainActivity.java:48)
            at android.view.View.performClick(View.java:4443)
            at android.view.View$PerformClick.run(View.java:18433)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5021)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
            at dalvik.system.NativeStart.main(Native Method)

I read a simply database in Android Studio but ıt's throw a exception that "SQLite Exception : no such like table" when I click save button. I cannot understand where is the problem ? I'm sharing codes and logcat in below. Thank you for your help.

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;


public class Database{


    public static final String LOG_MESSAGE = "message";
    DatabaseHelper databaseHelper;
    public Database(Context context){
        databaseHelper = new DatabaseHelper(context);
    }

    public long insertData(String name){
        SQLiteDatabase db = databaseHelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(DatabaseHelper.NAME, name);
        long id= db.insert(DatabaseHelper.TABLE_NAME ,null,contentValues);
        db.close();
        return id;
    }

    public String getAllData(){
        SQLiteDatabase db = databaseHelper.getWritableDatabase();
        String[] columns = {DatabaseHelper.ID, DatabaseHelper.NAME};
        Cursor cursor = db.query(DatabaseHelper.TABLE_NAME,columns,null,null,null,null,null);
        StringBuffer buffer = new StringBuffer();
        while(cursor.moveToNext()){
            int id = cursor.getInt(0);
            String name = cursor.getString(1);
            buffer.append(id +" "+name +"\n");
        }
        cursor.close();
        return buffer.toString();
    }



 static class DatabaseHelper extends SQLiteOpenHelper{

    //database tanımlamaları buradan başlar
    private static final String DATABASE_NAME = "veritabanim.db";
    private static final int DATABASE_VERSION = 3;
    private  static final String TABLE_NAME = "veritabani";
    private static final String ID = "_id";
    private static final String NAME = "name";
    private static final String CREATE_TABLE =
                   "CREATE TABLE " + TABLE_NAME +
                    "("
                    + ID + "INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + NAME + "VARCHAR(255)" +
                    "); ";
    private static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
    private Context context;



    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.context =context;
        Log.i(LOG_MESSAGE,"constructur");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //CREATE TABLE deneme2 (_id INTEGER PRIMARY KEY AUYOINCREMENT, name VARCHAR(255));
        //yazılması gereken sorgu yukarıdakidir.

        try {
            Log.i(LOG_MESSAGE,"oncreate");
            db.execSQL(CREATE_TABLE);
        } catch (SQLException e) {
            e.printStackTrace();
        }


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        try {
            Log.i(LOG_MESSAGE,"upgrade");
            db.execSQL(DROP_TABLE);
            onCreate(db);
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}
}

MainActivity

package com.example.ilk.deneme2veritabanislemleri;


import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;


public class Database{


    public static final String LOG_MESSAGE = "message";
    DatabaseHelper databaseHelper;
    public Database(Context context){
        databaseHelper = new DatabaseHelper(context);
    }

    public long insertData(String name){
        SQLiteDatabase db = databaseHelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(DatabaseHelper.NAME, name);
        long id= db.insert(DatabaseHelper.TABLE_NAME ,null,contentValues);
        db.close();
        return id;
    }

    public String getAllData(){
        SQLiteDatabase db = databaseHelper.getWritableDatabase();
        String[] columns = {DatabaseHelper.ID, DatabaseHelper.NAME};
        Cursor cursor = db.query(DatabaseHelper.TABLE_NAME,columns,null,null,null,null,null);
        StringBuffer buffer = new StringBuffer();
        while(cursor.moveToNext()){
            int id = cursor.getInt(0);
            String name = cursor.getString(1);
            buffer.append(id +" "+name +"\n");
        }
        cursor.close();
        return buffer.toString();
    }



 static class DatabaseHelper extends SQLiteOpenHelper{

    //database tanımlamaları buradan başlar
    private static final String DATABASE_NAME = "veritabanim.db";
    private static final int DATABASE_VERSION = 3;
    private  static final String TABLE_NAME = "veritabani";
    private static final String ID = "_id";
    private static final String NAME = "name";
    private static final String CREATE_TABLE =
                   "CREATE TABLE " + TABLE_NAME +
                    "("
                    + ID + "INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + NAME + "VARCHAR(255)" +
                    "); ";
    private static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
    private Context context;



    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.context =context;
        Log.i(LOG_MESSAGE,"constructur");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //CREATE TABLE deneme2 (_id INTEGER PRIMARY KEY AUYOINCREMENT, name VARCHAR(255));
        //yazılması gereken sorgu yukarıdakidir.

        try {
            Log.i(LOG_MESSAGE,"oncreate");
            db.execSQL(CREATE_TABLE);
        } catch (SQLException e) {
            e.printStackTrace();
        }


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        try {
            Log.i(LOG_MESSAGE,"upgrade");
            db.execSQL(DROP_TABLE);
            onCreate(db);
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}
}

logcat

06-27 19:07:21.286  29194-29194/com.example.ilk.deneme2veritabanislemleri E/SQLiteLog﹕ (1) no such table: veritabani
06-27 19:07:21.286  29194-29194/com.example.ilk.deneme2veritabanislemleri E/SQLiteDatabase﹕ Error inserting name=yazı
    android.database.sqlite.SQLiteException: no such table: veritabani (code 1): , while compiling: INSERT INTO veritabani(name) VALUES (?)
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
            at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
            at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
            at com.example.ilk.deneme2veritabanislemleri.Database.insertData(Database.java:28)
            at com.example.ilk.deneme2veritabanislemleri.MainActivity$1.onClick(MainActivity.java:48)
            at android.view.View.performClick(View.java:4443)
            at android.view.View$PerformClick.run(View.java:18433)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5021)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
            at dalvik.system.NativeStart.main(Native Method)

原文:https://stackoverflow.com/questions/31090753
更新时间:2023-09-20 18:09

最满意答案

我们来举一个具体的例子

posts
  post_0
    likes
      user_0: true
      user_2: true
  post_1
    likes
      user_1: true

users
  user_0
    name: "Gilligan"
    likes:
      post_0: true
  user_1
    name: "Mary Ann"
    likes
      post_1: true
  user_2
    name: "Thurston"
    likes:
      post_0: true
  user_3
    name: "Ginger"
    likes: false

然后查询用户节点的所有用户喜欢是假的,在这种情况下,这将是姜。

   let query = usersRef.queryOrdered(byChild: "likes").queryEqual(toValue: false)
   query.observeSingleEvent(of: .value, with: { snapshot in
        print(snapshot)
   }

Let's use a concrete example

posts
  post_0
    likes
      user_0: true
      user_2: true
  post_1
    likes
      user_1: true

users
  user_0
    name: "Gilligan"
    likes:
      post_0: true
  user_1
    name: "Mary Ann"
    likes
      post_1: true
  user_2
    name: "Thurston"
    likes:
      post_0: true
  user_3
    name: "Ginger"
    likes: false

Then query the users node for all users where likes is false, which would be Ginger in this case.

   let query = usersRef.queryOrdered(byChild: "likes").queryEqual(toValue: false)
   query.observeSingleEvent(of: .value, with: { snapshot in
        print(snapshot)
   }

相关问答

更多
  • 我想你需要做两个改变: 更换 self.tableview.reloadData() 同 DispatchQueue.main.async { self.tableview.reloadData() } 由于您正在对UI进行更改,因此您应该在主线程上运行它。 第二,我认为你应该删除viewDidDisappear中的观察者,所以从上面的代码中删除这行ref.removeAllObservers() 。 我能看到的另一个问题是这段代码: if let fullName = value["full ...
  • Firebase 2.x和3.x. 由于您提到您正在使用firebase 2.0,因此您应该查看orderedByChild()与queryEqualToValue()结合使用的queryEqualToValue() 旧文档 。 无论哪种方式,在新的firebase文档中搜索,您将看到在排序和过滤数据方面没有任何变化,因此您仍将在两个版本中使用相同的调用。 ref.child("users").queryOrderedByChild("username").queryEqualToValue(usernam ...
  • 我不认为这是可能的。 从Firebase文档: 规则以原子方式应用。 这意味着如果在该位置或授予访问权限的父位置没有规则,则读取或写入操作会立即失败。 即使可以访问每个受影响的子路径,在父位置读取也会完全失败。 在您的情况下,当您尝试按username进行过滤但是没有父节点users规则时,您将无法完成过滤,因为PERMISSION_DENIED将失败。 您可以访问users/a_valid_uid/username作为整个路径是可访问的。 你可以做的解决方法就是让一个单独的节点只包含用户名,并让公众可以阅 ...
  • 如果您知道要启动哪个用户,则只需执行limitToFirst(2) 。 所以: DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference("users"); Query twoUsers = usersRef.orderByKey().startAt("MDSxw").limitToFirst(2); twoUsers.addValueEventListener(new ValueEventListener() { ...
  • 我们来举一个具体的例子 posts post_0 likes user_0: true user_2: true post_1 likes user_1: true users user_0 name: "Gilligan" likes: post_0: true user_1 name: "Mary Ann" likes post_1: true user_2 name ...
  • 您可以使用此代码获得最小的孩子:(因为您最年轻的日期是最大的数字,所以我使用toLast ) ref.child("members").queryOrdered(byChild:"birthday").queryL‌​im‌​ited(toLast: 1).observeSingleEvent(of: .childAdded, with: { (snapshot) in if let value = snapshot.value as? [String: An ...
  • 您误解了Firebase查询的工作原理。 最简单的看看你是否使用硬编码值: firebase.database().ref('items') .orderByChild('title') .startAt(0) .endAt(14) .limitToFirst(15) 没有title=0或title=14 ,因此查询与任何内容都不匹配。 Firebase数据库查询与您订购的属性的值匹配。 因此,当您按title排序时,您在startAt和endAt指定的值必须是标题。 例如 ...
  • 我认为你的查询是正确的,你忘记了观察者: FIRDatabase.database().reference() .child("groups").queryOrdered(byChild: "users/" + uid).queryEqual(toValue: writable).observe(FIRDataEventType.value, with: { (snapshot) in // Do what you need with your snapshot here // chec ...
  • 我强烈建议使用Geofire这样的东西。 要进行设置,您的数据结构会略有变化。 您仍然可以在用户上存储lat / lng,但您还会创建一个名为users_locations的新Firebase表 您的users_locations表将通过Geofire填充,看起来像这样 users_locations user_id0: g: 5pf666y l: 0: 40.00000 1: -74.00000 通常,这是您在Geofire中存储位置的方式,但您可以将其设置为 ...
  • 如果您创建对users/的引用,然后在该路径上调用$set ,那么您包含的任何数据都将替换该路径上的任何内容。 这是AngularFire 101 。 如果不是整个指南,您应该首先阅读至少该部分。 选择创建同步对象时要设置数据的路径。 var ref = new Firebase('.../users/'+user.uid); var sync = $firebase(ref); sync.$set({ email: user.email, provider: user.provider }); 或者,更 ...

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。