2013-09-29 45 views
0

我正在創建一個活動來獲取用戶名密碼並註冊他們我正面臨着會員註冊活動中的sqlite異常的問題任何人都可以指出我在做什麼錯在下面的代碼?發佈更新logcat的sqlite數據庫錯誤無法打開活動

DBHelper活動

公共類DBHelper擴展SQLiteOpenHelper {

private static final String DATABASE_NAME = "membersdb"; 
private static final String DATABASE_TABLE = "members"; // this is your 
                 // table name 
private static final String KEY_ROW_ID = "_id"; 
private static final String KEY_USERNAME = "username"; 
private static final String KEY_PASSWORD = "password"; 
private static final String KEY_FULLNAME = "fullname"; 
private static final String KEY_EMAILS = "email"; 

private static final int DATABASE_VERSION = 1; 

private static final String DATABASE_CREATE = "CREATE TABLE " 
     + DATABASE_TABLE + " (" + KEY_ROW_ID 
     + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_USERNAME 
     + " TEXT NOT NULL , " + KEY_PASSWORD + " TEXT NOT NULL , " 
     + KEY_FULLNAME + " TEXT NOT NULL , " + KEY_EMAILS 
     + " TEXT NOT NULL);"; 

public DBHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 

} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(DATABASE_CREATE); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { 
    db.execSQL("DROP TABLE IF EXISTS members"); 
    onCreate(db); 

} 

}

將對DBAdapter活動

public class DBAdapter { 
    private static final String DATABASE_TABLE = "members"; 
    public static final String KEY_ROW_ID = "_id"; 
    public static final String KEY_USERNAME = "username"; 
    public static final String KEY_PASSWORD = "password"; 
    public static final String KEY_FULLNAME = "fullname"; 
    public static final String KEY_EMAILS = "emails"; 

    SQLiteDatabase mDb; 
    Context mCtx; 
    DBHelper mDbHelper; 

    public DBAdapter(Context context) { 
     this.mCtx = context; 
    } 

    public DBAdapter open() throws SQLException { 
     mDbHelper = new DBHelper(mCtx); 
     mDb = mDbHelper.getWritableDatabase(); 
     return this; 
    } 

    public void close() { 
     mDbHelper.close(); 
    } 

    public long register(String user, String pw, String name, String email) { 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(KEY_USERNAME, user); 
     initialValues.put(KEY_PASSWORD, pw); 
     initialValues.put(KEY_FULLNAME, name); 
     initialValues.put(KEY_EMAILS, email); 

     return mDb.insert(DATABASE_TABLE, null, initialValues); 
    } 

    public boolean Login(String username, String password) throws SQLException { 
     Cursor mCursor = mDb.rawQuery("SELECT * FROM " + DATABASE_TABLE 
       + " WHERE username=? AND password=?", new String[] { username, 
       password }); 
     if (mCursor != null) { 
      if (mCursor.getCount() > 0) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 

主要活動呼籲將對DBAdapter

public class MembersActivity extends Activity { 
    DBAdapter dbAdapter; 
    EditText txtUserName; 
    EditText txtPassword; 
    Button btnLogin; 
    Button btnRegister; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     txtUserName = (EditText) findViewById(R.id.et_user); 
     txtPassword = (EditText) findViewById(R.id.et_pw); 
     btnLogin = (Button) findViewById(R.id.btn_login); 
     btnRegister = (Button) findViewById(R.id.btn_reg); 

     dbAdapter = new DBAdapter(this); 
     dbAdapter.open(); 

     btnLogin.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(txtUserName.getWindowToken(), 0); 
       imm.hideSoftInputFromWindow(txtPassword.getWindowToken(), 0); 
       String username = txtUserName.getText().toString(); 
       String password = txtPassword.getText().toString(); 
       if (username.length() > 0 && password.length() > 0) { 
        try { 

         if (dbAdapter.Login(username, password)) { 
          Toast.makeText(MembersActivity.this, 
            "Successfully Logged In", Toast.LENGTH_LONG) 
            .show(); 
         } else { 
          Toast.makeText(MembersActivity.this, 
            "Invalid username or password", 
            Toast.LENGTH_LONG).show(); 
         } 

        } catch (Exception e) { 
         Toast.makeText(MembersActivity.this, 
           "Some problem occurred", Toast.LENGTH_LONG) 
           .show(); 

        } 
       } else { 
        Toast.makeText(MembersActivity.this, 
          "Username or Password is empty", Toast.LENGTH_LONG) 
          .show(); 
       } 
      } 
     }); 

     btnRegister.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent opencont = new Intent("com.ideals.ideal.MEMBERSREGISTER"); 
       startActivity(opencont); 
      } 
     }); 
    } 
} 

logcat的

09-29 21:46:07.577: I/Database(555): sqlite returned: error code = 1, msg = table members has no column named emails 
09-29 21:46:07.587: E/Database(555): Error inserting username=hello emails=hello password=hello fullname=hello 
09-29 21:46:07.587: E/Database(555): android.database.sqlite.SQLiteException: table members has no column named emails: , while compiling: INSERT INTO members(username, emails, password, fullname) VALUES(?, ?, ?, ?); 
09-29 21:46:07.587: E/Database(555): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
09-29 21:46:07.587: E/Database(555): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92) 
09-29 21:46:07.587: E/Database(555): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65) 
09-29 21:46:07.587: E/Database(555): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83) 
09-29 21:46:07.587: E/Database(555): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41) 
09-29 21:46:07.587: E/Database(555): at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149) 
09-29 21:46:07.587: E/Database(555): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569) 
09-29 21:46:07.587: E/Database(555): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426) 
09-29 21:46:07.587: E/Database(555): at com.ideals.ideal.DBAdapter.register(DBAdapter.java:42) 
09-29 21:46:07.587: E/Database(555): at com.ideals.ideal.MembersRegister$1.onClick(MembersRegister.java:50) 
09-29 21:46:07.587: E/Database(555): at android.view.View.performClick(View.java:2485) 
09-29 21:46:07.587: E/Database(555): at android.view.View$PerformClick.run(View.java:9080) 
09-29 21:46:07.587: E/Database(555): at android.os.Handler.handleCallback(Handler.java:587) 
09-29 21:46:07.587: E/Database(555): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-29 21:46:07.587: E/Database(555): at android.os.Looper.loop(Looper.java:123) 
09-29 21:46:07.587: E/Database(555): at android.app.ActivityThread.main(ActivityThread.java:3683) 
09-29 21:46:07.587: E/Database(555): at java.lang.reflect.Method.invokeNative(Native Method) 
09-29 21:46:07.587: E/Database(555): at java.lang.reflect.Method.invoke(Method.java:507) 
09-29 21:46:07.587: E/Database(555): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-29 21:46:07.587: E/Database(555): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-29 21:46:07.587: E/Database(555): at dalvik.system.NativeStart.main(Native Method) 
+0

你的表名在哪裏? – Raghunandan

回答

1

有這些

private static final String DATABASE_TABLE = "members"; // this is your table name 
private static final String KEY_ROW_ID = "_id"; 
private static final String KEY_USERNAME = "username"; 
private static final String KEY_PASSWORD = "password"; 

DBHelper

然後將查詢應該是這樣的

private static final String DATABASE_CREATE = "CREATE TABLE " + DATABASE_TABLE + " (" 
      + KEY_ROW_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_USERNAME + " TEXT NOT NULL , " + 
      KEY_PASSWORD + " TEXT NOT NULL);"; 
+0

謝謝raghunandan,我可以在此表中添加字段名稱,電子郵件和授權碼嗎? –

+0

@monikasingh哦是的只是確保你的語法是正確的,你很好代碼 – Raghunandan

+0

得到一個新的錯誤sqlite讓我哭泣 –

1

看來你缺少表名,嘗試這樣的:

public class DBHelper extends SQLiteOpenHelper { 

private static final String DATABASE_NAME = "membersdb"; 
private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_CREATE = "CREATE TABLE members (_id integer primary key autoincrement, username text not null, password text not null);"; 

public DBHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 

} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(DATABASE_CREATE); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { 
    db.execSQL("DROP TABLE IF EXISTS members"); 
    onCreate(db); 

    } 
} 
1

您沒有提到的表名。 logcat也側重於:

09-29 20:17:09.747: E/AndroidRuntime(372): Caused by: android.database.sqlite.SQLiteException: near "(": syntax error: CREATE TABLE (_id integer primary key autoincrement,username text not null,password text not null); 

因此指定表名稱。

+0

你最歡迎.. –

相關問題