2014-11-16 82 views
0

我已經在第一個項目中嘗試數據庫功能。第一個項目沒有錯。之後,即時通訊嘗試與另一個項目,但結果是Sqlite返回:錯誤代碼= 1,msg =沒有這樣的表:登錄 ..即時通訊已經檢查從前一個項目的代碼,一切都是一樣的,但我不知道爲什麼它會發生。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 這個文件是爲登錄類(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

你確定你的表名是登錄?還是LoginEntity? – NerosE

+0

yes .. _DATABASE_TABLE =「Login」; _ LoginEntity作爲一個類(構造函數,setter和getter)..或者我在聲明數據庫時出錯了? – Daisy

+0

@NerosE感謝您的意見 – Daisy

回答

-1

有什麼其他表取決於'登錄'?如果是這樣,我認爲錯誤可能是您執行DROP語句時。嘗試使用CASCADE

+0

沒有..根據它沒有其他表。 ermmm ..如果你正在說什麼,你可以給我CASCADE的語法..謝謝:) – Daisy

+0

SQLite沒有CASCADE,並且在刪除表時不檢查依賴關係。 –

+0

在索引4.3 ON DELETE和ON UPDATE操作https://www.sqlite.org/foreignkeys.html –

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); 
+0

好的..謝謝..我會做到的。 – Daisy

+0

分號是可選的,不會受到傷害。爲什麼使用單獨的變量是一種更好的做法? –

相關問題