SQLite,是一款轻型的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
它无需其他依赖,完全可以自给自足,所以运用面很广泛,我这里只是给出了一个小例子。
实现:
1、创建一个 SQLite 数据库,创建一个 student 数据表
2、获取数据将数据传入数据库 student 表中
3、查询数据,将数据通过 ListView 将数据展示出来
效果:
获取数据存入 SQLite
查询数据展示
实现详情:
1、创建一个 SQLite 数据库,创建一个 student 数据表
创建一个 SQLite 类,在这里创建数据库、数据表、还有数据插入、查询方法
import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import java.util.Vector; /** * Created by Administrator on 2018/3/22 0022. * 在这里创建一个 SQLite 数据库 */ public class MySQLite extends SQLiteOpenHelper { private static final String DB_NAME = "School.db"; //数据库名称 private static final int DB_VERSION = 1; //版本 public MySQLite(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { //创建一个 student 数据表 (id、name、sex、age) String student = "create table student(" + "id integer primary key autoincrement," + "name varchar2 not null," + "sex varchar2 not null," + "age integer not null)"; db.execSQL(student); } @Override public void onUpgrade(SQLiteDatabase db, int i, int i1) { } //插入数据方法 public void insertStudent(StudentModel sm, SQLiteDatabase db){ //实例化常量值 ContentValues contentValues = new ContentValues(); contentValues.put("name", sm.getName()); contentValues.put("sex", sm.getSex()); contentValues.put("age", sm.getAge()); Log.i("name", sm.getName()); Log.i("sex", sm.getSex()); Log.i("age", ""+sm.getAge()); db.insert("student", null, contentValues); } //查询数据方法 public Vector<StudentModel> querys(SQLiteDatabase db){ //定义一个 Vector<StudentModel> Vector<StudentModel> vector = new Vector<StudentModel>(); StudentModel sm = null; //获取查询光标(用 query()方法将所有都查出来) Cursor cursor = db.query("student", null, null, null, null, null, null); //移动光标到第一个 if(cursor.moveToFirst()){ //将数据放入 StudentModel 对象,并放入 vector 集合 sm = new StudentModel(); sm.setId(cursor.getInt(cursor.getColumnIndex("id"))); sm.setName(cursor.getString(cursor.getColumnIndex("name"))); sm.setSex(cursor.getString(cursor.getColumnIndex("sex"))); sm.setAge(cursor.getInt(cursor.getColumnIndex("age"))); vector.add(sm); //如果有下一个 while(cursor.moveToNext()){ sm = new StudentModel(); sm.setId(cursor.getInt(cursor.getColumnIndex("id"))); sm.setName(cursor.getString(cursor.getColumnIndex("name"))); sm.setSex(cursor.getString(cursor.getColumnIndex("sex"))); sm.setAge(cursor.getInt(cursor.getColumnIndex("age"))); vector.add(sm); } } //关闭光标 cursor.close(); //返回 StudentModel 对象集合 return vector; } }
2、获取数据将数据传入数据库 student 表中
传入数据时,我将数据放入了一个model类中
public class StudentModel { private int id; //学生id private String name; //学生姓名 private String sex; //学生性别 private int age; //学生年龄 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
我们在界面中获取数据,将数据放入 model 类中,通过调用 MySQLite类定义的数据插入方法,将数据保存进数据库
import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends AppCompatActivity { private EditText name, sex, age; private Button submit, search; private SQLiteDatabase db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取可读写的数据库; db = new MySQLite(this).getReadableDatabase(); name = (EditText) findViewById(R.id.name); sex = (EditText) findViewById(R.id.sex); age = (EditText) findViewById(R.id.age); submit = (Button) findViewById(R.id.submit); submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //在这里获取输入的数据,调用方法将数据存入 SQLite 的student表中 StudentModel sm = new StudentModel(); sm.setName(name.getText().toString()); sm.setSex(sex.getText().toString()); sm.setAge(Integer.parseInt(age.getText().toString())); MySQLite mySQLite = new MySQLite(MainActivity.this); mySQLite.insertStudent(sm, db); } }); //点击了查看,就跳转到 Main2Activity 界面展示数据 search = (Button) findViewById(R.id.search); search.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(MainActivity.this,Main2Activity.class)); } }); } }
3、查询数据,将数据通过 ListView 将数据展示出来
在这个界面中定义一个 ListView 布局
<ListView android:id="@+id/list_item" android:layout_width="match_parent" android:layout_height="wrap_content"> </ListView>
调用 SQLite 类中定义的查询方法将数据查询出来(放在集合中,集合里保存 model 类 )
import android.database.sqlite.SQLiteDatabase; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.Vector; public class Main2Activity extends AppCompatActivity { private ListView list_item; private Vector<StudentModel> vector; private StudentModel sm = null; private String[] data; private SQLiteDatabase db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); // 获取可读写的数据库; db = new MySQLite(this).getReadableDatabase(); list_item = (ListView) findViewById(R.id.list_item); //查询 SQLite 中的数据 MySQLite mySQLite = new MySQLite(Main2Activity.this); vector = mySQLite.querys(db); data = new String[vector.size()]; for(int i=0;i<vector.size();i++){ sm = vector.get(i); int id = sm.getId(); String name = sm.getName(); String sex = sm.getSex(); int age = sm.getAge(); data[i] = "id:"+id+" name:"+name+" sex:"+sex+" age:"+age; } //通过 ListView 展示数据 list_item.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data)); } }
在这里,数据的插入或是数据的展示用的都是最原始的手段,在实际开发中,可以结合需求自己调整
像数据表,可以同时构建多个,增删改查等方法也可以单独写一个类出来,只要灵活运用,就能实现想要的效果
源码:https://github.com/iscopy/SQLite