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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 看了很多别人写的安卓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 
实现了用户登录注册的功能!

因为建立的数据库里面的数据没有判断数据的唯一性,所以在代码中实现了数据唯一性的判断。实现登录注册代码设计主要是在插入数据和查找数据的基础上做一个用户名是否存在,或者用户名和用户密码是否输入正确、输入错误的判断。 
代码中定义一个标示判断 用户名是否存在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不好使,如果你能够实现就回复一下吧!

 

 

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
XML 数据库 Android开发
Android数据库的使用(增删改查)
本文介绍了一个简单的数据库操作Demo,包含创建数据库、增删改查功能。通过5个按钮分别实现创建数据库、插入数据、删除数据、更新数据和查询数据的操作。代码结构清晰,适合初学者学习Android SQLite数据库基础操作。
|
2月前
|
数据库 Android开发
Android外部数据库的引用
简介:本文介绍了在Android项目中引用外部数据库的方法。首先,将现成的数据库文件放入项目的`assets`文件夹中(需手动创建)。其次,在APP引导界面通过代码将数据库拷贝至App目录下,确保数据库可用。最后,对数据库进行增删改查等操作。关键步骤包括判断数据库是否存在、使用`AssetManager`读取数据库文件并写入App私有目录,实现外部数据库的顺利集成与使用。
|
2月前
|
数据库 Android开发 开发者
Android常用的room增删改查语句(外部数据库)
本文分享了将一个原生数据库驱动的单词APP重构为使用Room库的过程及遇到的问题,重点解决了Room中增删改查的常用语句实现。文章通过具体示例(以“forget”表为例),详细展示了如何定义实体类、Dao接口、Database类以及Repository和ViewModel的设计与实现。同时,提供了插入、删除、更新和查询数据的代码示例,包括模糊查询、分页加载等功能。此外,针对外部数据库导入问题,作者建议可通过公众号“计蒙不吃鱼”获取更多支持。此内容适合有一定Room基础的开发者深入学习。
Android常用的room增删改查语句(外部数据库)
|
8月前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
391 3
|
SQL 自然语言处理 网络协议
【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)
TCP(Transmission Control Protocol)连接是互联网上最常用的一种面向连接、可靠的、基于字节流的传输层通信协议。建立TCP连接需要经过著名的“三次握手”过程: 1. SYN(同步序列编号):客户端发送一个SYN包给服务器,并进入SYN_SEND状态,等待服务器确认。 2. SYN-ACK:服务器收到SYN包后,回应一个SYN-ACK(SYN+ACKnowledgment)包,告诉客户端其接收到了请求,并同意建立连接,此时服务器进入SYN_RECV状态。 3. ACK(确认字符):客户端收到服务器的SYN-ACK包后,发送一个ACK包给服务器,确认收到了服务器的确
271 1
|
11月前
|
安全 Nacos 数据库
【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
1014 0
|
存储 缓存 数据库
Android之SQLite数据库使用详解
Android之SQLite数据库使用详解
1039 0
|
存储 数据库连接 数据库
Android数据存储:解释SQLite数据库在Android中的使用。
Android数据存储:解释SQLite数据库在Android中的使用。
150 0
|
数据库 Android开发 数据安全/隐私保护
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
373 2
|
SQL 存储 数据库
48. 【Android教程】数据库:SQLite 的使用
48. 【Android教程】数据库:SQLite 的使用
231 1

热门文章

最新文章