Android中SQLite的使用(简单数据存入与读取)

一,概要

先看demo,最后又讲解。

二,小demo
     效果图:

          

     实现:

               视图层:

        testsqlite.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn_w"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="155dp"
        android:text="写入" />

    <Button
        android:id="@+id/btn_r"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignStart="@+id/btn_w"
        android:layout_centerVertical="true"
        android:text="查询" />

</RelativeLayout>

write.xml:

        

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/et_name"
        android:gravity="center"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:layout_marginTop="100dp"
        android:hint="姓名"
        android:inputType="textPersonName" />

<RadioGroup
    android:layout_marginTop="30dp"
    android:id="@+id/check_group"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="horizontal"
    >

    <RadioButton
        android:id="@+id/rb_male"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="男"
      />

    <RadioButton
        android:id="@+id/rd_female"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="女"
    />
</RadioGroup>

    <Button
        android:id="@+id/btn_write"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="48dp"
        android:text="写入数据库"
        />
</LinearLayout>
read.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">
    <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="性别"
            android:layout_weight="1"/>

    </LinearLayout>
    <ListView
        android:id="@+id/read_listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </ListView>

</LinearLayout>


item_sql.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">
    <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_sex"
        android:textAlignment="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
</LinearLayout>

    逻辑层:

        TestSQLite.java:

package com.maeeage.administrator.androidlearn;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Button;

import com.maeeage.administrator.androidlearn.testSql.AtyRead;
import com.maeeage.administrator.androidlearn.testSql.AtyWrite;

/**
 * Created by Administrator on 2018/2/2/002.
 */

public class TestSQlite extends Activity {
    Button btn_w,btn_r;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testsqlite);
        findById();
        inti();

    }

    private void inti() {

        btn_w.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                write();
            }
        });

        btn_r.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                read();
            }
        });
    }

    private void findById() {
        btn_r=(Button)findViewById(R.id.btn_r);
        btn_w=(Button)findViewById(R.id.btn_w);
    }

    //bnt_w的onclick
    void write(){
        Intent intent=new Intent(TestSQlite.this, AtyWrite.class);
        startActivity(intent);
    }
    //btn_r的哦click
    void read(){
        Intent intent=new Intent(TestSQlite.this, AtyRead.class);
        startActivity(intent);
    }

}
        AtyWrite.java:

package com.maeeage.administrator.androidlearn.testSql;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.annotation.Nullable;
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 com.maeeage.administrator.androidlearn.R;

/**
 * Created by Administrator on 2018/2/2/002.
 */

public class AtyWrite extends Activity {
    EditText username;
    RadioButton male,female;
    Button btn_write;

    RadioGroup radioGroup;
    SQLiteDatabase db;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.write);
        findById();
        init();
    }

    private void init() {
        //每个程序都要自己数据库,默认情况下各自互不干扰
        //创建一个数据库,并且打开;
        //通过下面这个方法,创建,如果存在就打开,不存在就创建并打开
        db=  openOrCreateDatabase("user.db",MODE_PRIVATE,null);
        db.execSQL("create table if not exists tb_user(_id integer primary key autoincrement,name text not null,sex text not null)");
        btn_write.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                toSql();
            }
        });
    }

    private void findById() {
        username=(EditText)findViewById(R.id.et_name);
        male=(RadioButton)findViewById(R.id.rb_male);
        female=(RadioButton)findViewById(R.id.rd_female);
        btn_write=(Button)findViewById(R.id.btn_write);
        radioGroup=(RadioGroup)findViewById(R.id.check_group);
    }

    //btn_write的onclick事件
   void  toSql(){

       String name=username.getText().toString();
       String sex;
       if(male.isChecked())
        sex="男";
       else
           sex="女";
       Toast.makeText(AtyWrite.this,name+"  "+sex,Toast.LENGTH_SHORT);
       String sql="insert into tb_user(name,sex) values('"+name+"','"+sex+"')";
       Toast.makeText(AtyWrite.this,name+"  "+sex,Toast.LENGTH_SHORT).show();
       db.execSQL(sql);

    }
}

AtyRead.java:

package com.maeeage.administrator.androidlearn.testSql;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import com.maeeage.administrator.androidlearn.R;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2018/2/2/002.
 */

public class AtyRead 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.read);
        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","sex"},new int[]{R.id.tv_id,R.id.tv_name,R.id.tv_sex});
        listView.setAdapter(adapter);
    }

    public List<Map<String,String>> getData() {
        if (isTableExist("tb_user")) {
            Cursor c = db.rawQuery("select * from tb_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));
                    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;
    }
}


总结:

SQLite的讲解,用真机运行程序,想查看数据库文件,这是教程







以下是一个简单的示例代码,用于从SQLite数据库读取数据并在ListView显示: 1. 创建一个数据库帮助类 DBHelper.java: ```java public class DBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "mydatabase.db"; private static final int DATABASE_VERSION = 1; private static final String TABLE_NAME = "mytable"; private static final String COLUMN_ID = "id"; private static final String COLUMN_NAME = "name"; public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String query = "CREATE TABLE " + TABLE_NAME + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT);"; db.execSQL(query); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } public void insertData(String name) { SQLiteDatabase db = getWritableDatabase(); ContentValues values = new ContentValues(); values.put(COLUMN_NAME, name); db.insert(TABLE_NAME, null, values); db.close(); } public ArrayList<String> getData() { ArrayList<String> dataList = new ArrayList<>(); SQLiteDatabase db = getReadableDatabase(); String query = "SELECT * FROM " + TABLE_NAME; Cursor cursor = db.rawQuery(query, null); if (cursor.moveToFirst()) { do { String name = cursor.getString(cursor.getColumnIndex(COLUMN_NAME)); dataList.add(name); } while (cursor.moveToNext()); } cursor.close(); db.close(); return dataList; } } ``` 2. 在Activity使用DBHelper类来读取数据并在ListView显示: ```java public class MainActivity extends AppCompatActivity { private ListView listView; private ArrayList<String> dataList; private ArrayAdapter<String> adapter; private DBHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = findViewById(R.id.list_view); dataList = new ArrayList<>(); adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dataList); listView.setAdapter(adapter); dbHelper = new DBHelper(this); dbHelper.insertData("John"); dbHelper.insertData("Mary"); dbHelper.insertData("Tom"); ArrayList<String> list = dbHelper.getData(); dataList.clear(); dataList.addAll(list); adapter.notifyDataSetChanged(); } } ``` 注意:需要在AndroidManifest.xml文件添加以下权限: ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值