zoukankan      html  css  js  c++  java
  • android安卓Sqlite数据库实现用户登录注册

    看了很多别人写的安卓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/zhaocundang 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不好使,如果你能够实现就回复一下吧!

     
  • 相关阅读:
    JavaBean的详细及引用
    动态页面,登陆,注册,留言 JSP
    简单登陆,注册的动态网页
    11.24作业3
    11.24作业2
    转: JAVA递归算法实例小结
    转: javascript实现全国城市三级联动菜单代码
    转: 我们为什么使用ORM?
    转:Ajax中的get和post两种请求方式的异同
    转: JSTL SQL标签库 使用
  • 原文地址:https://www.cnblogs.com/zhaocundang/p/5540106.html
Copyright © 2011-2022 走看看