使用SQLITE创建登录页面

时间:2014-02-28 08:11:52

标签: android sqlite login insert

我正在尝试使用包含多列的sqlite创建登录页面,但无法在其中插入值: 这是我的插入查询代码:

    package com.example.doctorsmanager;

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

public class DataBaseAdapter 
{
        static final String DATABASE_NAME = "doctordb";
        static final int DATABASE_VERSION = 2;

        static final String USERNAME_COLUMN = "UserName";
        static final String PASSWORD_COLUMN = "Password";
        static final String QUALIFICATION_COLUMN = "Qualification";
        static final String SPECIALIZATION_COLUMN = "Specialization";
        static final String COLUMN_ID = "id";
        static final String REGISTRATIONNUMBER_COLUMN = "RegistrationNumber";
        static final String CELLNUMBER_COLUMN = "CellNumber";
        // TODO: Create public field for each column in your table.
        // SQL Statement to create a new database.
        static final String DATABASE_CREATE = "create table "+"LOGIN"+
                                     "( " +"ID"+" integer primary key autoincrement,"+ "USERNAME  text,PASSWORD String,QUALIFICATION String,SPECIALIZATION text,REGISTRATIONNUMBER String,CELLNUMBER integer,MAIL String); ";
//        public void onCreate(SQLiteDatabase db){
//            String makeTable = "CREATE TABLE " + TABLE_FOOD + "("
//                    + NAME_COLUMN + " TEXT," + CALORIE_COLUMN + " INTEGER,"
//                    + PROTEIN_COLUMN + " INTEGER" + ")";
        // Variable to hold the database instance
        public  SQLiteDatabase db;
        // Context of the application using the database.
        private final Context context;
        // Database open/upgrade helper
        private DataBaseHelper dbHelper;
        public  DataBaseAdapter(Context _context) 
        {
            context = _context;
            dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        public DataBaseAdapter open() throws SQLException 
        {
            db = dbHelper.getWritableDatabase();
            return this;
        }
        public void close() 
        {
            db.close();
        }

        public  SQLiteDatabase getDatabaseInstance()
        {
            return db;
        }

        public void insertEntry(String userName,String password,String qualification,String specialization,String registrationNumber,String cellNumber,String mailId )
        {
           ContentValues newValues = new ContentValues();
            // Assign values for each row.
            newValues.put("USERNAME", userName);
            newValues.put("PASSWORD",password);
            newValues.put("QUALIFICATION",qualification);
            newValues.put("SPECIALIZATION",specialization);
            newValues.put("REGISTRATIONNUMBER",registrationNumber);
            newValues.put("CONTACTNUMBER",cellNumber);
            newValues.put("EMAIL",mailId);

            // Insert the row into your table
            db.insert("LOGIN", null, newValues);

            System.out.println("USERNAME");  
            System.out.println("PASSWORD");  

         //   Toast.makeText(context, "Reminder Is Successfully Saved", Toast.LENGTH_LONG).show();
        }
        public int deleteEntry(String UserName)
        {
            //String id=String.valueOf(ID);
            String where="USERNAME=?";
            int numberOFEntriesDeleted= db.delete("LOGIN", where, new String[]{UserName}) ;
           // Toast.makeText(context, "Number fo Entry Deleted Successfully : "+numberOFEntriesDeleted, Toast.LENGTH_LONG).show();
            return numberOFEntriesDeleted;
        }    
        public String getSinlgeEntry(String userName)
        {
            Cursor cursor=db.query("LOGIN", null, " USERNAME=?", new String[]{userName}, null, null, null);
            if(cursor.getCount()<1) // UserName Not Exist
            {
                cursor.close();
                return "NOT EXIST";
            }
            cursor.moveToFirst();
            String password= cursor.getString(cursor.getColumnIndex("PASSWORD"));
            cursor.close();
            return password;                
        }
        public void  updateEntry(String userName,String password,String qualification,String specialization,String registrationNumber,String cellNumber,String mailId)
        {
            // Define the updated row content.
            ContentValues updatedValues = new ContentValues();
            // Assign values for each row.
            updatedValues.put("USERNAME", userName);
            updatedValues.put("PASSWORD",password);
            updatedValues.put("QUALIFICATION",qualification);
            updatedValues.put("SPECIALIZATION",specialization);
            updatedValues.put("REGISTRATIONNUMBER",registrationNumber);
            updatedValues.put("CONTACTNUMBER",cellNumber);
            updatedValues.put("EMAIL",mailId);

            String where="USERNAME = ?";
            db.update("LOGIN",updatedValues, where, new String[]{userName});               
        }        

} 当用户按下button创建帐户时,这是注册页面上的代码:

 btnCreateAccount.setOnClickListener(new View.OnClickListener() {

 public void onClick(View v) {
    // TODO Auto-generated method stub

    String userName=editTextUserName.getText().toString();
    String password=editTextPassword.getText().toString();
    String qualification=editTextQualification.getText().toString();
    String specializaion=editTextSpecialization.getText().toString();
    String registrationNumber=editTextRegistrationNumber.getText().toString();
    String cellNumber=editTextCellNumber.getText().toString();
    String mailId=editTextMail.getText().toString();

    // check if any of the fields are vaccant
    if(userName.equals("")||password.equals(""))
    {
            Toast.makeText(getApplicationContext(), "Field Vaccant", Toast.LENGTH_LONG).show();
            return;
    }
    // check if both password matches
    if(!password.equals(password))
    {
        Toast.makeText(getApplicationContext(), "Password does not match", Toast.LENGTH_LONG).show();
        return;
    }
    else
    {
        // Save the Data in Database
        DataBaseAdapter.insertEntry(userName,password,qualification,specializaion,registrationNumber,cellNumber,mailId);
        Toast.makeText(getApplicationContext(), "Account Successfully Created ", Toast.LENGTH_LONG).show();

以下是成功登录的主登录页面的查询:

   btnLogIn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
                    // get The User name and Password
                    String userName=editTextUserName.getText().toString();
                    String password=editTextPassword.getText().toString();

                    // fetch the Password form database for respective user name
                    String storedPassword=DataBaseAdapter.getSinlgeEntry(userName);

                    // check if the Stored password matches with  Password entered by user
                    if(password.equals(storedPassword))
                    {
                        Toast.makeText(MainActivity.this, "Congrats: Login Successfull", Toast.LENGTH_LONG).show();
//                        dialog.dismiss();
                    }`enter code here`
                    else
                    {
                        Toast.makeText(MainActivity.this, "User Name or Password does not match", Toast.LENGTH_LONG).show();
                    }
//                    Intent intentlogin=new Intent(getApplicationContext(),LoginSuccess.class);
//                    startActivity(intentlogin);
                    }
                });

这是我的数据库助手类:

package com.example.doctorsmanager;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DataBaseHelper extends SQLiteOpenHelper
{
    public DataBaseHelper(Context context, String name,CursorFactory factory, int version) 
    {
               super(context, name, factory, version);
    }
    // Called when no database exists in disk and the helper class needs
    // to create a new one.
    @Override
    public void onCreate(SQLiteDatabase _db) 
    {
            _db.execSQL(DataBaseAdapter.DATABASE_CREATE);

    }
    // Called when there is a database version mismatch meaning that the version
    // of the database on disk needs to be upgraded to the current version.
    @Override
    public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) 
    {
            // Log the version upgrade.
            Log.w("TaskDBAdapter", "Upgrading from version " +_oldVersion + " to " +_newVersion + ", which will destroy all old data");

            // Upgrade the existing database to conform to the new version. Multiple
            // previous versions can be handled by comparing _oldVersion and _newVersion
            // values.
            // The simplest case is to drop the old table and create a new one.
            _db.execSQL("DROP TABLE IF EXISTS " + "TEMPLATE");
            // Create a new one.
            onCreate(_db);
    }

}

这是log cat:

02-28 02:37:47.838: W/TaskDBAdapter(14302): Upgrading from version 1 to 2, which will destroy all old data
02-28 02:37:47.848: E/SQLiteLog(14302): (1) table LOGIN already exists
02-28 02:37:47.908: D/AndroidRuntime(14302): Shutting down VM
02-28 02:37:47.908: W/dalvikvm(14302): threadid=1: thread exiting with uncaught exception (group=0xb4ab8ba8)
02-28 02:37:48.048: E/AndroidRuntime(14302): FATAL EXCEPTION: main
02-28 02:37:48.048: E/AndroidRuntime(14302): Process: com.example.doctorsmanager, PID: 14302
02-28 02:37:48.048: E/AndroidRuntime(14302): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.doctorsmanager/com.example.doctorsmanager.MainActivity}: android.database.sqlite.SQLiteException: table LOGIN already exists (code 1): , while compiling: create table LOGIN( ID integer primary key autoincrement,USERNAME  text,PASSWORD String,QUALIFICATION String,SPECIALIZATION text,REGISTRATIONNUMBER String,CELLNUMBER integer,MAIL String);
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.app.ActivityThread.access$800(ActivityThread.java:135)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.os.Handler.dispatchMessage(Handler.java:102)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.os.Looper.loop(Looper.java:136)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.app.ActivityThread.main(ActivityThread.java:5017)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at java.lang.reflect.Method.invokeNative(Native Method)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at java.lang.reflect.Method.invoke(Method.java:515)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at dalvik.system.NativeStart.main(Native Method)
02-28 02:37:48.048: E/AndroidRuntime(14302): Caused by: android.database.sqlite.SQLiteException: table LOGIN already exists (code 1): , while compiling: create table LOGIN( ID integer primary key autoincrement,USERNAME  text,PASSWORD String,QUALIFICATION String,SPECIALIZATION text,REGISTRATIONNUMBER String,CELLNUMBER integer,MAIL String);
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1672)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1603)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at com.example.doctorsmanager.DataBaseHelper.onCreate(DataBaseHelper.java:20)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at com.example.doctorsmanager.DataBaseHelper.onUpgrade(DataBaseHelper.java:37)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:257)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at com.example.doctorsmanager.DataBaseAdapter.open(DataBaseAdapter.java:42)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at com.example.doctorsmanager.MainActivity.onCreate(MainActivity.java:29)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.app.Activity.performCreate(Activity.java:5231)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-28 02:37:48.048: E/AndroidRuntime(14302):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
02-28 02:37:48.048: E/AndroidRuntime(14302):    ... 11 more

3 个答案:

答案 0 :(得分:1)

您正在多次创建数据库。将数据库创建移动到SQLiteOpenHelper类,只需在要使用它的活动中创建它的实例。

答案 1 :(得分:0)

在此你犯了错误,你已经改变了表列,以便你已经将数据库版本改为1到2.你要做的事情就是在SQLiteOpenHelper类文件中使用下面给出的代码那样

public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) 
{
        Log.w("TaskDBAdapter", "Upgrading from version " +_oldVersion + " to " +_newVersion + ", which will destroy all old data");

        _db.execSQL("ALTER TABLE login ADD COLUMN EMAIL varchar(16)");

        onCreate(_db);
}

在Alter Table Query中,Email是新添加的列,使用sqlite manager来创建数据库View

答案 2 :(得分:0)

// MainActivity.java

public class MainActivity extends ActionBarActivity {
Button btlogin,btacc;
EditText emailid,passwd;
SQLiteDatabase db=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btlogin=(Button)findViewById(R.id.button1);
    btacc=(Button)findViewById(R.id.button2);
    emailid=(EditText)findViewById(R.id.editText1);
    passwd=(EditText)findViewById(R.id.editText2);
    db=openOrCreateDatabase("mydb", MODE_PRIVATE, null);
    btacc.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent in=new Intent(MainActivity.this,Signin.class);
            startActivity(in);
        }
    });
    btlogin.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            // TODO Auto-generated method stub
            String mail_id=emailid.getText().toString();
            String password=passwd.getText().toString();
            if(mail_id==null||mail_id==""||mail_id.length()<10)
            {
                show("Please Enter Correct mail id.");
            }
            else if(password==null||password==""||password.length()<6)
            {
                show("Please Enter Correct Password.");
            }
            else
            {       
                Cursor c=db.rawQuery("select * from login where email_id='"+mail_id+"' and password='"+password+"'",null);  
                c.moveToFirst();
                if(c.getCount()>0)
                {
                Intent i=new Intent(MainActivity.this,Show.class);
                i.putExtra("name",mail_id );
                startActivityForResult(i,500);

                db.close();
                finish();
                }
                else
                    show("Wrong Password or Email Id.");

            }

        }

        private void show(String string) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), string, Toast.LENGTH_LONG).show();

        }
    });
        }

}

// Signin.java类

public class Signin extends Activity {
EditText ename,eemail,emobile,enewpwd,erepwd;
Button bok;
SQLiteDatabase db=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.signin);
    ename=(EditText)findViewById(R.id.editText1);
    eemail=(EditText)findViewById(R.id.editText2);
    emobile=(EditText)findViewById(R.id.editText3);
    enewpwd=(EditText)findViewById(R.id.editText4);
    erepwd=(EditText)findViewById(R.id.editText5);
    bok=(Button)findViewById(R.id.button1);
    db=openOrCreateDatabase("mydb", MODE_PRIVATE, null);
    db.execSQL("create table if not exists login(name varchar,email_id varchar,mobile_no varchar,password varchar,repassword varchar)");

    bok.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            String name=ename.getText().toString();
            String email_id=eemail.getText().toString();
            String mobile_no=emobile.getText().toString();
            String password=enewpwd.getText().toString();
            String repassword=erepwd.getText().toString();
            if(name==null||name==""||name.length()<3)
            {
                show("Please Enter Correct Name.");
            }
            else if(mobile_no==null||mobile_no==""||mobile_no.length()<10)
            {
                show("Please Enter Correct mobile number.");
            }
            else if(email_id==null||email_id==""||email_id.length()<10)
            {
                show("Please Enter Correct Email id.");
            }
            else if(password==null||password==""||password.length()<6)
            {
                show("Please Enter Strong Password.");
            }
            else if(repassword==null||repassword=="")
            {
                show("password mismatch.");
            }
            else
            {
                db.execSQL("insert into login values('"+name+"','"+email_id+"','"+mobile_no+"','"+password+"','"+repassword+"')");
                                Intent in=new Intent(Signin.this,Show.class);
                                in.putExtra("name", email_id);
            startActivity(in);
            db.close();
            finish();
        }
    }

        private void show(String str) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();
        }
    });
}

} //show.java类

public class Show extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.show);
    Intent intent = getIntent();
   String n = intent.getStringExtra("name");
    TextView t=(TextView)findViewById(R.id.textView2);
    String nn;
    String[] separated = n.split("@");
    nn=separated[0]; 
    //separated[1]; 
    t.setText(nn);


}

}

相关问题