Sqlite DataBase :数据库存储


应用场景:大量结构相似的数据,频繁的增删改查,需要用到数据库


特性:轻量级 免费 多线程 跨平台



SQL语句:


创建表:CREATE TABLE 表名 (_id INTEGER PRIMARY KEY AUTOINCREMENT,name VERCHAR(10),phone VERCHAR(10));


修改表:ALTER TABLE 表名 ADD 字段 属性;

eg:    ALTER TABLE student ADD COLUMN age INTEGER;


删除表:DROP TABLE 表名;




(增)插入数据:INSERT INTO 表名 (字段名) VALUES (值);

eg:       INSERT INTO student (name,phone) VALUES ("李娜","216516");


(删)删除数据:DELETE FROM 表名 WHERE 条件语句;

eg:      DELETE FROM student WHERE name="李娜";


(改)修改数据:UPDATE 表名 SET 字段名=值 WHERE 条件语句;

eg:      UPDATE student SET phone="110" WHERE name="李娜";


(查)查询数据:SELECT * FROM 表名 //WHERE 条件语句 GROUP BY 分组语句 HAVING 分组条件 ORDER BY 排序;  DESC 降序   ASC 升序

eg:      SELECT * FORM student ;





代码实例中:


注意:新建一个Class,给名字的时候,下面要继承SqliteOpenHelper类,去掉main方法,重写构造方法(初学时可以将构造方法中的String name 定死,这样建立的数据库名字就是固定的,Factory设为null;)


例子:



新建的Class(MySqliteOpenHelper)中:


package com.example.lwk_0303_sqliteopenhelper;


import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.database.sqlite.SQLiteOpenHelper;


public class MySqliteOpenHelper extends SQLiteOpenHelper {


public MySqliteOpenHelper(Context context,int version) {//本来有四个,String name代表数据库名字,这里给定值,后缀为db!

super(context, "lwk.db", null, version);              //光标设为null

// TODO Auto-generated constructor stub//剩下的两个参数是上下文和版本

}


@Override

public void onCreate(SQLiteDatabase db) {

//创建新表,用到数据库语言

String sql="CREATE TABLE nvshen (id INTEGER PRIMARY KEY AUTOINCREMENT,name VERCHAR(10),age INTEGER,phone VERCHAR(10));";

db.execSQL(sql);

}


@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO Auto-generated method stub


}


}




上下文:



package com.example.lwk_0303_sqliteopenhelper;


import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;


public class MainActivity extends Activity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

MySqliteOpenHelper mySqliteOpenHelper=new MySqliteOpenHelper(this, 1);//下次启动时版本若是改变了,MySqliteOpenHelper会调用onUpgrade()方法!

mySqliteOpenHelper.getReadableDatabase();

}


@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}


}











增删改查代码示例:




package com.example.lwk_0303_sqliteopenhelper;


import java.util.ArrayList;


import android.os.Bundle;

import android.app.Activity;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.TextView;


public class MainActivity extends Activity implements OnClickListener{


private SQLiteDatabase mDb;

private TextView mTv_01;

ArrayList arrayList = new ArrayList();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.button1).setOnClickListener(this);//增

findViewById(R.id.button2).setOnClickListener(this);//删

findViewById(R.id.button3).setOnClickListener(this);//改

findViewById(R.id.button4).setOnClickListener(this);//查

mTv_01 = (TextView) findViewById(R.id.textView1);

MySqliteOpenHelper mySqliteOpenHelper=new MySqliteOpenHelper(this, 1);

mDb = mySqliteOpenHelper.getReadableDatabase();

}


@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

class Data{

String name;

int age;

String phone;

public Data(String name, int age, String phone) {

super();

this.name = name;

this.age = age;

this.phone = phone;

}

@Override

public String toString() {

return "Data [name=" + name + ", age=" + age + ", phone=" + phone

+ "]";

}

}


//为使代码可读性更高,下面的方法可以另外封装起来,笔者这里未封装!!

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.button1:

String sql="insert into nvshen (name,age,phone) values ('丽丽',18,'45248')";

mDb.execSQL(sql);

break;

case R.id.button2:

String sql2="delete from nvshen where name='丽丽'";

mDb.execSQL(sql2);

break;

case R.id.button3:

String sql3="update nvshen set phone='120' where name='丽丽'";

mDb.execSQL(sql3);

break;

case R.id.button4:

arrayList.clear();

String sql4="select * from nvshen";

Cursor cursor = mDb.rawQuery(sql4, null);

//将光标移到第一个位置

boolean toFirst = cursor.moveToFirst();

while(toFirst){

String name=cursor.getString(cursor.getColumnIndex("name"));

int age = cursor.getInt(cursor.getColumnIndex("age"));

String phone = cursor.getString(cursor.getColumnIndex("phone"));

Data data=new Data(name, age, phone);

arrayList.add(data);

//把光标移到下一个位置

toFirst = cursor.moveToNext();

}

mTv_01.setText(arrayList.toString());

break;

default:

break;

}

}


}






ORM:关系对象映射(不需要SQL语句):


package com.example.lwk_0303_sqliteopenhelper;


import java.util.ArrayList;


import android.os.Bundle;

import android.app.Activity;

import android.content.ContentValues;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.TextView;


public class MainActivity extends Activity implements OnClickListener{


private SQLiteDatabase mDb;

private TextView mTv_01;

ArrayList arrayList = new ArrayList();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.button1).setOnClickListener(this);//增

findViewById(R.id.button2).setOnClickListener(this);//删

findViewById(R.id.button3).setOnClickListener(this);//改

findViewById(R.id.button4).setOnClickListener(this);//查

mTv_01 = (TextView) findViewById(R.id.textView1);

MySqliteOpenHelper mySqliteOpenHelper=new MySqliteOpenHelper(this, 1);

mDb = mySqliteOpenHelper.getReadableDatabase();

}


@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

class Data{

String name;

int age;

String phone;

public Data(String name, int age, String phone) {

super();

this.name = name;

this.age = age;

this.phone = phone;

}

@Override

public String toString() {

return "Data [name=" + name + ", age=" + age + ", phone=" + phone

+ "]";

}

}


@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.button1:

add_data();

break;

case R.id.button2:

dele_data();

break;

case R.id.button3:

update_data();

break;

case R.id.button4:

find_data();

break;

default:

break;

}

}


private void find_data() {

arrayList.clear();

Cursor cursor = mDb.query("nvshen", new String[]{"name","age","phone"}, null, null, null, null, null);

                         //表名,需要被查找的列名,条件语句,占位符参数,分组条件,占位符,排序

boolean toFirst= cursor.moveToFirst();

while(toFirst){

String name = cursor.getString(cursor.getColumnIndex("name"));

String phone = cursor.getString(cursor.getColumnIndex("phone"));

int age = cursor.getInt(cursor.getColumnIndex("age"));

Data data=new Data(name, age, phone);

arrayList.add(data);

toFirst=cursor.moveToNext();

}

mTv_01.setText(arrayList.toString());

}


private void update_data() {

ContentValues values=new ContentValues();

values.put("age", 19);

mDb.update("nvshen", values, "name=?", new String[]{"娜娜"});

}             //表名,修改的值(new出来),条件语句,条件语句的占位符(条件语句的值)


private void dele_data() {

mDb.delete("nvshen", "name=?", new String[]{"娜娜"});

         //表名,条件语句,条件语句的占位符(条件语句的值)

}


private void add_data() {

ContentValues values=new ContentValues();

values.put("name", "娜娜");

values.put("age", 18);

values.put("phone", "5614665");

mDb.insert("nvshen", null, values);

}             //表名,规避插入时语句的错误(没有值的时候默认给的值),插入的值


}