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
最满意答案
我们来举一个具体的例子
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.0·从UISearchField查询用户名的用户·Swift(Firebase 2.0・Query Users for Username from UISearchField・Swift)[2023-11-15]
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").queryLimited(toLast: 1).observeSingleEvent(of: .childAdded, with: { (snapshot) in if let value = snapshot.value as? [String: An ...
-
Firebase延迟加载(Firebase lazy load)[2023-08-24]
您误解了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中存储位置的方式,但您可以将其设置为 ...
-
使用$ set()将用户对象添加到Firebase中的/ users(Using $set() to add a User object to /users in Firebase)[2022-04-30]
如果您创建对users/的引用,然后在该路径上调用$set ,那么您包含的任何数据都将替换该路径上的任何内容。 这是AngularFire 101 。 如果不是整个指南,您应该首先阅读至少该部分。 选择创建同步对象时要设置数据的路径。 var ref = new Firebase('.../users/'+user.uid); var sync = $firebase(ref); sync.$set({ email: user.email, provider: user.provider }); 或者,更 ...