sqlite返回:错误代码= 1,msg =没有这样的表:登录

时间:2014-11-16 15:03:30

标签: java android eclipse sqlite

我已经在第一个项目中尝试数据库功能了。第一个项目没有错。之后,我尝试使用另一个项目,但结果是 Sqlite返回:错误代码= 1,msg =没有这样的表:登录 ..我已经检查过上一个项目的代码,一切都是一样的但我不知道为什么会这样。

我使用的工具是Eclipse Juno。

MainActivity.java 这是插入数据的功能。

LoginEntity LoginE = new LoginEntity(LoginID, LoginPassword);
    LoginDA login = new LoginDA(this);
    login.open();
    login.createLogin(LoginE);

LoginEntity.java 这个文件是Login(setter和getter)的类

public class LoginEntity {
private String LoginID;
private String LoginPassword;

public LoginEntity(){

}

public LoginEntity(String LoginID, String LoginPassword) {
    this.LoginID = LoginID;
    this.LoginPassword = LoginPassword;
}

public String getLoginID() {
    return LoginID;
}
public void setLoginID(String LoginID) {
    this.LoginID = LoginID;
}
public String getLoginPassword() {
    return LoginPassword ;
}
public void setLoginPassword(String LoginPassword) {
    this.LoginPassword = LoginPassword;
}

LoginDA.java 数据库处理程序

public class LoginDA {
private static final String LoginID = "LoginID";
private static final String LoginPassword = "LoginPassword";

private static final String DATABASE_NAME = "LecturerStudentAppointment";
public static final String DATABASE_TABLE = "Login";
private static final int DATABASE_VERSION = 1;

private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;

private static class DbHelper extends SQLiteOpenHelper{

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                LoginID + " INTEGER PRIMARY, " +
                LoginPassword + " TEXT NOT NULL);"  );      
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        onCreate(db);
    }
}
public LoginDA(Context c){
    ourContext =c;
}
public LoginDA open() throws SQLException{
    ourHelper = new DbHelper(ourContext);

    ourDatabase = ourHelper.getWritableDatabase();
    return this;
}
public void close(){

}
public long createLogin(LoginEntity LoginEntity) {
    // TODO Auto-generated method stub
    ContentValues cv = new ContentValues();
    cv.put(LoginID, LoginEntity.getLoginID());
    cv.put(LoginPassword, LoginEntity.getLoginPassword());
    return ourDatabase.insert(DATABASE_TABLE, null, cv);

}

3 个答案:

答案 0 :(得分:0)

主键指定为PRIMARY KEY,而不是PRIMARY

另见When is SQLiteOpenHelper onCreate() / onUpgrade() run?;你需要删除应用程序的旧数据。

答案 1 :(得分:0)

db.execSQL 更改为:

=>从SQL字符串中删除分号(;)。

db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                LoginID + " INTEGER PRIMARY KEY, " +
                LoginPassword + " TEXT NOT NULL"+")");

如果你单独编写SQL查询字符串并将其传递到execSQL();

中,那将是一种更好的做法。

例如:

String SQL_QUERY = "CREATE TABLE " + DATABASE_TABLE + " (" +
                LoginID + " INTEGER PRIMARY KEY, "
                + LoginPassword + " TEXT NOT NULL"+")";

db.execSQL(SQL_QUERY);

答案 2 :(得分:-1)

是否有其他表依赖于“登录”?如果是这样,我认为错误可能是您执行DROP语句时。尝试使用CASCADE