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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 看了很多别人写的安卓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
目录
相关文章
|
23天前
|
存储 设计模式 数据库
构建高效的安卓应用:探究Android Jetpack架构组件
【4月更文挑战第20天】 在移动开发的世界中,构建一个既高效又可维护的安卓应用是每个开发者追求的目标。随着Android Jetpack的推出,Google为开发者提供了一套高质量的库、工具和指南,以简化应用程序开发流程。本文将深入探讨Jetpack的核心组件之一——架构组件,并展示如何将其应用于实际项目中,以提升应用的响应性和稳定性。我们将通过分析这些组件的设计原则,以及它们如何协同工作,来揭示它们对于构建现代化安卓应用的重要性。
|
2天前
|
数据库 数据库管理 关系型数据库
|
13天前
|
缓存 算法 Android开发
构建高效安卓应用:深入理解Android Profiler
【4月更文挑战第30天】 在移动开发领域,应用性能优化是提升用户体验的关键因素之一。针对安卓开发者,Android Studio提供的Android Profiler是一个强大的工具,它集成了多个性能分析仪器,帮助开发者监控、分析并优化应用性能。本文将深入探讨Android Profiler的核心功能,并通过案例演示如何利用该工具定位性能瓶颈,以及采取相应的优化措施,从而构建更加高效的安卓应用。
|
15天前
|
SQL 存储 Ubuntu
在ubuntu中将dict.txt导入到数据库sqlite3
这样,你就成功将 `dict.txt` 中的数据导入到名为 `mydatabase.db` 的SQLite3数据库中的 `words` 表格中了。请根据实际情况调整表格结构和数据导入命令。
18 0
|
20天前
|
移动开发 API 数据处理
构建高效安卓应用:探究Android 12中的新特性与性能优化策略
【4月更文挑战第23天】 随着移动设备的普及,用户对应用程序的性能和效率要求越来越高。安卓系统作为市场占有率最高的移动操作系统之一,其版本更新带来了众多性能提升和新特性。本文将深入探讨Android 12版本中引入的关键性能优化技术,并分析这些技术如何帮助开发者构建更加高效的安卓应用。我们将从最新的运行时权限、后台任务优化、以及电池使用效率等方面入手,提供具体的实践建议,旨在帮助开发者更好地利用这些新工具,以提升应用的响应速度、降低能耗,并最终提高用户的满意度。
|
25天前
|
SQL 数据库 数据库管理
Python数据库操作(SQLAlchemy、SQLite等)面试题集
【4月更文挑战第15天】本文介绍了Python数据库操作的面试重点,涵盖SQLAlchemy ORM和SQLite。内容包括:1) 使用SQLAlchemy定义SQLite表的Python类及执行CRUD操作,强调ORM使用和会话管理;2) 查询优化与性能,涉及JOIN、分组、聚合查询,并提醒注意懒加载和索引创建;3) 异常处理和事务管理,展示如何捕获异常并进行事务控制。通过理解这些知识点并避免常见错误,可在面试中表现出色。
24 0
|
1月前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
1月前
|
关系型数据库 MySQL 数据库连接
Python+SQLite数据库实现服务端高并发写入
Python中使用SQLite内存模式实现高并发写入:创建内存数据库连接,建立表格,通过多线程并发写入数据。虽然能避免数据竞争,但由于SQLite内存模式采用锁机制,可能在高并发时引发性能瓶颈。若需更高性能,可选择MySQL或PostgreSQL。
38 0
|
1月前
|
监控 API Android开发
构建高效安卓应用:探究Android 12中的新特性与性能优化
【4月更文挑战第8天】 在本文中,我们将深入探讨Android 12版本引入的几项关键技术及其对安卓应用性能提升的影响。不同于通常的功能介绍,我们专注于实际应用场景下的性能调优实践,以及开发者如何利用这些新特性来提高应用的响应速度和用户体验。文章将通过分析内存管理、应用启动时间、以及新的API等方面,为读者提供具体的技术实现路径和代码示例。
|
1月前
|
XML Android开发 数据格式
Android注册登录页面2
Android注册登录页面
30 2