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<Data> arrayList = new ArrayList<MainActivity.Data>();
@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<Data> arrayList = new ArrayList<MainActivity.Data>();
@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);
} //表名,規避插入時語句的錯誤(沒有值的時候默認給的值),插入的值
}