android系统里面已经内置了一个SQLite数据库,它是一种轻型的数据库,这个数据库跟我们以前学的数据库都支持sql语句。也是是遵守ACID的关系型数据库管理系统。
想仔细了解SQLite数据库的操作,请可以去官网去学习
https://developer.android.com/training/basics/data-storage/databases.html
在android用SQLite数据库的几部步骤:
- 创建一个类继承SQLiteOpenHelper
- 根据SQLiteOpenHelper的getWritableDatabase()或getReadableDatabase()获取数据库
- 拿到数据库就可以根据qsl语句来操作
布局文件
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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.edu.androidforsqlite.MainActivity"
android:orientation="vertical"
android:baselineAligned="false">
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入"
/>
<EditText
android:id="@+id/age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="插入"
android:onClick="insert"
android:elevation="0dp" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询"
android:onClick="select"
/>
</LinearLayout>
我们继承SQLiteOpenHelper的MyHelper代码
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**这是数据库帮助类
* Created by Administrator on 2016/9/30.
*/
public class MyHelper extends SQLiteOpenHelper {
/**
* 这是建person表语句
*/
private String sql = "create table person (" +
" id integer primary key autoincrement " +
", name " +
", age )" ;
public MyHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**
* 数据库只有第一次创建时调用
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(sql);
}
/**
* 只有数据库版本更新时调用
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
MainActivity代码
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.example.edu.androidforsqlite.edu.jju.help.MyHelper;
public class MainActivity extends AppCompatActivity {
private SQLiteDatabase db;
private MyHelper helper;
private EditText mEtName, mEtAge;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
helper=new MyHelper(MainActivity.this,"song.db",null,1);
db = helper.getWritableDatabase();//返回一个SQLiteDatabase实例
initWidgets();
}
/**
* 初始化各控件
*/
private void initWidgets() {
mEtAge = (EditText) findViewById(R.id.age);
mEtName = (EditText) findViewById(R.id.name);
}
/**
* 插入数据
*
* @param view
*/
public void insert(View view) {
String name = mEtName.getText().toString();
String age = mEtAge.getText().toString();
db.execSQL("insert into person (name,age)"
+ "values(?,?)",
new String[]{name, age}
);
Toast.makeText(MainActivity.this,"插入成功",Toast.LENGTH_SHORT).show();
}
/**
* 查询所有数据
*/
public void select (View view){
db.rawQuery("select * from person",null);
Toast.makeText(MainActivity.this,"查询成功",Toast.LENGTH_SHORT).show();
}
}
运行后,我们就可以看到song.db数据库了,然后导出数据库,可以通过第三方软件打开
然后通过sqlite3去查看数据,依次输入命令。
MainActivity代码
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.example.edu.androidforsqlite.edu.jju.help.MyHelper;
public class MainActivity extends AppCompatActivity {
private SQLiteDatabase db;
private MyHelper helper;
private EditText mEtName, mEtAge;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
helper=new MyHelper(MainActivity.this,"song.db",null,1);
db = helper.getWritableDatabase();//返回一个SQLiteDatabase实例
initWidgets();
}
/**
* 初始化各控件
*/
private void initWidgets() {
mEtAge = (EditText) findViewById(R.id.age);
mEtName = (EditText) findViewById(R.id.name);
}
/**
* 插入数据
*
* @param view
*/
public void insert(View view) {
String name = mEtName.getText().toString();
String age = mEtAge.getText().toString();
db.execSQL("insert into person (name,age)"
+ "values(?,?)",
new String[]{name, age}
);
Toast.makeText(MainActivity.this,"插入成功",Toast.LENGTH_SHORT).show();
}
/**
* 查询所有数据
*/
public void select (View view){
db.rawQuery("select * from person",null);
Toast.makeText(MainActivity.this,"查询成功",Toast.LENGTH_SHORT).show();
}
/**
* 修改数据
*/
public void update(View view){
//我传进去的数据写死了,我只是给演示下。
db.execSQL("update person set name=?,age=?"
,new String[]{"xiaosong","34"}
);
}
/**
* 删除数据
* @param view
*/
public void delete(View view){
//根据名字来删除,只是演示下怎么用,关键学会sql语句
db.execSQL("delete from person where name=?"
,new String[]{"song"}
);
}
}
其实android自带了一些增删改查的方法
增加数据:各参数的意思
1,表名
2, 就是数据库不允许我们插入空行,要给指定一列,当插入数据真为空时,就会为这列设为null。官方的解释如下:
3,是以键值对的方式添加。键必须是你的属性
insert(String table, String nullColumnHack, ContentValues values)
删除数据:各参数的意思
1, 表名 2,条件 3, 条件的值,
delete(String table, String whereClause, String[] whereArgs)
修改数据:各参数的意思
1,表名 2,是你修改的值,是以键值对方式修改的。3, 条件 4,第三个参数的值
update(String table, ContentValues values, String whereClause, String[] whereArgs)
源码下载:
https://github.com/songshuilin/AndroidForBlog/tree/master/androidforsqlite