简体   繁体   中英

error in android studio using sql

I am making an android app to login and signup using android SQLite . I am facing an error while login or signup.

Logcat

03-14 13:07:01.910 19906-19906/com.example.dp_7_kholood.taskone E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.dp_7_kholood.taskone, PID: 19906 java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:5198) 
at android.view.View$PerformClick.run(View.java:21147) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: android.database.sqlite.SQLiteException: no such column: uname (code 1): , while compiling: select uname, pass from contacts
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255)
at com.example.dp_7_kholood.taskone.DatabaseHelper.searchPass(DatabaseHelper.java:58)
at com.example.dp_7_kholood.taskone.Login.onButtonClick(Login.java:32)
at java.lang.reflect.Method.invoke(Native Method) 
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
at android.view.View.performClick(View.java:5198) 
at android.view.View$PerformClick.run(View.java:21147) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Contact

public class Contact {

    String name, email,username,pass;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }
}

DatabaseHelper

public class DatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME= "contacts.db";
private static final String TABLE_NAME ="contacts";
private static final String COLUMN_ID ="id";
private static final String COLUMN_NAME ="name";
private static final String COLUMN_EMAIL ="email";
private static final String COLUMN_USERNAME="username";
private static final String COLUMN_PASS="pass";
SQLiteDatabase db;

private static final String TABLE_CREATE= "create table contacts (id integer primary key not null , "+ "name text not null , email text not null , username text not null , pass text not null);";

public DatabaseHelper(Context context){

    super(context , DATABASE_NAME, null,DATABASE_VERSION );
}
@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL(TABLE_CREATE);
    this.db=db;

}
public void insertContact(Contact c){
db=this.getWritableDatabase();
    ContentValues values=new ContentValues();

    String query= "select * from contacts";
    Cursor cursor=db.rawQuery(query, null);
    int count= cursor.getCount();

    values.put(COLUMN_ID,count);
    values.put(COLUMN_NAME , c.getName());
    values.put(COLUMN_USERNAME, c.getUsername());
    values.put(COLUMN_EMAIL , c.getEmail());
    values.put(COLUMN_PASS , c.getPass());

    db.insert(TABLE_NAME, null, values);
    db.close();
}

public String searchPass(String uname){
    db=this.getReadableDatabase();
    String query=" select uname, pass from "+TABLE_NAME;
    Cursor cursor =db.rawQuery(query,null);

    String a,b;
    b="not found";
    if(cursor.moveToFirst())
    {
        do{
            a=cursor.getString(0);

            if (a.equals(uname)){

            b=cursor.getString(1);
                break;
        }

    }
        while(cursor.moveToNext());
}
return b;
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    String query ="DROP TABLE IF EXISTS "+TABLE_NAME;
    db.execSQL(query);
    this.onCreate(db);
}
}

Login

public class Login extends AppCompatActivity {

DatabaseHelper helper=new DatabaseHelper(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

}

public void onButtonClick(View v){


    if (v.getId() == R.id.Blogin);
    {
        EditText a = (EditText)findViewById(R.id.Tfusername);
        String str= a.getText().toString();
        EditText b = (EditText)findViewById(R.id.Tfpassword);
        String pass= b.getText().toString();
        String password= helper.searchPass(str);

        if(pass.equals(password)){

        Intent i= new Intent(Login.this, SingUp.class);
        i.putExtra("Username",str);
        startActivity(i);

    }

        else{
            Toast t=Toast.makeText(Login.this, "Username and Paasword not match!", Toast.LENGTH_SHORT);
            t.show();
        }}
    if(v.getId()==R.id.BtnSingup){

         Intent i= new Intent(Login.this, SingUp.class);
         startActivity(i);
    }
}
}

SingUp

public class SingUp extends Activity {

DatabaseHelper helper=new DatabaseHelper(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.signup);

}
public void OnSignUp(View v){
    if (v.getId()==R.id.Bsingup){

        EditText name= (EditText)findViewById(R.id.Tfname);
        EditText username= (EditText)findViewById(R.id.Tfusername);
        EditText email= (EditText)findViewById(R.id.Tfemail);
        EditText pass1= (EditText)findViewById(R.id.Tfpass1);
        EditText pass2= (EditText)findViewById(R.id.Tfpass2);

        String namestr = name.getText().toString();
        String usernamestr = username.getText().toString();
        String emailstr = email.getText().toString();
        String pass1str = pass1.getText().toString();
        String pass2str = pass2.getText().toString();

        if(!pass1str.equals(pass2str)){
            Toast pass=Toast.makeText(SingUp.this, "Paasword not match!", Toast.LENGTH_SHORT);
            pass.show();
        }
        else{

            Contact c =new Contact();
            c.setName(namestr);
            c.setEmail(emailstr);
            c.setUsername(usernamestr);
            c.setPass(pass1str);
            helper.insertContact(c);
        }

    }
}
}

Reason

As per your create table query

private static final String TABLE_CREATE= "create table contacts (id integer primary key not null , "+ "name text not null , email text not null , username text not null , pass text not null);";

column names you have are id , name , email , username and pass . There is no column uname .

Solution

Change

String query=" select uname, pass from "+TABLE_NAME;

to

String query=" select username, pass from "+TABLE_NAME; // if you want username

or

String query=" select name, pass from "+TABLE_NAME; // if you want name

Your Create Table statement is --

private static final String TABLE_CREATE= "create table contacts (id integer primary key not null , "+ "name text not null , email text not null , username text not null , pass text not null);";

Whereas, your select statement is --

String query=" select uname, pass from "+TABLE_NAME;

username is not matching with uname in select statement.

Please make them in sync!

you have an error in your query.

String query=" select uname, pass from "+TABLE_NAME;

but there is no uname column in your table.

Problem is in

String query=" select uname, pass from "+TABLE_NAME;

as you search from uname but in your table you have not an column with uname try to change it and your problem is solved

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM