不能够比较,如果用户名存在于数据库或不 [英] Not able to compare if username exist in database or not
问题描述
我是新来的机器人。我想从一个活动比较来自数据库的用户名输入的值,并得到一个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屋!