通过数据库验证登录
博客专区 > chuiyuan 的博客 > 博客详情
通过数据库验证登录
chuiyuan 发表于4年前
通过数据库验证登录
  • 发表于 4年前
  • 阅读 193
  • 收藏 4
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

一. 整体设计 

三个界面 :

LoginActivity  (登陆界面)---------------->RegisterActivity(注册界面)    如果 没有用户名,与数据无关

                                       -----------------> SucActivity(登录成功界面)  如果有用户名,与数据库有关,看数据 库中是不是有这个 人的信息。

数据库设计:

ID                 key            Age 

Name                           Sex 

Password                      Hobby

 先创建数据库SQLiteOpenHelper,在第一次创建 时会新建用户数据表。

二。 数据库设计 

public class DatabaseHelper extends SQLiteOpenHelper{
	final static String DATABASENAME="my_database.db";
	final static int VERSION = 1;
	final static String TABLENAME="userInfo_detail";
	final static String ID= "id";
	final static String NAME="name";
	final static String SEX="sex";
	final static String AGE= "age";
	final static String HOBBY ="hobby";
	final static String PASSWORD="password";

	
	public DatabaseHelper(Context context) {   //减少了构造函数的参数,在类中定义 ,使用更方便,耦合度低
		super(context, DATABASENAME, null, VERSION);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		String sql = "CREATE TABLE "+
		TABLENAME+"("+
		ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
		NAME+" TEXT, "+
		PASSWORD+" TEXT, "+
		SEX+" TEXT, "+
		AGE+" TEXT, "+
		HOBBY+" TEXT); ";
		
		db.execSQL(sql);
	}

	@Override
	public void onOpen(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		super.onOpen(db);
	}

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


三  .LoginActivy设计 

整体架构

loginBtn.setOnClickListener(new OnClickListener(){   //如果有号,就直接登录,到SucActivity
			public void onClick(View arg0) {
		
				
			}
		});
		
		registerBtn.setOnClickListener(new OnClickListener(){  //没有号,到RegisterActivity
			public void onClick(View arg0) {
		        	Intent registerIntent= new Intent(getBaseContext(), RegisterActivity.class);
				startActivity(registerIntent);

			}
		});

loginBtn中比较复杂。

(1)  得到数据库操作对象 

(2) 从输入中得到name和password。

(3) 在数据库中找用户名,如果没有,则提示不存在这个 用户,如果 有这个 用户,再进行密码 对比。用户名不能相同 。 

(4)  如果 密码 对比 也对,则到注册成功界面 ,如果密码 不对,则提示密码错误 。

loginBtn.setOnClickListener(new OnClickListener(){   //如果有号,就直接登录,到SucActivity
			public void onClick(View arg0) {
				//先通过帮助类得到数据库操作对象 
				DatabaseHelper  helper = new DatabaseHelper (getBaseContext());
				db= helper.getReadableDatabase();  //通过 helper得到可以写的数据库
				//得到输入 的信息
				name = name_in.getText().toString();
				pass = pass_in.getText().toString();
				
				//根据用户名查询数据库信息
				Cursor cursor = db.query(DatabaseHelper.TABLENAME, new String [] {DatabaseHelper.PASSWORD}, 
						DatabaseHelper.NAME+"=?", new String [] {name} , null, null, null);
				//如果 没有查询到,则提示用户名不存在 ,
				if (cursor.getCount()==0){
				Toast.makeText(getBaseContext(), "用户名不存在", Toast.LENGTH_SHORT).show();
				return;
				}
				//如果用户名存在,比较密码 
				cursor.moveToFirst(); 
				//while (!cursor.isAfterLast()){}
				String password = cursor.getString(0);
				if(password.equals(pass)){
					Intent sucIntent = new Intent (getBaseContext(), SucActivity.class);
					sucIntent.putExtra("name", name);
					startActivity(sucIntent);
				}else{
					Toast.makeText(getBaseContext(), "密码错误", Toast.LENGTH_SHORT).show();
				}
			
			}
		});

四.  注册界面 设计 

1 。 得到用户的输入信息

2.   得到数据库对象 

3.  判断用户名是否存在, 不存在 ,则保存信息,如果 存在 ,则提示用户名已经 存在

4.  保存成功后,到登录成功界面 

okBtn.setOnClickListener(new OnClickListener(){
			public void onClick(View v) {
				// TODO Auto-generated method stub
				name = name_in.getText().toString();
				pass = pass_in.getText().toString();
				sex = sex_in.getText().toString();
				age = age_in.getText().toString();
				hobby = hobby_in.getText().toString();
				
				//得到数据库对象 
				DatabaseHelper helper = new DatabaseHelper(getBaseContext());
				db=helper.getWritableDatabase();
				// 判断这个用户是否存在 
				Cursor c = db.query(DatabaseHelper.TABLENAME, new String []{DatabaseHelper.NAME}, 
						DatabaseHelper.NAME+"=?", new String []{name}, null, null, null);
				if (c.getCount()>0){   //查询结果 是用户名存在 
					Toast.makeText(getBaseContext(), "用户名存在 ", Toast.LENGTH_SHORT).show();
					return ;
				}
				//如果 不存在 ,则插入数据 
				ContentValues values = new ContentValues ();
				values.put(DatabaseHelper.NAME, name);
				values.put(DatabaseHelper.PASSWORD, pass);
				values.put(DatabaseHelper.AGE, age);
				values.put(DatabaseHelper.SEX, sex);
				values.put(DatabaseHelper.HOBBY, hobby);
				
				db.insert(DatabaseHelper.TABLENAME, null, values);
				
				Intent i = new Intent (getBaseContext(),SucActivity.class);
			        i.putExtra("name", name);  //在SucActivity中用来 查询数据
				startActivity(i);
			}
		});
	}


五 。登录成功界面

两个功能 

  1. 根据name 进行数据查询

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.suc_activity);
		
		initView ();  //如果 用来 initView(),则widget定义 成类变量
		doQuery();
		doShow();
		
		goback.setOnClickListener(new OnClickListener(){
			public void onClick(View v) {
				Intent i = new Intent (getBaseContext(),LoginDemo.class);
				startActivity(i);
			}
		});
	}
  1. 显示用户的信息

private void doQuery() {
		// TODO Auto-generated method stub
		name = getIntent().getStringExtra("name");
		DatabaseHelper helper = new DatabaseHelper(getBaseContext());
		db=helper.getReadableDatabase();
		//查询信息
		String  [] columns = new String []{
				DatabaseHelper.PASSWORD,
				DatabaseHelper.AGE,
				DatabaseHelper.SEX,
				DatabaseHelper.HOBBY
		};
		Cursor c = db.query(DatabaseHelper.TABLENAME, columns, DatabaseHelper.NAME+"=?", 
				new String[]{name}, null, null, null);
		c.moveToFirst();
		while(!c.isAfterLast()){
			pass=c.getString(0);
			age=c.getString(1);
			sex=c.getString(2);
			hobby=c.getString(3);
			c.moveToNext();
		}
	}




共有 人打赏支持
粉丝 10
博文 91
码字总数 40993
×
chuiyuan
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: