2014-11-16 3 views
0

Я уже пытаюсь использовать функцию базы данных в первом проекте. В первом проекте нет ничего плохого. после этого im попытается выполнить другой проект, но результат будет Sqlite Returned: код ошибки = 1, msg = нет такой таблицы: Логин .. im уже проверяет код из предыдущего проекта, все одинаково, но я понятия не имею почему это происходит.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 этот файл класса для входа в систему (и присваивателя)

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 обработчик Database

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 как класс (конструктор, сеттер и 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 Query String, в индивидуальный и передать его в ExecSQL();

Например:

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

db.execSQL(SQL_QUERY); 
+0

Хорошо .. спасибо .. Я сделаю это. – Daisy

+0

Точка с запятой является необязательной и не повреждает. Почему использование отдельной переменной лучше? –

Смежные вопросы