精华内容
下载资源
问答
  • sqlite 安卓 登陆界面

    2013-03-13 16:01:32
    sqlite 安卓 登陆界面
  • android 排版,sqlite 增删改查,电话接口调用,可直接运行
  • androidSQLite的使用实现登陆注册功能。-附件资源
  • android之利用SQLite实现登陆和注册

    千次下载 热门讨论 2011-12-19 19:32:27
    android之利用SQLite数据库实现登陆和注册,使用SQLiteOpenHelper抽象类建立数据库,建立数据库类DatabaseHelper,写业务类实现查询和插入
  • 使用了SQLite数据库,实现了基本的登陆注册功能。
  • Android连接SQLite 1.SQLite简介: 轻量级: 使用 SQLite 只需要带一个动态库,就可以享受它的全部功能, 而且那个动态库的尺寸想当小。 独立级: SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的...

    代码在下方

    Android连接SQLite

    1.SQLite简介:

    1. 轻量级:

      使用 SQLite 只需要带一个动态库,就可以享受它的全部功能, 而且那个动态库的尺寸想当小。

    2. 独立级:

      SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。

    3. 隔离性

      SQLite 数据库中所有的信息(比如表、视图、触发器等) 都包含在一个文件夹内,方便管理和维护。

    4. 跨平台

      1. SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统 也是能够运行,比如:Android。
    5. 多语言接口

      SQLite 数据库支持多语言编程接口。

    6. 安全性

      SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。 这意味着多个进程可以在同一时间从同一数据库读取数据, 但只能有一个可以写入数据。

    2.安卓连接SQLite

    2.1 创建数据库类:

    DatabaseHelper是一个继承自SQLiteOpenHelper的Java类,它需要重写父类的onCreate()和onUpgrade()方法。该类的构造函数,也就是DatabaseHelper()用来初始化数据库连接。当数据表第一次被创建时,onCreate()方法将被触发,在该方法中实现数据表的创建。当数据库需要升级时,onUpgrade()方法将被触发,该方法实现数据库更新。

    在Android中连接SQLite需要先创建一个类,并且这个类 继承 SQLiteOpenHelper,代码如下:

    package com.example.sqlite_android.service;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    public class DatabaseHelper extends SQLiteOpenHelper {
        private static final String name="user.db";//自定义的数据库名
        private static final int dbVersion=1;//版本号
        public DatabaseHelper(Context context) {
            super(context, name, null, dbVersion);
        }
        
        //该方法会自动调用,首先系统会检查该程序中是否存在数据库名为‘user’的数据库,如果存在则不会执行该方法,如果不存在则会执行该方法。 
        
        public void onCreate(SQLiteDatabase db) {
            String sql="create table user(
                id integer primary key autoincrement,
                 username varchar(20),
                 password varchar(20),
                 age integer,
                 sex varchar(2))";
            //SQL语句
            
            db.execSQL(sql);
        }
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
    }
    

    SQLiteOpenHelper是SQLiteDatabase的一个帮助类, 用来管理数据库的创建和版本的更新。 一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。 常用的方法有:

    onCreate(SQLiteDatabase db)
    创建数据库时调用

    onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)
    版本更新时调用

    getReadableDatabase()
    创建或打开一个只读数据库

    getWritableDatabase()
    创建或打开一个读写数据库

    2.2 对数据库的插入等操作:

    //实例化刚才上面我们创建的那个类    
    MySQLDatabase DatabaseHelper = new DatabaseHelper(MainActivity.this);
    /*在通过getReadableDatabase()方法
        或者通过getWritableDatabase()
    获得SQLDatabse类的对象;通过SQLDatabase类的对象来对数据进行操作;*/
            SQLiteDatabase sqlDatabase =  DatabaseHelper.getReadableDatabase();
            
    

    SQLDatabase类的常用方法:

    • (long) insert(String table,String nullColumnHack,ContentValues values)

      删除数据行的便捷方法

    • (int) delete(String table,String whereClause,String[] whereArgs)

      更新数据行的便

    • (int) update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新数据行的便捷方法

      关闭数据库

    • (void) close()

      查询指定的数据表返回一个带游标的数据集

    • (Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

      运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别就是防止SQL注入)

    • (Cursor) rawQuery(String sql, String[] selectionArgs)

      这个是执行SQL语句(sql字符串可以是select,delete,或者insert,update中的任意语句)

    • (void) execSQL(String sql)

    //往数据库中插入数据的代码,在这里我使用的是execSQL(sql);
    for(int i=0;i<20;i++){
                String sql = "insert into wx_user(id,name,tou,content,dateTime) values("+i+",'张校花"+i+"','aa','你今天会被打','11月19日')";
                sqlDatabase.execSQL(sql);}
    

    2.3读取数据库

    往数据库中参入数据之后,我们再将数据库中的数据取出来看看;我们需要先创建一个实体类;

    package com.example.entiy;
    
    public class unserInFo {
        private int id;
        private String name;
        private String dateTime;
        private String tou;
        private String content;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getContent() {
            return content;
        }
        public void setContent(String content) {
            this.content = content;
        }
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getDateTime() {
            return datetime;
        }
        public void setDateTime(String dateTime) {
            this.dateTime= dateTime;
        }
        public String getTou() {
            return tou;
        }
        public void setTou(String tou) {
            this.tou = tou;
        }
        
        @Override
        public String toString() {
            return "unserInFo [id="+id+,"name=" + name + ", dataTime=" + dataTime+ ", tou="
                    + tou+ "]";
        }
        public unserInFo() {
            super();
            // TODO Auto-generated constructor stub
        }
       
    }
    

    获取数据:

    //定义一个集合用来存放所有的结果
    List<unserInFo> user = new ArrayList<unserInFo>();
    //通过游标来获取表wx_user的信息,
    Cursor c=sqlDatabase.query("wx_user", null, null, null, null, null, null);
            //先判断是否有第一条数据(ic.moveToFirst()将游标移到第一条数据,如果没有第一条数据则返回false,否则返回true)
           if(c.moveToFirst()){
                    //通过getCount()来决定循环的次数getCount()是游标的总数量。
            for (int i = 0; i<c.getCount();i++) {
                unserInFo uif = new unserInFo();
                
                //将游标移动到下一条数据
                c.moveToNext();
                uif.setId(c.getInt(c.getColumnIndex("id")));
                uif.setLastdate(c.getString(c.getColumnIndex("dateTime")));
                uif.setName(c.getString(c.getColumnIndex("name")));
                uif.setZhao(c.getString(c.getColumnIndex("tou")));
                uif.setContent(c.getString(c.getColumnIndex("content")));
                user.add(uif);
                
            }
    }    
    //最后数据库中获取到的数据就全部存放到user集合中了,我们只需要遍历user就能显示数据了。
    

    登陆注册实例:

    1.项目目录:

    在这里插入图片描述

    1. 添加布局文件——主界面activity_main
    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:gravity="center"
                android:text="欢迎进入登录界面!"
                android:textSize="30dp"
                android:textStyle="bold" />
            <TableLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:stretchColumns="1" >
                <TableRow>
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:text="用户名:" />
                    <EditText
                        android:id="@+id/username"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:hint="请输入用户名!" />
                </TableRow>
                <TableRow>
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:text="密码:" />
    
                    <EditText
                        android:id="@+id/password"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:hint="请输入密码!" />
                </TableRow>
                <TableRow>
                    <TextView />
                    <LinearLayout>
    
                        <Button
                            android:id="@+id/login"
                            android:layout_width="100dp"
                            android:layout_height="wrap_content"
                            android:text="登录" />
                        <Button
                            android:id="@+id/register"
                            android:layout_width="100dp"
                            android:layout_height="wrap_content"
                            android:text="注册" />
                    </LinearLayout>
                </TableRow>
            </TableLayout>
        </LinearLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>
    
    1. XML布局文件——注册界面:activity_register
     <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".RegisterActivity">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:gravity="center"
                android:text="欢迎进入注册界面!"
                android:textSize="30dp"
                android:textStyle="bold" />
    
            <TableLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:stretchColumns="1" >
    
                <TableRow >
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:text="用户名:" />
    
                    <EditText
                        android:id="@+id/usernameRegister"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:hint="请输入用户名!" />
                </TableRow>
    
                <TableRow >
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:text="密码:" />
    
                    <EditText
                        android:id="@+id/passwordRegister"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:hint="请输入密码!" />
                </TableRow>
    
                <TableRow >
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:text="年龄:" />
    
                    <EditText
                        android:id="@+id/ageRegister"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:hint="请输入年龄!" />
                </TableRow>
    
                <TableRow >
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:text="性别:"
                        android:textSize="20dp" />
    
                    <RadioGroup
                        android:id="@+id/sexRegister"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:checkedButton="@+id/woman"
                        android:orientation="horizontal" >
    
                        <RadioButton
                            android:id="@+id/nan"
                            android:text="男"
                            android:layout_height="wrap_content"
                            android:layout_width="wrap_content" />
    
                        <RadioButton
                            android:id="@id/woman"
                            android:text="女"
                            android:layout_height="wrap_content"
                            android:layout_width="wrap_content"/>
                    </RadioGroup>
                </TableRow>
    
                <TableRow >
    
                    <TextView />
    
                    <LinearLayout >
                        <Button
                            android:id="@+id/Register"
                            android:layout_width="150dp"
                            android:layout_height="wrap_content"
                            android:text="注册" />
                    </LinearLayout>
                </TableRow>
            </TableLayout>
    
        </LinearLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>
    
    1. XML布局文件——登陆成功后显示界面:activity_0k
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            >
            <TextView
            android:id="@+id/tv_id"
            android:textAlignment="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="id"
            android:layout_weight="1"/>
            <TextView
                android:text="姓名"
                android:textAlignment="center"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"/>
            <TextView
                android:textAlignment="center"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="age"
                android:layout_weight="1"/>
            <TextView
                android:textAlignment="center"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="性别"
                android:layout_weight="1"/>
    
        </LinearLayout>
        <ListView
            android:id="@+id/read_listview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
        </ListView>
    
    </LinearLayout>
    

    4.XML布局文件——显示数据库里面信息的XML:item_sql

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/tv_id"
            android:textAlignment="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
        <TextView
            android:id="@+id/tv_name"
            android:textAlignment="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
        <TextView
            android:id="@+id/tv_age"
            android:textAlignment="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
        <TextView
            android:id="@+id/tv_sex"
            android:textAlignment="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
    </LinearLayout>
    
    1. 在service包DatabaseHelper中添加链接AS自带数据库以及创建表的语句:
    package com.example.sqlite_android.service;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    
    public class DatabaseHelper extends SQLiteOpenHelper {
        private static final String name="user.db";//自定义的数据库名
        private static final int dbVersion=1;//版本号
        public DatabaseHelper(Context context) {
            super(context, name, null, dbVersion);
        }
        //该方法会自动调用,首先系统会检查该程序中是否存在数据库名为‘user’的数据库,如果存在则不会执行该方法,如果不存在则会执行该方法。
        public void onCreate(SQLiteDatabase db) {
            String sql="create table user(" +
                    "id integer primary key autoincrement," +
                    "username varchar(20)," +
                    "password varchar(20)," +
                    "age integer," +
                    "sex varchar(2))";
            db.execSQL(sql);
        }
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
        }
    }
    
    1. 在service包UserService中用sql语句写登录注册功能的实现:
    package com.example.sqlite_android.service;
    
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    
    import com.example.sqlite_android.User;
    
    
    public class UserService {
        private DatabaseHelper dbHelper;
        public UserService(Context context){
            dbHelper=new DatabaseHelper(context);
        }
        public boolean login(String username,String password){
            SQLiteDatabase sdb=dbHelper.getReadableDatabase();
            String sql="select * from user where username=? and password=?";
            Cursor cursor=sdb.rawQuery(sql, new String[]{username,password});
            if(cursor.moveToFirst()==true){
                cursor.close();
                return true;
            }
            return false;
        }
        public boolean register(User user){
            SQLiteDatabase sdb=dbHelper.getReadableDatabase();
            String sql="insert into user(username,password,age,sex) values(?,?,?,?)";
            Object obj[]={user.getUsername(),user.getPassword(),user.getAge(),user.getSex()};
            sdb.execSQL(sql, obj);
            return true;
        }
    }
    
    1. 在User文件中声明要用到的表列名的变量,并对其添加get&&set方法:
    package com.example.sqlite_android;
    
    import java.io.Serializable;
    
    public class User implements Serializable{
        private int id;
        private String username;
        private String password;
        private int age;
        private String sex;
        public User() {
            super();
            // TODO Auto-generated constructor stub
        }
        public User(String username, String password, int age, String sex) {
            super();
            this.username = username;
            this.password = password;
            this.age = age;
            this.sex = sex;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", password="
                    + password + ", age=" + age + ", sex=" + sex + "]";
        }
    
    }
    
    1. 为登陆功能添加activity组件—Login_Activity:
    package com.example.sqlite_android;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    import androidx.appcompat.app.AppCompatActivity;
    import com.example.sqlite_android.service.UserService;
    public class LoginActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);//即activity_login.xml
            findViews();
        }
        private EditText username;
        private EditText password;
        private Button login;
        private Button register;
    
        private void findViews() {
            username=(EditText) findViewById(R.id.username);
            password=(EditText) findViewById(R.id.password);
            login=(Button) findViewById(R.id.login);
            register=(Button) findViewById(R.id.register);
    
            login.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String name=username.getText().toString();
                    System.out.println(name);
                    String pass=password.getText().toString();
                    System.out.println(pass);
    
                    Log.i("TAG",name+"_"+pass);
                    UserService uService=new UserService(LoginActivity.this);
                    boolean flag=uService.login(name, pass);
    
                    if(flag){
                        Log.i("TAG","登录成功");
                        Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_LONG).show();
                        Intent intent = new Intent(LoginActivity.this,MainActivity.class);
                        startActivity(intent);
                    }else{
                        Log.i("TAG","登录失败");
                        Toast.makeText(LoginActivity.this, "登录失败", Toast.LENGTH_LONG).show();
                    }
                }
            });
            register.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Intent intent=new Intent(LoginActivity.this,RegisterActivity.class);
                    startActivity(intent);
                }
            });
        }
    }
    
    1. 为注册功能添加activity组件:
    package com.example.sqlite_android;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.Toast;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import com.example.sqlite_android.service.UserService;
    
    public class RegisterActivity extends AppCompatActivity {
    
        EditText username;
        EditText password;
        EditText age;
        RadioGroup sex;
        Button register;
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_register);
            findViews();
            register.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    String name=username.getText().toString().trim();
                    String pass=password.getText().toString().trim();
                    String agestr=age.getText().toString().trim();
                    String sexstr=((RadioButton)RegisterActivity.this.findViewById(sex.getCheckedRadioButtonId())).getText().toString();
                    Log.i("TAG",name+"_"+pass+"_"+agestr+"_"+sexstr);
                    UserService uService=new UserService(RegisterActivity.this);
                    User user=new User();
                    user.setUsername(name);
                    user.setPassword(pass);
                    user.setAge(Integer.parseInt(agestr));
                    user.setSex(sexstr);
                    uService.register(user);
                    Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
                    startActivity(intent);
                }
            });
        }
        private void findViews() {
            username=(EditText) findViewById(R.id.usernameRegister);
            password=(EditText) findViewById(R.id.passwordRegister);
            age=(EditText) findViewById(R.id.ageRegister);
            sex=(RadioGroup) findViewById(R.id.sexRegister);
            register=(Button) findViewById(R.id.Register);
        }
    
    }
    
    1. 登陆成功后跳转的显示见面——Activity_main
    package com.example.sqlite_android;
    
    import androidx.annotation.Nullable;
    import android.app.Activity;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import static android.content.Context.MODE_PRIVATE;
    
    public class MainActivity extends Activity {
        ListView listView;
        SimpleAdapter adapter;
        List<Map<String,String>> list;
        SQLiteDatabase db;
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_ok);
            inti();
    
        }
        private void inti() {
            //每个程序都要自己数据库,默认情况下各自互不干扰
            //创建一个数据库,并且打开;
            //通过下面这个方法,创建,如果存在就打开,不存在就创建并打开
            db= openOrCreateDatabase("user.db",MODE_PRIVATE,null);
            list=new ArrayList<Map<String, String>>();
            //初始化
            listView=(ListView)findViewById(R.id.read_listview);
            adapter=new SimpleAdapter(this,
                    getData(),
                    R.layout.item_sql,
                    new String[]{"id","name","age","sex"},
                    new int[]{R.id.tv_id,
                            R.id.tv_name,
                            R.id.tv_age,
                            R.id.tv_sex});
            listView.setAdapter(adapter);
        }
    
        public List<Map<String,String>> getData() {
            if (isTableExist("user")) {
                Cursor c = db.rawQuery("select * from user", null);
                if (c != null) {
                    while (c.moveToNext()) {
                        Map<String, String> map = new HashMap<>();
                        map.put("id", c.getString(0));
                        map.put("name", c.getString(1));
                        //getColumnIndex获取该列数据的index(索引)。返回值为int
                        map.put("age", c.getString(c.getColumnIndex("age")));
                        System.out.println("heh"+(c.getColumnIndex("age")));
                        map.put("sex", c.getString(c.getColumnIndex("sex")));
                        list.add(map);
    
                    }
                    c.close();
                    db.close();
                    return list;
                } else {
                    c.close();
                    db.close();
                }
            }
            return list;
        }
        //判断table是否存在
        public boolean isTableExist(String table) {
            Cursor c = db.rawQuery("select count(*) from sqlite_master where type='table' and name='"+table+"'", null);
            if (c != null) {
                while (c.moveToNext()) {
                    int count = c.getInt(0);
                    if (count > 0) {
                        c.close();
                        return true;
                    }
                }
            }else{
                c.close();
            }
            return false;
        }
    }
    
    1. Androidmanifest.xml清单文件中,程序运行必备的内容一般都已经自动完成添加了。也可以进行修改:
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.sqlite_android">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".RegisterActivity">
                <!--<intent-filter>-->
                <!--<action android:name="android.intent.action.MAIN" />-->
    
                <!--<category android:name="android.intent.category.LAUNCHER" />-->
                <!--</intent-filter>-->
            </activity>
    
            <activity android:name=".LoginActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
            <activity android:name=".MainActivity">
    <!--            <intent-filter>-->
    <!--                <action android:name="android.intent.action.MAIN"/>-->
    <!--                <category android:name="android.intent.category.LAUNCHER"/>-->
    <!--            </intent-filter>-->
            </activity>
            <!--<uses-library android:name="android.test.runner"/>-->
        </application>
    </manifest>
    

    在模拟器或者真机运行程序,即可,一个连接数据库的登录注册功能已经实现,效果如下:

    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

    在这里插入图片描述

    展开全文
  • Android Sqlite demo

    2018-01-05 16:34:06
    Android Sqlite使用demo
  • android存取Sqlite3数据库demo,已经运行ok,可以用adb登陆查看结果,可供快速掌握sqlite3
  • Step1:话不多说看,最终效果图 Step2:项目结构图 Step3:下载地址(GitHub) [文件名:Mydatabase https://github.com/wu990723/SQlite/blob/master/Mydatabase2.zip]

    Step1:话不多说看,最终效果图

    最终效果图

    Step2:项目结构图

    在这里插入图片描述

    Step3:下载地址

    点击进入下载

    展开全文
  • android——SQLite实现简单的注册登陆

    千次阅读 2016-08-16 13:53:15
    1,Main_activity的xmL配置 1 LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4

    1,Main_activity的xmL配置

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:background="@drawable/b3"
     6     android:orientation="vertical"
     7     tools:context="${relativePackage}.${activityClass}" >
     8 
     9     <TextView
    10         android:layout_width="match_parent"
    11         android:layout_height="15dp"
    12         android:background="#56a692"
    13         android:gravity="bottom"
    14         android:text="@string/main_name1"
    15         android:textColor="#fff"
    16         android:textSize="12sp" />
    17 
    18     <TextView
    19         android:layout_width="match_parent"
    20         android:layout_height="80dp"
    21         android:gravity="center"
    22         android:text="@string/main_name1"
    23         android:textSize="20sp"
    24         android:textStyle="italic" />
    25 
    26     <TextView
    27         android:layout_width="match_parent"
    28         android:layout_height="38dp"
    29         android:background="#CD661D" />
    30 
    31     <TextView
    32         android:layout_width="match_parent"
    33         android:layout_height="30dp"
    34         android:text="@string/main_name6"
    35         android:textSize="15sp"
    36         android:textStyle="italic" />
    37 
    38     <EditText
    39         android:id="@+id/editText1"
    40         android:layout_width="match_parent"
    41         android:layout_height="wrap_content"
    42         android:layout_marginTop="15dp"
    43         android:ems="10"
    44         android:hint="@string/main_name2" >
    45 
    46         <requestFocus />
    47     </EditText>
    48 
    49     <EditText
    50         android:id="@+id/editText2"
    51         android:layout_width="match_parent"
    52         android:layout_height="wrap_content"
    53         android:layout_marginTop="34dp"
    54         android:ems="10"
    55         android:hint="@string/main_name3" />
    56 
    57     <TextView
    58         android:layout_width="match_parent"
    59         android:layout_height="60dp"
    60         android:layout_weight="0.00" />
    61 
    62     <TextView
    63         android:layout_width="match_parent"
    64         android:layout_height="38dp"
    65         android:background="#CD661D" />
    66 
    67     <LinearLayout
    68         android:layout_width="wrap_content"
    69         android:layout_height="wrap_content"
    70         android:layout_weight="0.31"
    71         android:orientation="horizontal" >
    72 
    73         <Button
    74             android:id="@+id/button1"
    75             android:layout_width="155dp"
    76             android:layout_height="wrap_content"
    77             android:text="@string/main_name4" />
    78 
    79         <Button
    80             android:id="@+id/button2"
    81             android:layout_width="164dp"
    82             android:layout_height="wrap_content"
    83             android:text="@string/main_name5" />
    84     </LinearLayout>
    85 
    86     <TextView
    87         android:layout_width="match_parent"
    88         android:layout_height="50dp"
    89         android:background="#EECFA1" />
    90 
    91 </LinearLayout>

    2,Register_activity 的XML配置

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:background="@drawable/b1"
     6     android:orientation="vertical"
     7     tools:context="${relativePackage}.${activityClass}" >
     8 
     9     <TextView
    10         android:layout_width="match_parent"
    11         android:layout_height="15dp"
    12         android:background="#56a692"
    13         android:gravity="bottom"
    14         android:text="@string/register_name"
    15         android:textColor="#fff"
    16         android:textSize="12sp" />
    17 
    18     <TextView
    19         android:layout_width="match_parent"
    20         android:layout_height="wrap_content"
    21         android:gravity="center"
    22         android:text="@string/register_name6"
    23         android:textColor="#B22222"
    24         android:textSize="20sp"
    25         android:textStyle="italic" />
    26 
    27     <TextView
    28         android:layout_width="wrap_content"
    29         android:layout_height="100dp"
    30         android:gravity="bottom" />
    31 
    32     <TextView
    33         android:layout_width="match_parent"
    34         android:layout_height="wrap_content"
    35         android:background="#B2DFEE"
    36         android:gravity="bottom"
    37         android:text="@string/register_name7"
    38         android:textStyle="italic" />
    39 
    40     <EditText
    41         android:id="@+id/etid"
    42         android:layout_width="match_parent"
    43         android:layout_height="wrap_content"
    44         android:ems="10"
    45         android:hint="@string/register_name2" >
    46 
    47         <requestFocus />
    48     </EditText>
    49 
    50     <TextView
    51         android:layout_width="match_parent"
    52         android:layout_height="wrap_content"
    53         android:gravity="center"
    54         android:textColor="#B22222"
    55         android:textSize="20sp"
    56         android:textStyle="italic" />
    57 
    58     <EditText
    59         android:id="@+id/etname"
    60         android:layout_width="match_parent"
    61         android:layout_height="wrap_content"
    62         android:ems="10"
    63         android:hint="@string/register_name3" />
    64 
    65     <TextView
    66         android:layout_width="match_parent"
    67         android:layout_height="wrap_content"
    68         android:background="#B2DFEE"
    69         android:gravity="center"
    70         android:textColor="#B22222"
    71         android:textSize="20sp"
    72         android:textStyle="italic" />
    73 
    74     <LinearLayout
    75         android:layout_width="wrap_content"
    76         android:layout_height="0dp"
    77         android:layout_weight="0.84"
    78         android:orientation="horizontal" >
    79 
    80         <Button
    81             android:id="@+id/btn_qu"
    82             android:layout_width="155dp"
    83             android:layout_height="wrap_content"
    84             android:text="@string/register_name4" />
    85 
    86         <Button
    87             android:id="@+id/btn_sure"
    88             android:layout_width="163dp"
    89             android:layout_height="wrap_content"
    90             android:text="@string/register_name5" />
    91     </LinearLayout>
    92 
    93     <TextView
    94         android:layout_width="match_parent"
    95         android:layout_height="50dp"
    96         android:background="#EECFA1" />
    97 
    98 </LinearLayout>

     

    3,SQLite的配置创建数据库和表

    例如:新建类sqliteopenhelper

    package com.example.dbtest;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    //新建类Sqliteopenhelper 继承于SQLiteOpenHelper
    public class Sqliteopenhelper extends SQLiteOpenHelper {
    
                       //数据库名:
        private static final String DBNAME="test.db";
                     //表名
        private static final String TABLENAME="student";
        private static final String GOODSNAME="goods";
                     //版本号:具体我也不知道是什么,照着写就行了
        private static final int TESTVERSION=1;
                    
        public Sqliteopenhelper(Context context) {
            super(context, DBNAME, null, TESTVERSION);
            // TODO Auto-generated constructor stub
        }
    
                      //初始化,创建表
        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
       String sql1="create table"+" "+TABLENAME+"(id varchar,name varchar)";
    String sql2="create table"+" "+GOODSNAME+"(LF varchar,name varchar,miaoshu varchar)";
              db.execSQL(sql1);
              db.execSQL(sql2);
              
        }
                     //失败后删除,重新创建
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
               if(newVersion>oldVersion)
               {
                   String sql1="drop table if exists"+TABLENAME;
                   String sql2="drop table if exists"+GOODSNAME;
                   db.execSQL(sql1);
                   db.execSQL(sql2);
                   this.onCreate(db);
               }
        }
    
    }

    4,Main_activity.java 调用并且实现验证数据库内信息

      1 package com.example.dbtest;
      2 
      3 import android.app.Activity;
      4 import android.app.AlertDialog;
      5 import android.app.AlertDialog.Builder;
      6 import android.content.DialogInterface;
      7 import android.content.Intent;
      8 import android.database.Cursor;
      9 import android.database.sqlite.SQLiteDatabase;
     10 import android.database.sqlite.SQLiteException;
     11 import android.database.sqlite.SQLiteOpenHelper;
     12 import android.os.Bundle;
     13 import android.view.View;
     14 import android.view.View.OnClickListener;
     15 import android.widget.Button;
     16 import android.widget.EditText;
     17 import android.widget.Toast;
     18 
     19 public class MainActivity extends Activity {
     20 
     21     private EditText et_id, et_name;
     22     private Button btn_test, btn_local;
     23                   //1,SQLite的声明
     24     SQLiteOpenHelper helper;
     25     private String _id;
     26     private String _name;
     27 
     28     @Override
     29     protected void onCreate(Bundle savedInstanceState) {
     30         super.onCreate(savedInstanceState);
     31         setContentView(R.layout.activity_main);
     32         // 2,数据库的创建,及调用
     33         helper = new Sqliteopenhelper(this);
     34         helper.getWritableDatabase();
     35 
     36         et_id = (EditText) findViewById(R.id.editText1);
     37         et_name = (EditText) findViewById(R.id.editText2);
     38         btn_test = (Button) findViewById(R.id.button1);
     39         btn_local = (Button) findViewById(R.id.button2);
     40 
     41         btn_test.setOnClickListener(new testListener());
     42         btn_local.setOnClickListener(new localListener());
     43 
     44     }
     45 
     46     class testListener implements OnClickListener {
     47 
     48         @Override
     49         public void onClick(View v) {
     50             // TODO Auto-generated method stub
     51     Intent intent = new Intent(MainActivity.this, Register.class);
     52             startActivity(intent);
     53         }
     54 
     55     }
     56          //登陆按钮
     57 
     58     class localListener implements OnClickListener {
     59 
     60         @Override
     61         public void onClick(View v) {
     62             // TODO Auto-generated method stub
     63             _id = et_id.getText().toString();
     64             _name = et_name.getText().toString();
     65             if (_name.equals("") || _id.equals("")) {         Toast.makeText(getApplicationContext(), "请输入账号密     码!",Toast.LENGTH_SHORT).show();
     66             } else {
     67                 sureuser(_id, _name);
     68             }
     69         }
     70 
     71     }
     72 
     73     private void sureuser(String userid, String username) {
     74                  //3,数据库的操作,查询
     75     SQLiteDatabase sdb = helper.getReadableDatabase();
     76         try {
     77     String sql = "select * from student where id=? and name=?";
     78             // 实现遍历id和name
     79     Cursor cursor = sdb.rawQuery(sql, new String[] { _id, _name });
     80             if (cursor.getCount() > 0) {
     81     Intent intent = new Intent(MainActivity.this, User.class);
     82         Bundle bundle = new Bundle();
     83             bundle.putString("name", _name);
     84                 intent.putExtras(bundle);
     85                 startActivity(intent);
     86             } else {
     87         Toast.makeText(getApplicationContext(), "登录失败",
     88                         Toast.LENGTH_SHORT).show();
     89             }
     90             cursor.close();
     91             sdb.close();
     92         } catch (SQLiteException e) {
     93     oast.makeText(getApplicationContext(), "亲,请注册!",
     94                     Toast.LENGTH_SHORT).show();
     95         }
     96     }
     97 
     98 
     99         
    100     
    101 }


    5,Register_activity.java

    package com.example.dbtest;
    
    import android.app.Activity;
    import android.content.ContentValues;
    import android.content.Intent;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteException;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class Register extends Activity {
    
        private EditText etid,etname;
        private Button btn_qu,btn_sure;
        
        SQLiteOpenHelper helper;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_register);
             helper=new Sqliteopenhelper(this);
             helper.getWritableDatabase();
             etid=(EditText)findViewById(R.id.etid);
             etname=(EditText)findViewById(R.id.etname);
             btn_qu=(Button)findViewById(R.id.btn_qu);
             btn_sure=(Button)findViewById(R.id.btn_sure);
             btn_sure.setOnClickListener(new sureListener());
             btn_qu.setOnClickListener(new quListener());
             
        }
        
        class sureListener implements OnClickListener{
    
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                try{
            SQLiteDatabase sdb=helper.getWritableDatabase();
                ContentValues values=new ContentValues();
                values.put("id",etid.getText().toString());
                values.put("name",etname.getText().toString());
                sdb.insert("student",null, values);
    Toast.makeText(getApplicationContext(), "注册成功", Toast.LENGTH_SHORT).show();
                Intent intent=new Intent(Register.this,User.class);
                Bundle bundle=new Bundle();
                bundle.putString("name",etname.getText().toString());
                intent.putExtras(bundle);
                startActivity(intent);;
                }
                catch(SQLiteException e)
                {Toast.makeText(getApplicationContext(), "注册失败", Toast.LENGTH_SHORT).show();}
            }
        }
        
        class quListener implements OnClickListener{
    
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
        Intent intent=new Intent(Register.this,MainActivity.class);
                startActivity(intent);
            }
            
        }
        
    }

    6,效果图所示

    bubuko.com,布布扣bubuko.com,布布扣

    展开全文
  • Android:SQLite和AlertDialog

    2021-06-04 21:35:56
    这篇记录一下Android自带了的数据库——SQLite和对话框——AlertDialog。(其实就是一个课后作业,必须得用SQLite????)。要求是: 使用SQLite创建一个数据库。 两张表,一张用户表user,存放用户信息;一张行程表...

    这篇记录一下Android自带了的数据库——SQLite和对话框——AlertDialog。(其实就是一个课后作业,必须得用SQLite😐)。要求是:

    • 使用SQLite创建一个数据库。
    • 两张表,一张用户表user,存放用户信息;一张行程表,村放用户的行程信息。
    • 初始插入两个用户,每个用户两个行程。
    • 尽量实现增删查改操作。

    看起来真简单,但是过段时间我肯定又忘了我写的啥💀。而且以前写代码习惯不好,注释很少写,还喜欢乱起名字,借着这个整理、记录的机会改改,多打点注释,改改起名的习惯😑。
    贴代码了。

    最终效果

    先看看最终效果。


    目录结构

    继承SQLiteOpenHelper类

    • myHelper.java
    public class myHelper extends SQLiteOpenHelper {
        //实现父类的构造方法,context:当前上下文环境;name:数据库名称;factory:游标;version:版本号,这里指你的数据库版本号,不是SQLite的版本号
        public myHelper(@Nullable Context context) {
            super(context, "text.db", null, 1);
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            String create1 = "create table user(uid INTEGER PRIMARY KEY AUTOINCREMENT,uname varchar(20),upsd int)";
            String create2 = "create table route(rid INTEGER PRIMARY KEY AUTOINCREMENT,uid int,rname varchar(20),rrouting text,rtime date,foreign key(uid) references user(uid))";
            //创建用户数表user
            db.execSQL(create1);
            //创建行程表route
            db.execSQL(create2);
            initData(db);
        }
        //表初始数据
        public void initData(SQLiteDatabase database){
            //用ContentValues类的键值对来插入数据,两种方法都试试:)
            ContentValues values = new ContentValues();
            //键值对的键必须是表中的属性名
            values.put("uname","阿涛");
            values.put("upsd",123456);
            database.insert("user",null,values);
            values.clear();
            //用SQL语句插入数据,我还是喜欢用这种方法:)
            database.execSQL("insert into user(uid,uname,upsd) values (null,'阿叶',654321)");
            database.execSQL("insert into route(rid,uid,rname,rrouting,rtime) values (null,'1','上课','家->学校->教室','2021-05-04')");
            database.execSQL("insert into route(rid,uid,rname,rrouting,rtime) values (null,'1','回家','教室->地铁->家','2021-05-04')");
            database.execSQL("insert into route(rid,uid,rname,rrouting,rtime) values (null,'2','上课','寝室->教室','2021-05-05')");
            database.execSQL("insert into route(rid,uid,rname,rrouting,rtime) values (null,'2','回寝室','教室->寝室','2021-05-05')");
            //看看数据插入没有
            print(database);
        }
        //查询route表数据
        private void print(SQLiteDatabase db){
            String str = "";
            //用SQL语句查询route所有数据项,返回一个游标对象
            Cursor cursor = db.rawQuery("select * from route",null);
            //只要非空就继续查询下一个数据项
            while (cursor.moveToNext()){
                str += (cursor.getString(0)+"、 "+cursor.getString(1)+"  "+
                        cursor.getString(2)+"  "+cursor.getString(3))+"\r\n";
            }
            //logcat打印
            Log.i("yyg",str);
        }
    
        //版本升级
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
        }
    }
    
    

    操作管理Manager类

    • DBManager
    public class DBManager {
        private myHelper helper;
        private SQLiteDatabase database;
    
        public DBManager(Context context){
            helper = new myHelper(context);     //获取到helper对象,此方法初次调用会创建数据库
            database = helper.getWritableDatabase();        //得到可读写数据库对象
        }
    
        public int queryyon(String name,String password){
            Cursor cursor = database.rawQuery("select uname,upsd from user " +
                    "where uname=? AND upsd=?",new String[]{name,password});        //用SQL语句查询表里是否有传入的用户名和密码,返回一个游标对象
            return cursor.getCount();       //方法返回查询结果,如果存在返回1,不存在返回0
        }
    
        public Cursor query(String name){
            Cursor cursor = database.rawQuery("select rid,rname,rrouting,rtime from user,route " +
                    "where user.uname=? AND user.uid=route.uid order by date(rtime)",new String[]{name});       //同上,rawQuery方法的SQL语句的参数用new String[]{}传入
            return cursor;
        }
    
        public void delete(String name){
            database.delete("route","rname=?",new String[]{name});      //删除操作用SQLite的delete方法更方便点
        }
    
        public void update(String uname, String name, String ing, String time, String bname, String bing, String btime){
            Cursor cursor = database.rawQuery("select uid from user where uname=?",new String[]{uname});        //查询该用户对应的用户ID
            cursor.moveToPosition(0);       //必须将游标移动至初始位,因为在上述查询中游标已经移动至最后,否则会导致该页面直接崩溃
            int uid = cursor.getInt(cursor.getColumnIndex("uid"));      //获取到ID值
            database.execSQL("update route set rname=?,rrouting=?,rtime=? " +
                    "where uid=? and rname=? and rrouting=? and rtime=?",new Object[]{name,ing,time,uid,bname,bing,btime});     //使用execSQL方法需要使用new Object[]{}传入参数
            cursor.close();
        }
    
        public void insert(String uname, String name, String ing, String time){
            Cursor cs = database.rawQuery("select uid from user where uname=?",new String[]{uname});
            cs.moveToPosition(0);
            int uid = cs.getInt(cs.getColumnIndex("uid"));
            database.execSQL("insert into route(rid,uid,rname,rrouting,rtime) values (null,?,?,?,?)",new Object[]{uid,name,ing,time});      //同上
            cs.close();
        }
    
        public void closeDB(){
            database.close();
        }       //关闭数据库连接
    }
    

    登录界面

    司空见惯的登陆界面了……

    • activity_main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
        android:orientation="vertical"
        android:padding="10dp">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="150dp">
    
            <TextView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:text="用户名:"
                android:textSize="20sp"
                android:gravity="center"/>
    
            <EditText
                android:id="@+id/username"
                android:layout_width="0dp"
                android:layout_height="45dp"
                android:layout_weight="8"
                android:background="@drawable/bg_circle"
                android:hint="点击输入用户名"
                android:paddingLeft="5dp"/>
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="20dp">
    
            <TextView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:text="密码:"
                android:textSize="20sp"
                android:gravity="center"/>
    
            <EditText
                android:id="@+id/password"
                android:layout_width="0dp"
                android:layout_height="45dp"
                android:layout_weight="8"
                android:background="@drawable/bg_circle"
                android:hint="点击输入密码"
                android:paddingLeft="5dp"/>
    
        </LinearLayout>
    
            <Button
                android:id="@+id/login"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="@drawable/bg_buttonchange"
                android:text="登录"
                android:textSize="25sp"
                android:layout_gravity="center"
                android:layout_marginTop="40dp"/>
    
    </LinearLayout>
    
    • MainActivity.java
    public class MainActivity extends AppCompatActivity {
    
        private EditText username,password;
        private Button login;
        private DBManager manager;
        private String TAG = "MainActivity";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            username = findViewById(R.id.username);
            password = findViewById(R.id.password);
            login = findViewById(R.id.login);
    
            manager = new DBManager(this);      //实例化manager对象,然后调用公有方法操作数据库
    
            login.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String user = username.getText().toString();
                    String psd = password.getText().toString();
    
                    //查询该用户名和密码是否存在该数据库的user表里
                    if (manager.queryyon(user,psd) != 0){
                        Toast.makeText(getApplicationContext(),"登陆成功!",Toast.LENGTH_SHORT).show();
    
                        Intent intent = new Intent(MainActivity.this,LoginActivity.class);
                        intent.putExtra("username",user);       //把用户名传给下个activity
                        startActivity(intent);
                    }
                    else
                        Toast.makeText(getApplicationContext(),"登录失败!\r\n请检查您的用户名或密码!",Toast.LENGTH_SHORT).show();
                }
            });
    
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            manager.closeDB();
        }
    }
    

    新增行程对话框界面

    • addline.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:text="新增行程"
            android:textColor="#ffffff"
            android:textSize="20sp"
            android:background="#53CC66"
            android:gravity="center_vertical"/>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="10dp">
    
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:textSize="18sp"
                android:text="行程名称"/>
    
            <EditText
                android:id="@+id/routename"
                android:layout_width="0dp"
                android:layout_height="40dp"
                android:layout_weight="8"
                android:background="@drawable/bg_circle"
                android:hint="点击输入行程名称"
                android:paddingLeft="5dp"/>
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="10dp">
    
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:textSize="18sp"
                android:text="行程内容"/>
    
            <EditText
                android:id="@+id/routing"
                android:layout_width="0dp"
                android:layout_height="40dp"
                android:layout_weight="8"
                android:background="@drawable/bg_circle"
                android:hint="点击输入行程内容"
                android:paddingLeft="5dp"/>
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="10dp">
    
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:textSize="18sp"
                android:text="行程时间"/>
    
            <EditText
                android:id="@+id/routetime"
                android:layout_width="0dp"
                android:layout_height="40dp"
                android:layout_weight="8"
                android:background="@drawable/bg_circle"
                android:hint="点击输入行程时间"
                android:paddingLeft="5dp"/>
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:orientation="horizontal">
    
            <Button
                android:id="@+id/btn_add"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/bg_buttonchange"
                android:text="添加"
                android:textColor="#000000"
                android:textSize="20sp" />
    
            <Button
                android:id="@+id/btn_close"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/bg_buttonchange"
                android:text="关闭"
                android:textColor="#000000"
                android:textSize="20sp" />
    
        </LinearLayout>
    
    </LinearLayout>
    

    修改行程对话框界面

    • change.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:text="修改行程"
            android:textColor="#ffffff"
            android:textSize="20sp"
            android:background="#9C27B0"
            android:gravity="center_vertical"/>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="10dp">
    
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:textSize="18sp"
                android:text="行程名称"/>
    
            <EditText
                android:id="@+id/routename"
                android:layout_width="0dp"
                android:layout_height="40dp"
                android:layout_weight="8"
                android:background="@drawable/bg_circle"
                android:hint="点击输入修改后的行程名称"
                android:paddingLeft="5dp"/>
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="10dp">
    
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:textSize="18sp"
                android:text="行程内容"/>
    
            <EditText
                android:id="@+id/routing"
                android:layout_width="0dp"
                android:layout_height="40dp"
                android:layout_weight="8"
                android:background="@drawable/bg_circle"
                android:hint="点击输入修改后的行程内容"
                android:paddingLeft="5dp"/>
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="10dp">
    
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:textSize="18sp"
                android:text="行程时间"/>
    
            <EditText
                android:id="@+id/routetime"
                android:layout_width="0dp"
                android:layout_height="40dp"
                android:layout_weight="8"
                android:background="@drawable/bg_circle"
                android:hint="点击输入修改后的行程时间"
                android:paddingLeft="5dp"/>
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:orientation="horizontal">
    
            <Button
                android:id="@+id/btn_change"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/bg_buttonchange"
                android:text="修改"
                android:textColor="#000000"
                android:textSize="20sp" />
    
            <Button
                android:id="@+id/btn_close_3"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/bg_buttonchange"
                android:text="关闭"
                android:textColor="#000000"
                android:textSize="20sp" />
    
        </LinearLayout>
    
    </LinearLayout>
    

    行程展示主界面

    • activity_login.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".LoginActivity"
        android:orientation="vertical"
        android:padding="10dp">
    
        <Button
            android:id="@+id/addline"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:text="添加行程"
            android:textSize="25sp"
            android:textColor="#000000"
            android:background="@drawable/bg_btn"/>
    
        <ListView
            android:id="@+id/showlist"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:divider="#84CDED"
            android:dividerHeight="2dp"
            />
    
    </LinearLayout>
    
    • LoginActivity.java
    public class LoginActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemClickListener {
        private DBManager manager;
        private ListView showroute;
        private Button addline;
        private EditText routename,routing,routetime,croutename,crouting,croutetime;
        private View view,view3;
        private AlertDialog dialog,dialog2,dialog3;
        private AlertDialog.Builder builder,builder2,builder3;
        private List<String> list;
        private String TAG = "LoginActivity";
        private String username;
        private String[] split;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
    
            manager = new DBManager(this);
    
            showroute = findViewById(R.id.showlist);
            addline = findViewById(R.id.addline);
            showroute.setOnItemClickListener(this);
            addline.setOnClickListener(this);
    
            //添加行程对话框
            builder = new AlertDialog.Builder(this);
            final LayoutInflater inflater = LoginActivity.this.getLayoutInflater();
            view = inflater.inflate(R.layout.addline,null,false);
            builder.setView(view);
            builder.setCancelable(false);
            dialog = builder.create();
    
            //修改行程对话框
            builder3 = new AlertDialog.Builder(this);
            final LayoutInflater inflater3 = LoginActivity.this.getLayoutInflater();
            view3 = inflater3.inflate(R.layout.change,null,false);
            builder3.setView(view3);
            builder3.setCancelable(false);
            dialog3 = builder3.create();
    
    
            //添加行程对话框中的控件
            view.findViewById(R.id.btn_add).setOnClickListener(this);
            view.findViewById(R.id.btn_close).setOnClickListener(this);
            routename = view.findViewById(R.id.routename);
            routing = view.findViewById(R.id.routing);
            routetime = view.findViewById(R.id.routetime);
    
            //修改行程对话框中的控件
            view3.findViewById(R.id.btn_change).setOnClickListener(this);
            view3.findViewById(R.id.btn_close_3).setOnClickListener(this);
            croutename = view3.findViewById(R.id.routename);
            crouting = view3.findViewById(R.id.routing);
            croutetime = view3.findViewById(R.id.routetime);
    
            //获取上个activity传入的用户名
            Intent intent = getIntent();
            username = intent.getStringExtra("username");
    
            queryflash();
    
        }
    
        private void queryflash(){      //查询数据库并刷新页面,显示最新的用户行程
            Cursor cursor = manager.query(username);
            list = new ArrayList<>();
            while (cursor.moveToNext()){
                list.add(cursor.getString(0)+"、 "+cursor.getString(1)+"  "+
                        cursor.getString(2)+"  "+cursor.getString(3));
            }
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);     //更新适配器
            showroute.setAdapter(adapter);      //加载更新后的适配器到ListView中
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.addline:
                    dialog.show();      //显示对添加行程对话框
                    break;
                case R.id.btn_add:
                    String name = routename.getText().toString();
                    String ing = routing.getText().toString();
                    String time = routetime.getText().toString();
                    if (name.equals("") || ing.equals("") || time.equals("")){
                        Toast.makeText(getApplicationContext(),"输入不能为空!",Toast.LENGTH_SHORT).show();
                    }
                    else{
                        manager.insert(username,name,ing,time);     //调用insert方法插入数据
                        Toast.makeText(getApplicationContext(),"行程插入成功!",Toast.LENGTH_SHORT).show();
                        queryflash();       //插入完后立即更新页面
                        dialog.dismiss();       //并将添加行程对话框关闭
                    }
                    break;
                case R.id.btn_close:
                    dialog.dismiss();
                    break;
                case R.id.btn_change:
                    String cname = croutename.getText().toString();
                    String cing = crouting.getText().toString();
                    String ctime = croutetime.getText().toString();
                    if (cname.equals("") || cing.equals("") || ctime.equals("")){
                        Toast.makeText(getApplicationContext(),"输入不能为空!",Toast.LENGTH_SHORT).show();
                    }
                    else{
                        manager.update(username,cname,cing,ctime,split[1],split[2],split[3]);       //通过当前ListView子项的数据和输入的数据来更新表中数据
                        Toast.makeText(getApplicationContext(),"行程修改成功!",Toast.LENGTH_SHORT).show();
                        queryflash();
                        dialog3.dismiss();
                    }
                    break;
                case R.id.btn_close_3:
                    dialog3.dismiss();
                    break;
                default:
                    break;
            }
        }
    
        //点击ListView子项后调用的方法
        @Override
        public void onItemClick(final AdapterView<?> parent, final View view, final int position, long id) {
            final String str = String.valueOf(showroute.getItemAtPosition(position));       //获取到当前点击的ListView子项中的内容。以String方式保存
            split = str.split("\\s+");      //正则表达式,以空格分割该字符串,这会分割出当前点击行程的id、名称、内容、时间四项数据
            dialog2 = null;
            builder2 = new AlertDialog.Builder(this);
            builder2.setCancelable(false);      //设置该对话框无法通过点击周围区域关闭
            dialog2 = builder2.setIcon(R.drawable.route)        //设置左上角图标,可以去网上随便找一张png小图标放在res的目录下
                    .setTitle("系统提示:")      //对话框标题
                    .setMessage("请选择要进行的操作")        //对话框中间的信息提示
                    .setNegativeButton("删除", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {        //对话框右边部分的第一个按钮
                            manager.delete(split[1]);       //从被分割出的数组中取出行程名成删除
                            queryflash();       //刷新界面
                            Toast.makeText(getApplicationContext(),"删除了行程:"+str,Toast.LENGTH_LONG).show();
                        }
                    })
                    .setPositiveButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {        //对话框右边部分的第二个按钮
                            Toast.makeText(getApplicationContext(),"点击取消!",Toast.LENGTH_SHORT).show();
                        }
                    })
                    .setNeutralButton("修改", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(final DialogInterface dialog, int which) {      //对话框左边部分的按钮
                            dialog2.dismiss();      //取消显示当前对话框
                            croutename.setText(split[1]);       //将被分割数组中的行程名放入行程修改对话框中的行程名,可以基于以往的行程修改
                            crouting.setText(split[2]);     //同上,显示行程内容
                            croutetime.setText(split[3]);       //同上,显示行程时间
                            dialog3.show();     //弹出行程修改对话框
                            Toast.makeText(getApplicationContext(),"点击修改!",Toast.LENGTH_SHORT).show();
                        }
                    }).create();
            dialog2.show();     //显示该对话框
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            manager.closeDB();      //在该页面被销毁时同时关闭数据库连接
        }
    }
    

    其中的按键的背景样式代码在这里Android内部存储:SharedPreferences(存储xml文件)、File(存储INI文件)、OrmLite(数据库)贴过,都是一样的。

    总结一下

    显然,注释打的挺多,起名还是没改🙃。以后注意起名规范!以后注意起名规范!以后注意起名规范!妄图记住

    展开全文
  • android开发SQlite最简单总结

    千次阅读 2017-02-10 23:08:40
    最近这几天一直在研究androidsqlite,由于前期有SQL Serevice的基础所有理解起来比较容易,但还是发现很多使用上的问题!!!! 首先介绍一下SQLitesqlite是一个小的数据库,操作简单,不用登陆,支持标准的sql...
  • Login 通过SQlite数据库实现一个基本的用户登陆注册系统,其中管理员还可以在已注册用户列表中进行添加删除功能。项目运用sqlcipher开源项目对sqlite中用户信息进行加密处理,保证了用户信息的隐私。
  • AndroidSqlite的使用

    2018-07-07 10:54:36
    最近公司在开发一个扫码的APP,在一个做保存单据的时候使用到了sqlite的功能,android sqlite安卓内置数据库,可以很方便的存储我们想要保存的数据。话不多说,开始上示例。1.要写一个类来继承SQLiteOpenHelper...
  • android使用Sqlite做本地存储非常常见(打个比方就像是浏览器要做本地存储使用LocalStorage,貌似不是很恰当,大概就是这个意思)。 SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL ...
  • 首先,说一下SQLite的概念: ...目前在Android 系统中集成的是 SQLite3 版本 ,SQLite 不支持静态数据类型 , 而是使用列关系 。 这意味着它的数据类型不具有表列属性 , 而具有数据本身的属性 。 当某个值插入数据库时
  • Android利用sqlite制作简单登录界面 最近学了一波android,自己尝试做了一波登录界面,分享出来,请求各位大佬不吝斧正 简单需求如下: 界面展示: 核心代码段: 帮助类MyDatabaseHelper.class: package ...
  • Android之利用SQLite数据库实现登陆和注册 [日期:2011-12-27] 来源:Linux社区 作者:rhljiayou 首先,说一下SQLite的概念: SQLite 是一个开源的嵌入式关系数据库,它...
  • 虽然比较简单,但是实现了 界面登陆、增删改查等功能。有对android一些基本控件的应用: 比如:1.使用listview 控件来显示SQlite 数据库中的记录,并添加其上的长按时间响应(增删改) 2.使用下拉框控件 spinner...
  • ①该资源中片段代码截取于网上,特别感谢网上的大神 ②该Demo是一个android的简单注册登录,包括: ∷SQLite的注册数据保存 ...∷头像的上传与SQLite数据库保存显示 ∷登录记住密码功能(SharedPreferences保存显示)
  • import android.database.sqlite.SQLiteOpenHelper; public class DbHelper extends SQLiteOpenHelper {  private final static String NAME = "user.db";  private final static int VERSION ...
  • 实现Android SQLite数据库登录的小DEMO,包括注册 和登录
  • 看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public class MySqliteHelper extends...
  • Android在运行时集成了SQLite , 所以每个Android应用程序都可以使用SQLite数据库。我们通过SQLiteDatabase这个类的对象操作SQLite数据库,而且不需要身份验证。数据库存放的位置:data/data//databases/,查看...
  • 1,Main_activity的xmL配置 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" ... 3 android:layout_width="match_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,788
精华内容 1,515
关键字:

安卓登录sqlite