編輯:關於Android編程
很久前也寫過一篇Android數據庫操作相關內容。在正式項目中,我們通常會使用數據庫開源框架如GreenDao來對數據庫進行操作。
感覺很久沒有直接使用Sql語句了,這幾天有時間,就溫習了下相關知識。
SQLite,是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統.是開源的,高效率的,可嵌入且程序驅動的數據庫。
使用起來非常方便,因為其API簡單易用,代碼量少。
1,數據類型有:
1). NULL,值是NULL
2). INTEGER,值是有符號整形,根據值的大小以1,2,3,4,6或8字節存放
3). REAL,值是浮點型值,以8字節IEEE浮點數存放
4). TEXT,值是文本字符串,使用數據庫編碼(UTF-8,UTF-16BE或者UTF-16LE)存放
5). BLOB,只是一個數據塊,完全按照輸入存放(即沒有准換)
實際也支持我們覺的Integer,varchar,time,double等類型。
在使用數據庫時,我們通常要使用到的sql語句有:
1,創建表
create table 表名(字段名稱 數據類型 約束,字段名稱 數據類型 約束......)
例如創建一個學生表student:
create table student(_id Integer primary key,name varchar(10) not null,age Integer,scroe float)
2,刪除表
drop table 表名
例如刪除剛剛創建的student表:
drop table student
3,表中添加(插入數據)
insert into 表名(字段1,字段2...)values (值1,值2...)
或者:
insert into 表名 values(值1,值2...值n) 這種方式添加數據要求後面的值與數據表中字段一一對應且不能空缺字段
例如給student表中添加一條數據:
insert into student (_id,name,age,scroe) values(1,'張三',13,85.6)
4,表中刪除數據
delete from 表名 where 刪除的條件
比如刪除student表中姓名為張三的數據:
delete from student where name="張三"
5,修改表中的數據
update 表名 set 字段=新值 where 修改的條件
例如,修改student表中張三的成績為90分
update student set score=90 where _id=1
6,查詢表中的數據
1,查找全部數據
select * from 表名
例如查的student表中所有數據:
select * from student
2,查找指定數據:
select 字段名 from 表名 where 查詢條件 group by 分組字段 having 篩選條件 order by 排序字段
例如查詢學生表student中姓名為張三的成績:
select scroe from student where name='張三'
簡單例子:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button db_create;
private Button table_insert;
private Button table_query;
private Button table_delete;
private Button table_update;
private TextView show_tv;
//判斷是否已經創建數據庫
private boolean isCreateDb = false;
private DBManager mDbManager;
private MyDBHelper mDbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDbManager = DBManager.getInstance(this);
//執行這句代碼就可以創建數據庫及表信息
mDbHelper = new MyDBHelper(this);
initViews();
}
/**
* @param
* @description 初始化UI及監聽事件
* @author ldm
* @time 2016/11/10 9:47
*/
private void initViews() {
this.db_create = (Button) findViewById(R.id.db_create);
this.table_insert = (Button) findViewById(R.id.table_insert);
this.table_query = (Button) findViewById(R.id.table_query);
this.table_delete = (Button) findViewById(R.id.table_delete);
this.table_update = (Button) findViewById(R.id.table_update);
this.show_tv = (TextView) findViewById(R.id.show_tv);
this.db_create.setOnClickListener(this);
this.table_insert.setOnClickListener(this);
this.table_query.setOnClickListener(this);
this.table_delete.setOnClickListener(this);
this.table_update.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.db_create://創建數據庫(表)
//調用mDbManager.getDBHelper(),
if (mDbHelper == null) {
mDbHelper = new MyDBHelper(this);
}
isCreateDb = true;
//每次操作後,查詢數據庫顯示結果
queryAndShow();
break;
case R.id.table_insert://表中插入數據
if (!isCreateDb) {
Toast.makeText(this, "請先點擊按鈕創建數據庫相關信息", Toast.LENGTH_SHORT).show();
return;
}
//先插入6條數據
String sql0 = "insert into " + MyDBHelper.T_NAME + " values(1,'趙一',14,99)";
String sql4 = "insert into " + MyDBHelper.T_NAME + " values(2,'吳二',15,67.5)";
String sql = "insert into " + MyDBHelper.T_NAME + " values(3,'李四',14,59)";
String sql1 = "insert into " + MyDBHelper.T_NAME + " values(4,'王五',15,80)";
String sql2 = "insert into " + MyDBHelper.T_NAME + " values(5,'陳六',16,77.5)";
String sql3 = "insert into " + MyDBHelper.T_NAME + " values(6,'劉大',15,83.4)";
mDbManager.execSql(mDbHelper.getWritableDatabase(), sql0);
mDbManager.execSql(mDbHelper.getWritableDatabase(), sql4);
mDbManager.execSql(mDbHelper.getWritableDatabase(), sql);
mDbManager.execSql(mDbHelper.getWritableDatabase(), sql1);
mDbManager.execSql(mDbHelper.getWritableDatabase(), sql2);
mDbManager.execSql(mDbHelper.getWritableDatabase(), sql3);
//每次操作後,查詢數據庫顯示結果
queryAndShow();
break;
case R.id.table_query://查詢表中數據
if (!isCreateDb) {
Toast.makeText(this, "請先點擊按鈕創建數據庫相關信息", Toast.LENGTH_SHORT).show();
return;
}
//每次操作後,查詢數據庫顯示結果
queryAndShow();
break;
case R.id.table_delete://刪除表中數據
if (!isCreateDb) {
Toast.makeText(this, "請先點擊按鈕創建數據庫相關信息", Toast.LENGTH_SHORT).show();
return;
}
String delSql = "delete from " + MyDBHelper.T_NAME + " where " + MyDBHelper.TABLE_ID + "=3";
mDbManager.execSql(mDbHelper.getWritableDatabase(), delSql);
//每次操作後,查詢數據庫顯示結果
queryAndShow();
break;
case R.id.table_update://修改表中數據
if (!isCreateDb) {
Toast.makeText(this, "請先點擊按鈕創建數據庫相關信息", Toast.LENGTH_SHORT).show();
return;
}
String updSql = "update " + MyDBHelper.T_NAME + " set " + MyDBHelper.TABLE_NAME + "='李九'" + " where " + MyDBHelper.TABLE_ID + "=5";
mDbManager.execSql(mDbHelper.getWritableDatabase(), updSql);
//每次操作後,查詢數據庫顯示結果
queryAndShow();
break;
}
}
/**
* @param
* @description 查詢數據並顯示數據內容
* @author ldm
* @time 2016/11/10 10:18
*/
private void queryAndShow() {
String sql = "select * from " + MyDBHelper.T_NAME;
StringBuffer sb = new StringBuffer();
Cursor cursor = mDbHelper.getWritableDatabase().rawQuery(sql, null);
while (cursor.moveToNext()) {
sb.append("_id=").append(cursor.getString(cursor.getColumnIndex(MyDBHelper.TABLE_ID))).append(" ")
.append("name=").append(cursor.getString(cursor.getColumnIndex(MyDBHelper.TABLE_NAME))).append(" ")
.append("age=").append(cursor.getInt(cursor.getColumnIndex(MyDBHelper.TABLE_AGE))).append(" ")
.append("score=").append(cursor.getInt(cursor.getColumnIndex(MyDBHelper.TABLE_SCORE)))
.append("\n");
}
show_tv.setText("查詢結果是:\n" + sb.toString());
}
/*--除了用基礎的Sql語句操作數據外,還可以直接使用Android提示的數據庫操作方法,網上資料很多,就不記錄啦---**/
}
數據庫操作類:SQLiteOpenHelper
public class MyDBHelper extends SQLiteOpenHelper {
private final static String DB_NAME = "test";
private final static int DB_VERSION = 1;
public final static String T_NAME = "student";
public final static String TABLE_ID = "_id";
public final static String TABLE_NAME = "name";
public final static String TABLE_AGE = "age";
public final static String TABLE_SCORE = "score";
public MyDBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
//定義參數簡單地構造方法
public MyDBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
//數據庫創建時調用
@Override
public void onCreate(SQLiteDatabase db) {
//如果寫有創建表的Sql語句時,就會在創建數據的時候創建對應的表格
String sql = "create table " + T_NAME + "("
+ TABLE_ID + " Integer primary key,"
+ TABLE_NAME + " varchar(10),"
+ TABLE_AGE + " Integer,"
+ TABLE_SCORE + " float"
+ ")";
//執行創建表格語句
db.execSQL(sql);
}
//數據庫版本發生更新時調用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//更新數據庫
}
//打開數據庫時調用
@Override
public void onOpen(SQLiteDatabase db) {
//如果數據庫已經存在,則再次運行不執行onCreate()方法,而是執行onOpen()打開數據庫
super.onOpen(db);
}
}
實際 項目中應該把數據庫操作方法統一封裝一下:
public class DBManager {
private static DBManager dbManager;
private Context context;
private DBManager(Context context) {
this.context = context;
}
public static DBManager getInstance(Context context) {
if (null == dbManager) {
dbManager = new DBManager(context);
}
return dbManager;
}
/**
* @param
* @description 通過執行sql語句來操作數據庫
* @author ldm
* @time 2016/11/10 9:25
*/
public void execSql(SQLiteDatabase db, String sql) {
if (null != db && !TextUtils.isEmpty(sql)) {
db.execSQL(sql);
}
db.close();
}
}
主界面布局文件:
添加權限 :
效果貼圖:
Android越來越普及,那已經安裝的應用要如何更新呢?在應用市場中常會有顯示某某應用已經更新之類的信息,那我們是否也可以實現類似的功能呢?如果要實現又要做
阿法狗讓圍棋突然就被熱議了,鴻洋大神也順勢出了篇五子棋單機游戲的視頻,我看到了就像膜拜膜拜,就學習了一下,寫篇博客梳理一下自己的思路,加深一下印象視頻鏈接:
Android平台版本和設備碎片化很嚴重,因此從Win32平台移植到Android平台會有很多問題,下面是我們歸納的從Win32平台移植到Android平台遇到的一些問題
前言: 關於Android中的動畫吧,從我一開始接觸Android的時候,就陸陸續續的接觸過,不得不說,動畫在Android應用中應用的還是很多的,熟悉掌握了動畫,也可以