2017-03-21 3 views
0

Ich habe jetzt zwei Tabellen in meinem System. admin_tbl und user_tbl. Ich habe erfolgreich Code für CRUD-Operationen auf user_tbl hinzugefügt, aber leider funktionieren meine anderen zwei Select-Abfragen nicht für andere zwei Logins.Android DatabaseHelper Fehler. Cursor öffnet den gleichen Tisch nicht erneut

Das ist mein DatabaseHelper.java

package com.mms; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 


public class DatabaseHelper extends SQLiteOpenHelper { 

    // Database Version 
    private static final int DATABASE_VERSION = 1; 

    // Database Name 
    private static final String DATABASE_NAME = "mmsDB"; 

    //Tables Names 
    private static final String TABLE_ADMIN = "admin_tbl"; 
    private static final String TABLE_USER = "user_tbl"; 

    //Columns of TABLE_ADMIN 
    private static final String ADMIN_ID = "a_id"; 
    private static final String ADMIN_NAME = "a_name"; 
    private static final String ADMIN_PASSWORD = "a_password"; 

    //Columns of TABLE_USER 
    private static final String USER_ID = "u_id"; 
    private static final String USER_NAME = "u_name"; 
    private static final String USER_PASSWORD = "u_password"; 
    private static final String USER_TYPE = "u_type"; 

    // Create statements for Tables 
    private static final String CREATE_TABLE_ADMIN = "CREATE TABLE " + TABLE_ADMIN + 
     "(" + ADMIN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + ADMIN_NAME + " TEXT, " + ADMIN_PASSWORD + " TEXT" + ")"; 

    private static final String CREATE_TABLE_USER = "CREATE TABLE IF NOT EXISTS " + TABLE_USER + 
     "(" + USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + USER_NAME + " TEXT, " + USER_PASSWORD + " TEXT, " + USER_TYPE + " TEXT" + ")"; 

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

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // Creating tables 

     db.execSQL(CREATE_TABLE_ADMIN); 
     db.execSQL("insert into " + TABLE_ADMIN + "(" + ADMIN_ID + "," + ADMIN_NAME + "," + ADMIN_PASSWORD + ") values(1,'admin','root')"); 

     db.execSQL(CREATE_TABLE_USER); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // On upgrade drop older tables 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_ADMIN); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_USER); 
     // Create new tables 
     onCreate(db); 
    } 

    // admin_tbl methods 

    public Cursor getAllAdminValues() { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor res = db.rawQuery("select * from " + TABLE_ADMIN, null); 
     //res.close(); 
     return res; 
    } 

    // user_tbl methods 

    public boolean insertUserValue(String u_name, String u_password, String u_type) { 
     //Inserting Records 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues contentValues = new ContentValues(); 
     //contentValues.put(USER_ID, u_id); 
     contentValues.put(USER_NAME, u_name); 
     contentValues.put(USER_PASSWORD, u_password); 
     contentValues.put(USER_TYPE, u_type); 
     long result = db.insert(TABLE_USER, null, contentValues); 

     db.close(); 
     if (result == -1) { 
      return false; 
     } else { 
      return true; 
     } 
    } 

    public Cursor getAllUserValues() { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     Cursor res = db.rawQuery("select * from " + TABLE_USER, null); 
     if (res != null) { 
      res.close(); 
     } 

     db.close(); 
     return res; 
    } 

    public boolean updateUserValues(String u_id, String u_name, String u_password, String u_type) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(USER_ID, u_id); 
     contentValues.put(USER_NAME, u_name); 
     contentValues.put(USER_PASSWORD, u_password); 
     contentValues.put(USER_TYPE, u_type); 
     db.update(TABLE_USER, contentValues, "u_id=?", new String[] { u_id }); 

     db.close(); 
     return true; 
    } 

    public Integer deleteUserValues(String u_id) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     return db.delete(TABLE_USER, "u_id=?", new String[] { u_id }); 
    } 

    public Cursor getAllRectorValues() { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     Cursor res = db.rawQuery("select u_name, u_password from " + TABLE_USER + " WHERE u_name='Rector'", null); 
     if (res != null) { 
      res.close(); 
     } 
     db.close(); 
     return res; 
    } 

    public Cursor getAllStudentValues() { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     Cursor res = db.rawQuery("select u_name, u_password from " + TABLE_USER + " WHERE u_name='Student'", null); 
     if (res != null) { 
      res.close(); 
     } 
     db.close(); 
     return res; 
    } 
} 

Mein LoginRectorActivity.java

package com.mms; 

import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class LoginRectorActivity extends Activity implements View.OnClickListener { 

    DatabaseHelper helper; 
    EditText userRector, passwordRector; 
    Button btnRectorLogin; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_rector_login); 

     helper = new DatabaseHelper(this); 

     userRector = (EditText) findViewById(R.id.userRector); 
     passwordRector = (EditText) findViewById(R.id.passwordRector); 
     btnRectorLogin = (Button) findViewById(R.id.btnRectorLogin); 

     btnRectorLogin.setOnClickListener(this); 
     helper.close(); 
    } 

    public void onClick(View v) { 

     Cursor res = helper.getAllRectorValues(); 

     String uname = userRector.getText().toString(); 
     String pass = passwordRector.getText().toString(); 

     while (res.moveToNext()) { 
      if (uname.equals(res.getString(1)) && pass.equals(res.getString(2))) { 
       Intent intent = new Intent(LoginRectorActivity.this, RectorHomeActivity.class); 
       startActivity(intent); 
       finish(); 
      } else { 
       Toast.makeText(LoginRectorActivity.this, "Password Doesn't Match", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
} 

Lassen Sie mich wissen, ob es in meinem Code ein Fehler ist. Logcat zeigt Fehler in getRectorValues() Methode.

+0

Es würde helfen, wenn Sie den Fehler von LogCat einfügen. –

+0

03-23 ​​11: 37: 42.535: E/AndroidRuntime (3731): \t unter com.mms.LoginRectorActivity.onClick (LoginRectorActivity.java:40) – Rachit

Antwort

0

Schließen Sie nicht den Cursor & DB-Objekt in getAllRectorValues & getAllStudentValues. res.close() wird

Schließt den Cursor und gibt alle seine Ressourcen frei und macht sie vollständig ungültig.

Siehe docs

Verwandte Themen