我已经在第一个项目中尝试数据库功能了。第一个项目没有错。之后,我尝试使用另一个项目,但结果是 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);
}
答案 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