热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用SQLite数据库进行用户名、密码的注册和登录验证

利用SQLite数据库进行存储用户名、密码等等其他信息首先是activity_main布局界面<RelativeLayoutxmlns:androidhttp:s

利用SQLite数据库进行存储用户名、密码等等其他信息

首先是activity_main布局界面


    
    
    
    
    

底下的两个按钮,“注册”是跳转到注册用户名和密码界面;“随便看看”是跳过注册登录页面,直接进入到主程序,方便路人进行浏览操作。


接下来是注册页面的布局zhuce.xml



    
    
     
      
       
       

其中电子邮箱的验证功能没有做,大家可以跳过这一步的填写注册

下面是MainActivity.class

package com.example.android_login;
import android.os.Bundle;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.app.AlertDialog; 

public class MainActivity extends Activity {
	private TextView textview;
	//数据库名称
		private static final String DATABASE_NAME="yufengtest.db";
		
		//数据库版本号
		private static final int DATABASE_VERSION=1;
		//表名		
		private static final String TABLE_NAME="username";
		private DatebaseHelper databaseHelper;
		private SQLiteDatabase db;
		private Button button1;
		private EditText nameText,passText;
    private Intent intent;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		
		nameText=(EditText)findViewById(R.id.username);
		passText=(EditText)findViewById(R.id.pasw);
		
		button1=(Button)findViewById(R.id.tijiao);
		textview=(TextView)findViewById(R.id.zhuce);
		textview.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				intent=new Intent(MainActivity.this,zhuce.class);
				startActivity(intent);
			}
			
		});	
		 
		//启动注册页面
		 TextView textview=(TextView)findViewById(R.id.zhuce);
		 textview.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent a=new Intent(MainActivity.this,zhuce.class);
				startActivity(a);
			}
			 
		 });
		 
		 //启动随便看看页面
		 TextView textview1=(TextView)findViewById(R.id.suibian);
		 textview1.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent a=new Intent(MainActivity.this,Main.class);
				startActivity(a);
			}
			 
		 });
	        button1.setOnClickListener(new LoginListener());  		
	}
	
	
	 class LoginListener implements OnClickListener{
		 public void onClick(View v){
		 String nameString =nameText.getText().toString();
		 String passString=passText.getText().toString();
		 if(nameString.equals("")||passString.equals(""))
		   {
			 //弹出消息框
			 new AlertDialog.Builder(MainActivity.this).setTitle("错误")  
            .setMessage("帐号或密码不能空").setPositiveButton("确定", null)  
            .show();  
		   }else{
			   isUserinfo(nameString,passString);
		   }
		 }
	 }

	public Boolean isUserinfo(String name,String pass)
	{
		String nameString=name;
		String passString=pass;
		databaseHelper=new DatebaseHelper(MainActivity.this,DATABASE_NAME,null,DATABASE_VERSION);
		db =  databaseHelper.getReadableDatabase();
		try{		
			Cursor cursor=db.query(TABLE_NAME, new String[]{"name","password"},"name=?",new String[]{nameString},null,null,"password");
			while(cursor.moveToNext())
			{
				String password=cursor.getString(cursor.getColumnIndex("password"));
				
				
				if(passString.equals(password))
				{
					 new AlertDialog.Builder(MainActivity.this).setTitle("正确")  
	                 .setMessage("成功登录").setPositiveButton("确定", new DialogInterface.OnClickListener() {
						
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
							Intent a=new Intent(MainActivity.this,Main.class);
							startActivity(a);
						}
					}).show();  
	                 
					break;
				}
				else
				{
					Toast.makeText(this, "用户名密码不正确",Toast.LENGTH_LONG).show();
					break;
				}
			}
			
			
			
               
		}catch(SQLiteException e){  
            CreatTable();  
        }  
        return false;  
	}
	 
	

	private void CreatTable() {
		// TODO Auto-generated method stub
		String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME
				+ " (name varchar(30) primary key,password varchar(30));";
		try{
			db.execSQL(sql);
		}catch(SQLException ex){}
	}


	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

当然了,若想用到SQLite数据库,就必须创建一个子类DatebaseHelper.java

package com.example.android_login;

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

public class DatebaseHelper extends SQLiteOpenHelper {
	//数据库名称
	private static final String DATABASE_NAME="yufengtest.db";
	
	//数据库版本号
	private static final int DATABASE_VERSION=1;
	
	//数据库SQL语句 添加一个表

	public DatebaseHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, DATABASE_NAME, factory, DATABASE_VERSION);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
      db.execSQL("create table username( name varchar(30) primary key,password varchar(30))");
	}

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

	}

}

注册页的zhuce.java

package com.example.android_login;

import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class zhuce extends Activity {
	private EditText edittext1,edittext2,edittext3;
	private Button button;
	private DatebaseHelper databaseHelper;
	//数据库名称
	private static final String DATABASE_NAME="yufengtest.db";
	//数据库版本号
	private static final int DATABASE_VERSION=1;
	
	private static final String TABLE_NAME="username";
	private SQLiteDatabase db;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.zhuce);
		edittext1=(EditText)findViewById(R.id.editview1);
		edittext2=(EditText)findViewById(R.id.editview2);
		edittext3=(EditText)findViewById(R.id.editview3);

		button=(Button)findViewById(R.id.tijiao);
        button.setOnClickListener(new OnClickListener(){
        	
        	
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String namestring = edittext1.getText().toString();
	    		String passstring = edittext2.getText().toString();
	    		String repassstring=edittext3.getText().toString();
	    		if(passstring.equals(repassstring))
	    		{
				databaseHelper=new DatebaseHelper(zhuce.this,DATABASE_NAME,null,DATABASE_VERSION);
				db =  databaseHelper.getReadableDatabase();
				db.execSQL("insert into username (name,password) values(?,?)",new String[]{namestring,passstring});
			    
				Toast.makeText(zhuce.this, "注册成功!", Toast.LENGTH_LONG).show();
				Intent b=new Intent(zhuce.this,MainActivity.class);
				startActivity(b);
			    }
	    		else
	    		{
	    			Toast.makeText(zhuce.this,"两次密码不一致", Toast.LENGTH_LONG).show();
	    		}
			}
        	
        });
   }
	
	
}




点击dialog对话框中的“确定”按钮,会跳转到程序的主界面去,相当于直接点击“随便看看”按钮,大家可以自己编写后面的程序


推荐阅读
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
author-avatar
手机用户2702933712
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有