文档章节

通过数据库验证登录

c
 chuiyuan
发布于 2014/04/24 21:36
字数 908
阅读 232
收藏 4
点赞 0
评论 0

一. 整体设计 

三个界面 :

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();
		}
	}




© 著作权归作者所有

共有 人打赏支持
c
粉丝 9
博文 92
码字总数 40993
作品 0
海淀
在docker中运行sql文件

搭建步骤 1、首先创建Dckerfile: FROM mysql:5.7#设置免密登录ENV MYSQLALLOWEMPTY_PASSWORD yes#将所需文件放到容器中COPY setup.sh /mysql/setup.shCOPY schema.sql /mysql/schema.sqlCOP......

技术小牛人
2017/11/20
0
0
简单方便的表单验证

本节将会介绍如何使用 Hasor 强大的表单验证功能。在开始正文之前先墨迹两句为什么要使用表单验证功能。 通常一个表单在递交到后台之后我们在处理表单内容之前会做一些参数合法性校验。比如:...

哈库纳
2016/10/01
400
0
SQL Server权限设置

随着网络的不但发展、黑客技术的日益增长,针对于SQL Server数据库的攻击也越来越多,很多企业的机密数据受到一定的威胁。如何多方便的加强SQL Server的安全性呢? 一、SQL Server的安全机制...

杨书凡
2017/12/03
0
0
MVC 登录认证与授权及读取登录错误码

最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。 十年河东十年河西,莫欺少年穷 学无止境,精益求精 最近在自学MVC,遇到的问题很多,索性一...

天才小龙
01/05
0
0
Oracle数据库三种登录验证机制

1、用超级管理员修改普通用户lisi密码 SQL>alter user lisi identified by lisi; 用户已更改。 SQL>commit; 提交完成。 再登录普通用户,登录成功,表示修改lisi用户密码成功。 2、数据库的三...

罗荣熙
2012/10/30
0
0
权限管理与数据恢复

1、SQL的安全机制:①客户机安全:系统安全②服务器安全:登录SQL实例安全③数据库安全:访问数据库安全④对象安全:对数据库对象的操作安全2、服务器安全:登录账户的安全权限验证方式:Win...

我要学学学
01/02
0
0
[转帖]AD域账户登录过程

深入理解AD域登录过程 2009-11-20 18:32 本文转自jasonccier 51CTO博客,原文链接:http://blog.51cto.com/jasonccie/394053,如需转载请自行联系原作者...

日久不生情
2017/11/21
0
0
sql server 登录与用户绑定

解决SQL Server 2008 错误15023:当前数据库中已存在用户或角色,SQLServer2008,错误15023, 在使用SQL Server 2008时,我们经常会遇到一个情况:需要把一台服务器上的数据库转移到另外一台服务...

壹炮倾城
2013/06/07
0
0
音视频和数据传输的局域网通讯

随着全球信息化进程的不断发展,越来越多的企业使用局域网来管理各种事务。但随着局域网的机器增多,软件的应用对局域网的信息吞吐、处理能力的要求也越高。为解决上述矛盾,就有必要设计一个...

AnyChat
2014/12/19
433
0
11gR2修改用户后导致系统HANG住

【背景】今天中午的时候用户反馈需要修改数据库的和应用的连接密码,修改密码这种小事情,本以为不会不会出现问题的。没想到午休到一半的时候就接到用户的电话,系统连接不进去了。 【环境】...

猎人笔记
2015/04/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Tomcat内存设置

第一步骤: 1、路径是Tomcat目录下的/bin/catalina.bat文件 打开catalina.bat文件 加入下面这句代码: set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m 2、路径是...

一梦心草
12分钟前
0
0
IDEA 及 Gradle 使用总结

IDEA 及 Gradle 使用总结 自动编译组件 目前Android开发的主流开发工具是 Eclipse 和 IDEA 目前主流的自动化打包工具时 ant,maven,gradle。 maven工具中有自己的依赖仓库维护,很多开源支持...

舒文joven
12分钟前
0
0
lombok 引入后,测试类始终找不到get,set方法。

开发环境为idea,jdk1.7,maven3.5. 网上直接搜出来的方法有: 1、在setting里安装lombok的plugins; 2、如下图,勾选enable annocation processing选项 3、升级maven plugins插件 我尝试了以...

Kidult
14分钟前
0
0
Duang,HUAWEI DevEco IDE全面升级啦

想感受全新UI带来的视觉及交互体验、 HiKey970开发板调测、 HiAI API推荐和收藏、 深度AI模型分析等新功能, 体验高清晰度和流畅度的远程AI真机调测吗? 全新的UI设计 采用最优秀的视觉及交互...

华为终端开放实验室
22分钟前
0
0
阻止事件冒泡,阻止默认事件

1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开, 2.event....

闫亚亚
24分钟前
0
0
网络监控工具类

package com.guorentong.learn.organ.utils;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.net.ConnectivityManage......

王先森oO
25分钟前
0
0
命令

sudo nginx -s reload 重启nginx sudo lsof -i -P | grep -i "listen" 查看端口占用

那个猴子
28分钟前
0
0
用scrapy-redis爬去新浪-以及把数据存储到

需求:爬取新浪网导航页(http://news.sina.com.cn/guide/)所有下所有大类、小类、小类里的子链接,以及子链接页面的新闻内容。 准备工作: a.安装redis(windows或者linux) b.安装Redis Des...

丁典
29分钟前
0
0
PHP常用函数篇

1.为什么要使用函数? 除了内建的PHP函数,我们可以创建我们自己的函数。 函数是可以在程序中重复使用的语句块。 使代码逻辑更清晰 避免过多的全局变量 封装后避免相同逻辑重复代码,只需调用...

天地有涯风有信_大海无量不见人
30分钟前
0
0
对List分组

在日常工作中会遇到这样的情景,我们需要对List按照List中对象的一个值进行分组。比如一个Human的List,我们要根据性别分组,传统的方法是做双层循环,逐个对比,今天我要介绍一种详单简单的...

珂jack
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部