SQLite是一个小型的数据库,占用资源低,处理速度快等优点。
首先新建一个MySQLiteOpenHelper类然后继承SQLiteOpenHelper。新建一个构造方法,里面有四个参数,第二个是数据库的名字,可命名为xx.db,第三个factory 游标工厂 用来创建一个游标默认值是null,第四个参数是版本号,最低为1.onCreate只有第一次创建的时候才会执行,onUpgrade是版本更新的时候才会调用。
db.execSQL("create table student1(_id integer primary key autoincrement,name varchar(20),gender varchar(30))");
这里是创建一个student1 的数据库,有id、key、name、gender,这个可根据自己需求定义。
下面是完整代码
package com.example.apple.sqlitedemo;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
* Created by apple on 16/12/28.
*/
public class MySQLiteOpenHelper extends SQLiteOpenHelper{
private final String TAG = "MySQLiteOpenHelper";
public MySQLiteOpenHelper(Context context) {
//name数据库名字,
//factory 游标工厂 用来创建一个游标默认值是null
//version 版本号 最低1
super(context, "student.db", null, 4);
}
/**
* 只有第一次创建的时候才调用执行
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.e(TAG,"onCreate");
db.execSQL("create table student1(_id integer primary key autoincrement,name varchar(20),gender varchar(30))");
}
/**
* 数据库版本更新时调用
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.e(TAG,"onUpgrade");
}
}
2、新建一个bean类用于存储数据,这里定义了就name 和gen der
package com.example.apple.sqlitedemo.bean;
/**
* Created by apple on 16/12/28.
*/
public class StudentData {
private String name;
private String gender;
public StudentData(String name, String gender) {
this.name = name;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
3、新建一个StudentDao的类用于实现增删改查
首先创建一个构造方法,在构造方法中初始化SQLiteOpenHelper,用于新建一个数据库,具体实现方法可看代码,注释得很详细了
package com.example.apple.sqlitedemo.dao;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.example.apple.sqlitedemo.MySQLiteOpenHelper;
import com.example.apple.sqlitedemo.bean.StudentData;
import java.util.ArrayList;
import java.util.List;
/**
* Created by apple on 16/12/28.
*/
public class StudentDao {
public MySQLiteOpenHelper mySQLiteOpenHelper;
private final String TAG = "StudentDao";
//创建构造方法,在构造方法中初始化SQLiteOpenHelper
public StudentDao(Context context) {
mySQLiteOpenHelper = new MySQLiteOpenHelper(context);
}
/**
* 往数据库中添加数据
* @param name
* @param gender
*/
public void add(String name,String gender){
SQLiteDatabase db = mySQLiteOpenHelper.getWritableDatabase();
//? 为占位符
db.execSQL("insert into student1(name,gender) values(?,?)",new Object[]{name,gender});
db.close();//关闭数据库
}
/**
* 删除数据
* @param name
*/
public void delete(String name){
SQLiteDatabase db = mySQLiteOpenHelper.getWritableDatabase();
db.execSQL("delete from student1 where name = ?",new Object[]{name});
db.close();//关闭数据库
}
/**
* 更新数据库数据
* @param name
* @param gender
*/
public void update(String name,String gender){
SQLiteDatabase db = mySQLiteOpenHelper.getWritableDatabase();
db.execSQL("update student1 set gender = ? where name = ?", new Object[]{gender,name});
db.close();//关闭数据库
}
/**
* 查询数据库数据
* @return
*/
public List<StudentData> query(){
List<StudentData> studentDatas = new ArrayList<>();
SQLiteDatabase db = mySQLiteOpenHelper.getWritableDatabase();
//通过rawQuery 查询拿到一个cursor
Cursor cursor = db.rawQuery("select * from student1",new String[]{});
//通过cursor获取所在的索引值
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex("name"));
String gender = cursor.getString(cursor.getColumnIndex("gender"));
studentDatas.add(new StudentData(name,gender));
Log.e(TAG,"name="+name+" gender="+gender);
}
return studentDatas;
}
}
4、最后引用测试是否可以实现功能,先写一个测试布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<EditText
android:id="@+id/input_data"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/add"
android:layout_marginTop="10dip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加" />
<Button
android:id="@+id/delete"
android:layout_marginTop="10dip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除" />
<Button
android:id="@+id/update"
android:layout_marginTop="10dip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改" />
<Button
android:id="@+id/query"
android:layout_marginTop="10dip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查找" />
</LinearLayout>
初始化StudentDao后就可以调用里面的方法测试,具体代码
package com.example.apple.sqlitedemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.example.apple.sqlitedemo.bean.StudentData;
import com.example.apple.sqlitedemo.dao.StudentDao;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//private MySQLiteOpenHelper helper;
private Button add;
private Button delete;
private Button update;
private Button query;
private EditText inputData;
private final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
/**
* name 数据库名字
* mode 权限模式
* factroy 游标工厂
*/
// SQLiteDatabase db = this.openOrCreateDatabase("ning",MODE_PRIVATE,null);
// db.execSQL("create table student(_id integer primary key autoincrement,name varchar(30),sex varchar(30))");
// db.execSQL("insert into student (name,sex) values(?,?)",new Object[18]);
//实例化SQLiteOpenHelper对象,这个时候数据库还没创建出来
// helper = new MySQLiteOpenHelper(this);
//创建一个可读可写数据库
// SQLiteDatabase writeDatabase = helper.getWritableDatabase();
//创建一个只可读的数据库
//SQLiteDatabase readDatabase = helper.getReadableDatabase();
add = (Button)findViewById(R.id.add);
add.setOnClickListener(this);
delete = (Button)findViewById(R.id.delete);
delete.setOnClickListener(this);
update = (Button)findViewById(R.id.update);
update.setOnClickListener(this);
query = (Button)findViewById(R.id.query);
query.setOnClickListener(this);
inputData = (EditText)findViewById(R.id.input_data);
}
@Override
public void onClick(View v) {
StudentDao dao = new StudentDao(this);
switch (v.getId()){
case R.id.add:
dao.add("张三","男");
dao.add("李四","男");
dao.add("小明","女");
break;
case R.id.delete:
dao.delete("小明");
break;
case R.id.update:
dao.update("李四","女");
break;
case R.id.query:
List<StudentData> query = dao.query();
for (StudentData studentData : query){
Log.e(TAG,"学生姓名="+studentData.getName()+ "\n学生性别="+studentData.getGender());
}
break;
default:
break;
}
}
}
最后代码下载地址是: http://download.youkuaiyun.com/detail/u011324501/9724044