java SQLite 错误代码 = 1
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12010235/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
SQLite error code = 1
提问by Eric Oboite
I'm trying to insert some data into my SQLite database. But I keeo receiving an error code 1 saying that my column does not exist. Can someone help me please, Below is my code:
我正在尝试将一些数据插入到我的 SQLite 数据库中。但是我 keeo 收到错误代码 1,说我的专栏不存在。有人可以帮我吗,下面是我的代码:
08-17 13:12:46.473: I/Database(13328): sqlite returned: error code = 1, msg = table login has no column named uid
08-17 13:12:46.503: E/Database(13328): Error inserting uid=502e7b90657ab1.86949026 created_at=2012-08-17 12:12:48 email=epaas name=hwheuu
08-17 13:12:46.503: E/Database(13328): android.database.sqlite.SQLiteException: table login has no column named uid: , while compiling: INSERT INTO login(uid, created_at, email, name) VALUES(?, ?, ?, ?);
08-17 13:12:46.503: E/Database(13328): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
08-17 13:12:46.503: E/Database(13328): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
08-17 13:12:46.503: E/Database(13328): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
08-17 13:12:46.503: E/Database(13328): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
08-17 13:12:46.503: E/Database(13328): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
08-17 13:12:46.503: E/Database(13328): at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1231)
08-17 13:12:46.503: E/Database(13328): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1658)
08-17 13:12:46.503: E/Database(13328): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1515)
08-17 13:12:46.503: E/Database(13328): at library.DatabaseHandler.addUser(DatabaseHandler.java:69)
08-17 13:12:46.503: E/Database(13328): at com.thryfting.www.RegisterActivity$register.doInBackground(RegisterActivity.java:135)
08-17 13:12:46.503: E/Database(13328): at com.thryfting.www.RegisterActivity$register.doInBackground(RegisterActivity.java:1)
08-17 13:12:46.503: E/Database(13328): at android.os.AsyncTask.call(AsyncTask.java:185)
08-17 13:12:46.503: E/Database(13328): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
08-17 13:12:46.503: E/Database(13328): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
08-17 13:12:46.503: E/Database(13328): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
08-17 13:12:46.503: E/Database(13328): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
08-17 13:12:46.503: E/Database(13328): at java.lang.Thread.run(Thread.java:1027)
Below is my database code:
下面是我的数据库代码:
package library;
import java.util.HashMap;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHandler extends SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "thryfting_api";
// Login table name
private static final String TABLE_LOGIN = "login";
// Login Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_EMAIL = "email";
private static final String KEY_UID = "uid";
private static final String KEY_CREATED_AT = "created_at";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
+ KEY_ID + " INTEGER PRIMARY KEY,"
+ KEY_NAME + " TEXT,"
+ KEY_EMAIL + " TEXT UNIQUE,"
+ KEY_UID + " INTEGER,"
+ KEY_CREATED_AT + " TEXT" + ")";
db.execSQL(CREATE_LOGIN_TABLE);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOGIN);
// Create tables again
onCreate(db);
}
/**
* Storing user details in database
* */
public void addUser(String name, String email, String uid, String created_at) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, name); // Name
values.put(KEY_EMAIL, email); // Email
values.put(KEY_UID, uid); // Email
values.put(KEY_CREATED_AT, created_at); // Created At
// Inserting Row
db.insert(TABLE_LOGIN, null, values);
db.close(); // Closing database connection
}
/**
* Getting user data from database
* */
public HashMap<String, String> getUserDetails(){
HashMap<String,String> user = new HashMap<String,String>();
String selectQuery = "SELECT * FROM " + TABLE_LOGIN;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// Move to first row
cursor.moveToFirst();
if(cursor.getCount() > 0){
user.put("name", cursor.getString(1));
user.put("email", cursor.getString(2));
user.put("uid", cursor.getString(3));
user.put("created_at", cursor.getString(4));
}
cursor.close();
db.close();
// return user
return user;
}
/**
* Getting user login status
* return true if rows are there in table
* */
public int getRowCount() {
String countQuery = "SELECT * FROM " + TABLE_LOGIN;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
int rowCount = cursor.getCount();
db.close();
cursor.close();
// return row count
return rowCount;
}
/**
* Re crate database
* Delete all tables and create them again
* */
public void resetTables(){
SQLiteDatabase db = this.getWritableDatabase();
// Delete All Rows
db.delete(TABLE_LOGIN, null, null);
db.close();
}
}
回答by zapl
the error message
错误信息
table
login
has no column nameduid
表
login
没有名为的列uid
indicates that your database is not in the state you expect it. You do create that table with a column named uid
(KEY_UID
) but you have most likely added that column after the database was already created on your device. Once it is created it will persist until you explicitly delete that file or uninstall your app. And onCreate
will not be executed again until the database file is missing.
表示您的数据库未处于您期望的状态。您确实使用名为uid
( KEY_UID
)的列创建了该表,但很可能是在您的设备上创建了数据库之后添加了该列。一旦创建,它将一直存在,直到您明确删除该文件或卸载您的应用程序。并且onCreate
在数据库文件丢失之前不会再次执行。
What you need to do is to upgrade the database version each time you change the table definitions. That will trigger the onUpgrade
code which will then recreate your table the way you defined it.
您需要做的是每次更改表定义时升级数据库版本。这将触发onUpgrade
代码,然后该代码将按照您定义的方式重新创建您的表。
Your fix is most likely just
您的修复很可能只是
private static final int DATABASE_VERSION = 2;
回答by Remi
Try with
试试
private static final String KEY_ID = "uid";
instead of
代替
private static final String KEY_ID = "id";