【问题标题】:Problem creating table with SQLite in Android在 Android 中使用 SQLite 创建表的问题
【发布时间】:2010-11-26 16:35:11
【问题描述】:

我的创建表语句如下所示:

private static final String USER_CREATE =
 "create table user (uid text unique, pw text, admin integer);";

当我尝试插入 db 时,它允许我为 uid 插入一个值,但如果我尝试为 pw 或 admin 插入一个值,它会抛出 SQLiteException 'table user has no column named pw',并且管理员也一样。我的语法不对吗?这是我的 DBAdapter 代码:

public class DBAdapter extends Activity {

//*******数据库常量**********

public static final String WORDS_TABLE = "words"; public static final String ATT_WORD = "word"; 公共静态最终字符串 ATT_T1 = "T1"; 公共静态最终字符串ATT_T2 =“T2”; 公共静态最终字符串 ATT_T3 = "T3"; 公共静态最终字符串 ATT_T4 = "T4"; 公共静态最终字符串 ATT_T5 = "T5"; public static final String ATT_RECENT = "recent"; public static final String ATT_RATING = "rating";

public static final String STATISTICS_TABLE = "statistics";
public static final String ATT_GAMESPLAYED = "gamesPlayed";
public static final String ATT_wordsCORRECT = "wordsCorrect";
public static final String ATT_wordsWRONG = "wordsWrong";
public static final String ATT_POINTTOTAL = "pointTotal";
public static final String ATT_WINS = "wins";
public static final String ATT_LOSSES = "losses";

public static final String SETTING_TABLE = "settings";
public static final String ATT_SID = "sid";
public static final String ATT_TYPE = "type";
public static final String ATT_DURATION = "duration";
public static final String ATT_PTSTOWIN = "ptsToWin";

public static final String CATEGORIES_TABLE = "categories";
public static final String ATT_CATEGORY = "category";

public static final String BELONGS_TABLE = "belongs";

public static final String USER_TABLE = "user";
public static final String ATT_UID = "uid";
public static final String ATT_PW = "pw";
public static final String ATT_ADMIN = "admin";

public static final String DATABASE_NAME = "taboo";
private static final int DATABASE_VERSION = 1;
private static final String TAG = "DBAdapter";

private static final String WORDS_CREATE =
    "create table words (_id primary key autoincrement,word text,"
    + "T1 text,T2 text,T3 text,T4 text,T5 text,"
    + "recent integer,rating integer);";

private static final String CATEGORIES_CREATE =
    "create table categories (_id integer primary key autoincrement,category text unique);";

private static final String BELONGS_CREATE =  
 "create table belongs (_id integer primary key autoincrement,word text,category text,"
    + "foreign key (word) references words (word),foreign key (category) references categories (category));";

private static final String USER_CREATE =
 "create table user (uid text unique, pw text, admin integer);";

private static final String STATISTICS_CREATE =   
    "create table statistics (_id integer primary key  autoincrement, uid text unique, gamesPlayed integer, wordsCorrect integer, "
    +"wordsWrong integer, pointTotal integer, wins integer, losses integer, "
    +"foreign key (uid) references user (uid));";

private static final String SETTINGS_CREATE =
    "create table settings (_id integer primary key autoincrement, uid text, sid text, "
    +"type text, duration integer, ptsToWin integer, "
    +"foreign key (uid) references user (uid));"
    ;


//**************************************************************
//*********************  Function Constants ********************
//**************************************************************

private final Context context; 
private DatabaseHelper DBHelper;
public static SQLiteDatabase db;
private int wordCount = 100;

//********************  Object 
public DBAdapter(Context ctx) 
{
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper 
{
 DatabaseHelper(Context context) 
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {
        db.execSQL(WORDS_CREATE);
        db.execSQL(CATEGORIES_CREATE);
        db.execSQL(BELONGS_CREATE);
        db.execSQL(USER_CREATE);
        db.execSQL(STATISTICS_CREATE);
        db.execSQL(SETTINGS_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, 
                          int newVersion) 
    {
        Log.w(TAG, "Upgrading database from version " + oldVersion 
              + " to "
              + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + WORDS_TABLE);
        onCreate(db);
    }
}    

//****************************************************
//********  Database Functions  **********************
//****************************************************

public DBAdapter open() throws SQLException 
{
 db = DBHelper.getWritableDatabase();
    return this;
} 
public void close() 
{
    DBHelper.close();
}

还有我的插入代码:

public long enterUser(ContentValues content)
{
 long result = db.insert(USER_TABLE, null, content);
 return result;
}

任何想法将不胜感激。谢谢!

【问题讨论】:

  • 手动运行 SQL 会发生什么?
  • 设置 ContextValues 的代码在哪里?
  • 它可以很好地创建表格,并且插入似乎也可以工作
  • Aaron - ContentValues content = new ContentValues(); content.put(DBAdapter.ATT_UID, (user.getText()).toString()); content.put(DBAdapter.ATT_PW, (pw.getText()).toString()); content.put(DBAdapter.ATT_ADMIN, admins.toString());
  • ERROR/Database(1315): Error inserting uid=meburbo pw=thirty3 admin=0 ERROR/Database(1315): android.database.sqlite.SQLiteException: table user has no column named pw: ,编译时:INSERT INTO user(uid, pw, admin) VALUES(?, ?, ?);

标签: java android sqlite


【解决方案1】:

DATABASE_NAME = "taboo" 必须是 "taboo.db"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2011-07-03
    • 2010-12-05
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多