android安卓Sqlite数据库实现用户登录注册

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public class MySqliteHelper extends SQLiteOpenHelper {...

看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!
建立一个类 并继承SQLiteOpenHelper

public class MySqliteHelper extends SQLiteOpenHelper { public MySqliteHelper(Context context) { super(context, "userdb.db", null, 3); // TODO Auto-generated constructor stub } 

 

在oncreate()函数中建立表

public void onCreate(SQLiteDatabase db) {  
    // TODO Auto-generated method stub  

    db.execSQL("create table users(id int primary key ,name text,pwd text)"); } 

在方法中建立db文件

  public void onCreate(SQLiteDatabase db) { 

    db.execSQL("create table users(id integer primary key ,name text,pwd text)");  

     String sql = "insert into users values (0,0,0)"; //id 自增加  
     db.execSQL(sql);  

}  

整体代码:

package zcd.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

public class MySqliteHelper extends SQLiteOpenHelper {


    public MySqliteHelper(Context context) {
        super(context, "userdb.db", null, 3);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub

        db.execSQL("create table users(id integer primary key ,name text,pwd text)");

         String sql = "insert into users values (0,0,0)"; //id 自增加
         db.execSQL(sql);

    }

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

    }

}

然后在自己另外一个类中实现数据库表的增删改查。 
我用的是Fragment,用Activity的话吧getActivity()去掉,换成this 
实现了用户登录注册的功能! 
http://www.cnblogs.com/xiaobo-Linux/(小波)赵存档QQ463431476 个人原创代码,不会的可以问我。

因为建立的数据库里面的数据没有判断数据的唯一性,所以在代码中实现了数据唯一性的判断。实现登录注册代码设计主要是在插入数据和查找数据的基础上做一个用户名是否存在,或者用户名和用户密码是否输入正确、输入错误的判断。 
代码中定义一个标示判断 用户名是否存在int userflag 定义一个登录时判断用户和密码是否输入正确的标识int loginflag 
注册时先判断用户名是否存在,userflag=1不存在此用户可以插入数据,userflag=0此用户存在跳出循环。 
登录时loginflag为1用户登录成功,loginflag为0出现用户名或者密码输入错误的提示。

具体代码:

自己看,写的很详细了。

这里用了安卓5.0的沉浸式操作栏,可以忽略去掉,看主要的部分啊!!

package zcd.sqlite;



import zcd.main.MainActivity;
import zcd.netanything.R;

import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class Userlogin extends Activity implements  OnClickListener{


       private MySqliteHelper helper;

       Button sign;  
       Button reg;

       String  name;
       String  mypwd;
       private EditText user;
       private EditText pwd;
       int userflag ;//定义一个标示判断 用户名是否存在
       int loginflag ;//登录时判断用户密码是否输入正确
   public void onCreate(Bundle savedInstanceState) {  
       super.onCreate(savedInstanceState);
       //设置状态栏颜色 
       getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
       getWindow().setStatusBarColor(getResources().getColor(R.color.StatusBar));   
       //设置actionbar颜色 
       ActionBar actionBar = getActionBar();
       actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0099CC")));
       setContentView(R.layout.login);

       findViewById(R.id.button1).setOnClickListener(this);
       findViewById(R.id.button2).setOnClickListener(this);
       user = (EditText)findViewById(R.id.editText1);
       pwd=(EditText)findViewById(R.id.editText2);

   }  


 public void  insert()
 {


      helper = new MySqliteHelper(getApplicationContext());
      SQLiteDatabase db=helper.getWritableDatabase();    //建立打开可读可写的数据库实例



      //查询一下,是否用户名重复
       String sql1 = "select * from users";
       Cursor cursor = db.rawQuery(sql1, null);
       while (cursor.moveToNext()) {
          //第一列为id
          name =  cursor.getString(1); //获取第2列的值,第一列的索引从0开始
          mypwd = cursor.getString(2);//获取第3列的值

          if((user.getText().toString().isEmpty())||(pwd.getText().toString().isEmpty())){

                 Toast.makeText(this, "不能为空,请重新输入", Toast.LENGTH_SHORT).show();  
                 break;
          }


          userflag = 1;  //不存在此用户


          if((user.getText().toString().equals(name)))
             {
                    Toast.makeText(this, "已存在此用户,请重新注册", Toast.LENGTH_SHORT).show();


                     userflag =0;
                     break;
             }

      }

      if(userflag==1)
      {
         String sql2 = "insert into users(name,pwd) values ('"+user.getText().toString()+"','"+pwd.getText().toString()+"')";
         db.execSQL(sql2);
         Toast.makeText(this, "注册成功!", Toast.LENGTH_SHORT).show(); 
      }  





        }


  public void select()
 {

      helper = new MySqliteHelper(getApplicationContext());
      SQLiteDatabase db=helper.getWritableDatabase();

      String sql = "select * from users";

      Cursor cursor = db.rawQuery(sql, null);
      while (cursor.moveToNext()) {
          //第一列为id
          name =  cursor.getString(1); //获取第2列的值,第一列的索引从0开始
          mypwd = cursor.getString(2);//获取第3列的值



           if((user.getText().toString().equals(name))&&(pwd.getText().toString().equals(mypwd)))
             {
                    Toast.makeText(this, "用户验证成功", Toast.LENGTH_SHORT).show(); 
                     loginflag=1;

                    //intent bundle传值
                    Intent MainActivity = new Intent();
                    MainActivity .setClass(this,MainActivity.class);
                    Bundle bundle = new Bundle(); //该类用作携带数据    
                    bundle.putString("user", user.getText().toString()); 
                    MainActivity.putExtras(bundle);   //向MainActivity传值
                    this.startActivity(MainActivity); 
                    finish();//退出

             }


      }

      if((user.getText().toString().isEmpty())||(pwd.getText().toString().isEmpty())){

         Toast.makeText(this, "不能为空,请重新输入", Toast.LENGTH_SHORT).show();  
     }


          if(loginflag!=1)
          {
             Toast.makeText(this, "账号或者密码错误,请重新输入", Toast.LENGTH_SHORT).show();  
          }

                cursor.close();
                db.close();
                //Toast.makeText(this, "已经关闭数据库", Toast.LENGTH_SHORT).show();  
      }



@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
       switch(v.getId()){  
        case R.id.button1:  
            select();

            break;  
        case R.id.button2:  
            insert();
            break;  
         }

}


}  

效果如下: 

默认是插入0,0,0然后再插入数据后id号就自动增加了. 
这是我的方法,不过写autoincreatement SQLite3不好使,如果你能够实现就回复一下吧!

 

 

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
24天前
|
API 数据库 C语言
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
164 0
|
1月前
|
网络协议 关系型数据库 MySQL
如何实现无公网ip远程访问本地安卓Termux部署的MySQL数据库【内网穿透】
如何实现无公网ip远程访问本地安卓Termux部署的MySQL数据库【内网穿透】
|
2月前
|
存储 监控 安全
内网屏幕监控软件的数据存储与管理:使用SQLite数据库保存监控记录和配置信息
在当今数字化时代,安全和监控在企业和组织中变得至关重要。内网屏幕监控软件作为一种关键工具,帮助组织监视员工的活动并确保信息安全。这种软件不仅需要高效地记录和管理监控数据,还需要能够方便地进行配置和调整。本文将讨论如何使用SQLite数据库来保存监控记录和配置信息,并介绍如何通过自动化机制将监控到的数据提交到指定网站。
150 2
|
6天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
11天前
|
关系型数据库 MySQL 数据库连接
Python+SQLite数据库实现服务端高并发写入
Python中使用SQLite内存模式实现高并发写入:创建内存数据库连接,建立表格,通过多线程并发写入数据。虽然能避免数据竞争,但由于SQLite内存模式采用锁机制,可能在高并发时引发性能瓶颈。若需更高性能,可选择MySQL或PostgreSQL。
16 0
|
1月前
|
关系型数据库 数据库 C++
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
|
1月前
|
存储 SQL 数据库
django如何连接sqlite数据库?
django如何连接sqlite数据库?
38 0
|
1月前
|
网络协议 关系型数据库 MySQL
安卓手机termux上安装MariaDB数据库并实现公网环境下的远程连接
安卓手机termux上安装MariaDB数据库并实现公网环境下的远程连接
|
2月前
|
SQL 数据库管理
sqlite语句order by两个字段同时排序处理
sqlite语句order by两个字段同时排序处理
19 0
|
2月前
|
SQL 关系型数据库 MySQL
Python中的数据库操作:SQLite与MySQL的连接
Python中的数据库操作:SQLite与MySQL的连接
114 0