不能够比较,如果用户名存在于数据库或不 [英] Not able to compare if username exist in database or not

查看:155
本文介绍了不能够比较,如果用户名存在于数据库或不的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的机器人。我想从一个活动比较来自数据库的用户名输入的值,并得到一个NullPointerException异常(NPE)。

下面是我的DBHElper活动

 公共类DBHelper扩展SQLiteOpenHelper
{
    私人SQLiteDatabase分贝;
    公共静态最后弦乐KEY_ROWID =_id;
    公共静态最后弦乐KEY_ROWID1 =_ ID;
    公共静态最后弦乐KEY_FNAME =名字;
    公共静态最后弦乐KEY_LNAME =姓氏;
    公共静态最后弦乐KEY_GENDER =性别;
    公共静态最后弦乐KEY_USER =用户名;
    公共静态最后弦乐KEY_EMAIL =电子邮件;
    公共静态最后弦乐KEY_CNAME =的Cname;
    公共静态最后弦乐KEY_CPOST =Cpost;
    公共静态最后弦乐KEY_CCRITERIA =Ccriteria;
    公共静态最后弦乐KEY_CUSER =Cusername;
    公共静态最后弦乐KEY_CEMAIL =Cemail;
    公共静态最后弦乐KEY_CCONTACT =Ccontact;
    公共静态最后弦乐KEY_CCUTOFF =Ccutoff;

    公共静态最后弦乐KEY_STATUS =状态;
    公共静态最后弦乐KEY_USERNAME =用户名;


    DBHelper DB = NULL;
    私有静态最后弦乐DATABASE_NAME =Sam2.db;
    私有静态最终诠释DATABASE_VERSION = 3;
    公共静态最后弦乐DATABASE_TABLE_NAME =求职者;
    公共静态最后弦乐Company_Table =比较;
    公共静态最后弦乐Login_Table =登陆;
    私有静态最后弦乐DATABASE_TABLE_CREATE =
        CREATE TABLE+ DATABASE_TABLE_NAME +(+
        _id INTEGER PRIMARY KEY AUTOINCREMENT,+
        名字文本NOT NULL,姓氏文字NOT NULL,性别TEXT NOT NULL,用户名文本NOT NULL UNIQUE,密码文本NOT NULL,电子邮件正文NOT NULL);;
    私有静态最后弦乐DATABASE_TABLE_CREATE2 =
        创建表+ Company_Table +
        (_id整数主键自动增量,+
        TEXT的Cname NOT NULL,Cpost TEXT NOT NULL,Ccriteria TEXT NOT NULL,Cusername TEXT NOT NULL,Cpassword TEXT NOT NULL,Cemail TEXT NOT NULL,Ccontact TEXT NOT NULL,Ccutoff TEXT NOT NULL); ;
    私有静态最后弦乐DATABASE_TABLE_CREATE3 =
        CREATE TABLE+ Login_Table +(+
        _id INTEGER PRIMARY KEY AUTOINCREMENT,+
        用户名文本NOT NULL UNIQUE,密码文本NOT NULL,状态文字NOT NULL);;

    公共DBHelper(上下文的背景下){
      超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
      的System.out.println(在构造函数);
    }

    @覆盖
    公共无效的onCreate(SQLiteDatabase DB){
        尝试{
            db.execSQL(DATABASE_TABLE_CREATE);
            db.execSQL(DATABASE_TABLE_CREATE2);
            db.execSQL(DATABASE_TABLE_CREATE3);
        }赶上(例外五){
            e.printStackTrace();
        }
    }

    @覆盖
    公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
        // TODO自动生成方法存根
    }

    公共光标rawQuery(字符串,字符串,字符串[]字符串){
        // TODO自动生成方法存根
        返回null;
    }

    公共无效的open(){
        getWritableDatabase();
    }

    公共光标getDetails(字符串文本)抛出的SQLException
    {
        光标mCursor =
                db.query(真,DATABASE_TABLE_NAME,
                  新的String [] {KEY_ROWID,KEY_FNAME,KEY_LNAME,KEY_GENDER,KEY_USER,KEY_EMAIL},
                  KEY_USER +=+文字,
                  NULL,NULL,NULL,NULL,NULL);
        如果(mCursor!= NULL)
        {
            mCursor.moveToFirst();
        }
        返回mCursor;
    }

    公共光标getCompDetails(字符串文本)抛出的SQLException
    {

        光标mCursor =
                db.query(真,Company_Table,
                  新的String [] {KEY_ROWID1,KEY_CNAME,KEY_CPOST,KEY_CCRITERIA,KEY_CUSER,KEY_EMAIL,KEY_CCONTACT,KEY_CCUTOFF},
                  KEY_CUSER +=+文字,
                  NULL,NULL,NULL,NULL,NULL);
        如果(mCursor!= NULL)
        {
            mCursor.moveToFirst();
        }
        返回mCursor;
    }

    公共光标getLoginDetails(字符串文本)抛出的SQLException
    {
        光标mCursor =
                db.query(真,Login_Table,
                  新的String [] {KEY_ROWID1,KEY_USERNAME,KEY_STATUS},
                  KEY_USERNAME +=+文字,
              NULL,NULL,NULL,NULL,NULL);
        如果(mCursor!= NULL)
        {
            mCursor.moveToFirst();
        }
        返回mCursor;
    }

    公布尔checkusername(字符串名称)抛出的SQLException {
        光标mCursor = db.query(
                  Login_Table,
                  新的String [] {KEY_ROWID,KEY_USERNAME},
                  KEY_USERNAME +=?,
                  新的String [] {名}
                  空值,
                  空值,
                  空值);
        如果(mCursor!= NULL){
            mCursor.moveToFirst();
            返回true;
        }
        返回false;
    }
}
 

下面是在其中执行所述比较的活性。

  DB.open();
如果(DB.checkusername(的uname)){
    无效= TRUE;
    Toast.makeText(getApplicationContext(),
          在使用用户名alredy进入另一个
          Toast.LENGTH_SHORT).show();
}
 

在此行的示值误差

 光标mCursor = db.query(
              Login_Table,
              新的String [] {KEY_ROWID,KEY_USERNAME},
              KEY_USERNAME +=+名称,
              空值,
              空值,
              空值,
              空值);
 

下面是logcat的

  07-07 23:52:56.813:W / dalvikvm(536):主题ID = 1:螺纹退出与未捕获的异常(组= 0x4001d800)
07-07 23:52:56.823:E / AndroidRuntime(536):致命异常:主要
07-07 23:52:56.823:E / AndroidRuntime(536):显示java.lang.NullPointerException
07-07 23:52:56.823:E / AndroidRuntime(536):在com.google.data.DBHelper.checkusername(DBHelper.java:164)
07-07 23:52:56.823:E / AndroidRuntime(536):在com.google.data.Registration.onClick(Registration.java:211)
07-07 23:52:56.823:E / AndroidRuntime(536):在android.view.View.performClick(View.java:2408)
07-07 23:52:56.823:E / AndroidRuntime(536):在android.view.View $ PerformClick.run(View.java:8816)
07-07 23:52:56.823:E / AndroidRuntime(536):在android.os.Handler.handleCallback(Handler.java:587)
07-07 23:52:56.823:E / AndroidRuntime(536):在android.os.Handler.dispatchMessage(Handler.java:92)
07-07 23:52:56.823:E / AndroidRuntime(536):在android.os.Looper.loop(Looper.java:123)
07-07 23:52:56.823:E / AndroidRuntime(536):在android.app.ActivityThread.main(ActivityThread.java:4627)
07-07 23:52:56.823:E / AndroidRuntime(536):在java.lang.reflect.Method.invokeNative(本机方法)
07-07 23:52:56.823:E / AndroidRuntime(536):在java.lang.reflect.Method.invoke(Method.java:521)
07-07 23:52:56.823:E / AndroidRuntime(536):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
07-07 23:52:56.823:E / AndroidRuntime(536):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-07 23:52:56.823:E / AndroidRuntime(536):在dalvik.system.NativeStart.main(本机方法)
 

解决方案

用户名是string类型的,所以你需要像比较它的 名称

试试这个:

  db.rawQuery(SELECT * FROM+ Login_Table +WHERE+
KEY_USERNAME +=+姓名+';
 

编辑: 满$后提供的C $ C。

在rawQuery应该工作,但分贝(SQLiteDatabase)未初始化anyhwre,所以它会一直保持空。

I am new to android. I want to compare username from database to an entered value from an activity, and getting a NullPointerException (NPE).

Here is my DBHElper activity

public class DBHelper extends SQLiteOpenHelper 
{
    private SQLiteDatabase db;
    public static final String KEY_ROWID = "_id";
    public static final String KEY_ROWID1="_id";
    public static final String KEY_FNAME = "firstname";
    public static final String KEY_LNAME = "lastname";
    public static final String KEY_GENDER = "gender";
    public static final String KEY_USER = "username";
    public static final String KEY_EMAIL = "email";
    public static final String KEY_CNAME="Cname"; 
    public static final String KEY_CPOST="Cpost"; 
    public static final String KEY_CCRITERIA="Ccriteria"; 
    public static final String KEY_CUSER="Cusername"; 
    public static final String KEY_CEMAIL="Cemail"; 
    public static final String KEY_CCONTACT="Ccontact"; 
    public static final String KEY_CCUTOFF="Ccutoff"; 

    public static final String KEY_STATUS="status";
    public static final String KEY_USERNAME="username";


    DBHelper DB = null;
    private static final String DATABASE_NAME = "Sam2.db";
    private static final int DATABASE_VERSION = 3;
    public static final String DATABASE_TABLE_NAME = "JobSeeker";
    public static final String Company_Table = "Comp";
    public static final String Login_Table = "Login";
    private static final String DATABASE_TABLE_CREATE =
        "CREATE TABLE " + DATABASE_TABLE_NAME + "(" +
        "_id INTEGER PRIMARY KEY AUTOINCREMENT,"+
        "firstname TEXT NOT NULL, lastname TEXT NOT NULL, gender TEXT NOT NULL, username TEXT NOT NULL UNIQUE, password TEXT NOT NULL, email TEXT NOT NULL);";
    private static final String DATABASE_TABLE_CREATE2=
        " create table " + Company_Table +
        " (_id integer primary key autoincrement," +
        " Cname TEXT NOT NULL, Cpost TEXT NOT NULL,Ccriteria TEXT NOT NULL,Cusername TEXT NOT NULL, Cpassword TEXT NOT NULL, Cemail TEXT NOT NULL,Ccontact TEXT NOT NULL,Ccutoff TEXT NOT NULL);" ;
    private static final String DATABASE_TABLE_CREATE3=
        "CREATE TABLE " + Login_Table  + "(" +
        "_id INTEGER PRIMARY KEY AUTOINCREMENT,"+
        "username TEXT NOT NULL UNIQUE, password TEXT NOT NULL, status TEXT NOT NULL);";

    public DBHelper(Context context) {
      super(context, DATABASE_NAME, null, DATABASE_VERSION);
      System.out.println("In constructor");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try{
            db.execSQL(DATABASE_TABLE_CREATE);
            db.execSQL(DATABASE_TABLE_CREATE2);
            db.execSQL(DATABASE_TABLE_CREATE3);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
    }

    public Cursor rawQuery(String string, String[] strings) {
        // TODO Auto-generated method stub
        return null;
    }

    public void open() {
        getWritableDatabase(); 
    }

    public Cursor getDetails(String text) throws SQLException 
    {
        Cursor mCursor =
                db.query(true, DATABASE_TABLE_NAME, 
                  new String[]{KEY_ROWID, KEY_FNAME, KEY_LNAME, KEY_GENDER, KEY_USER, KEY_EMAIL}, 
                  KEY_USER + "=" + text, 
                  null, null, null, null, null);
        if (mCursor != null) 
        {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    public Cursor getCompDetails(String text) throws SQLException 
    {

        Cursor mCursor =
                db.query(true, Company_Table, 
                  new String[]{KEY_ROWID1, KEY_CNAME, KEY_CPOST, KEY_CCRITERIA, KEY_CUSER, KEY_EMAIL,KEY_CCONTACT,KEY_CCUTOFF}, 
                  KEY_CUSER + "=" + text, 
                  null, null, null, null, null);
        if (mCursor != null) 
        {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    public Cursor getLoginDetails(String text) throws SQLException 
    {
        Cursor mCursor =
                db.query(true, Login_Table, 
                  new String[]{KEY_ROWID1, KEY_USERNAME, KEY_STATUS}, 
                  KEY_USERNAME + "=" + text, 
              null, null, null, null, null);
        if (mCursor != null) 
        {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    public Boolean checkusername(String name) throws SQLException {
        Cursor mCursor = db.query(
                  Login_Table, 
                  new String[] { KEY_ROWID, KEY_USERNAME }, 
                  KEY_USERNAME + "=?", 
                  new String[] {name}, 
                  null, 
                  null, 
                  null);
        if (mCursor!=null) {
            mCursor.moveToFirst();
            return true;
        }
        return false;
    }
}

Here is the activity where the comparison is performed.

DB.open();
if (DB.checkusername(uname)) {
    invalid = true;
    Toast.makeText(getApplicationContext(), 
          "username alredy in use enter another", 
          Toast.LENGTH_SHORT).show();
}

its showing error in this line

   Cursor mCursor = db.query(
              Login_Table, 
              new String[] { KEY_ROWID, KEY_USERNAME }, 
              KEY_USERNAME + "=" + name, 
              null, 
              null, 
              null, 
              null);

here is logcat

07-07 23:52:56.813: W/dalvikvm(536): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
07-07 23:52:56.823: E/AndroidRuntime(536): FATAL EXCEPTION: main
07-07 23:52:56.823: E/AndroidRuntime(536): java.lang.NullPointerException
07-07 23:52:56.823: E/AndroidRuntime(536):  at com.google.data.DBHelper.checkusername(DBHelper.java:164)
07-07 23:52:56.823: E/AndroidRuntime(536):  at com.google.data.Registration.onClick(Registration.java:211)
07-07 23:52:56.823: E/AndroidRuntime(536):  at android.view.View.performClick(View.java:2408)
07-07 23:52:56.823: E/AndroidRuntime(536):  at android.view.View$PerformClick.run(View.java:8816)
07-07 23:52:56.823: E/AndroidRuntime(536):  at android.os.Handler.handleCallback(Handler.java:587)
07-07 23:52:56.823: E/AndroidRuntime(536):  at android.os.Handler.dispatchMessage(Handler.java:92)
07-07 23:52:56.823: E/AndroidRuntime(536):  at android.os.Looper.loop(Looper.java:123)
07-07 23:52:56.823: E/AndroidRuntime(536):  at android.app.ActivityThread.main(ActivityThread.java:4627)
07-07 23:52:56.823: E/AndroidRuntime(536):  at java.lang.reflect.Method.invokeNative(Native Method)
07-07 23:52:56.823: E/AndroidRuntime(536):  at java.lang.reflect.Method.invoke(Method.java:521)
07-07 23:52:56.823: E/AndroidRuntime(536):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-07 23:52:56.823: E/AndroidRuntime(536):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-07 23:52:56.823: E/AndroidRuntime(536):  at dalvik.system.NativeStart.main(Native Method)

解决方案

Username is of type string, so you need to compare it like 'name'

Try this:

db.rawQuery("SELECT * FROM "+ Login_Table + " WHERE "+ 
KEY_USERNAME + "='" + name + "'";

EDIT: After full code is provided.

The rawQuery should work, but the db(SQLiteDatabase) is not initialized anyhwre, so it will always remain NULL.

这篇关于不能够比较,如果用户名存在于数据库或不的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆