編輯:關於Android編程
OrmLite是一個數據庫操作輔助的開源框架,底層還是Sqlite。O-R-M是Object relational mapping(對象關系映射)的縮寫,即業務實體對象與關系型數據庫之間的映射。業務實體對象就是我們所說的model類,可以類比為Gson解析時的model類;關系型數據庫可以理解為二維數據庫,表的格式就如Excel,有行和列兩個維度,sqlite就是二維的;映射:對象中的屬性與數據庫表中的字段一一對應。OrmLite直接操作業務對象,隱藏了數據庫操作的細節,使我們不用通過sql語句與數據庫打交道。
OrmLite通過Java注解的方式與數據庫建立映射關系,在這裡我以一個實例來進行說明,現在建立一個簡單的數據庫1607.db,並創建一張表Student來記錄一個學生的名字,年齡,性別,學號等。
下面是最終的實現效果(能夠正常的對數據庫進行增刪改查):
准備工作,先依賴類庫:
dependencies {
compile 'com.j256.ormlite:ormlite-android:5.0'
}
一、首先,創建我們的業務實體對象,就是我們所說的model類,並通過注解的方式與數據庫聯系起來:
1.@DatabaseTable用來聲明把此類作為數據庫的表,可以在後面的括號中填入表名(不填的話就以類名作為表名)
2.@DatabaseField(columnName=”“)用來聲明表的字段名,可以在後面的括號中設置字段的屬性
package com.example.administrator.ormsqlite; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; /** * Created by Administrator on 2016/10/14. * 創建學生表 * 1,這個類就表示一張表,類中的屬性表示字段 *,2,需要用注解來標明這個類就是一張數據表 * 3,需要用注解來標明屬性為表中的字段 */ @DatabaseTable //可以通過(tableName = "user")來改變表名 public class Student { @DatabaseField //只有添加這個注釋,才能把此屬性添加到表中的字段 private String name; @DatabaseField(generatedId = true) //generatedId = true 表示自增長的主鍵 private int id; @DatabaseField private String className; @DatabaseField private int userId; @DatabaseField private String sex; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", id=" + id + ", className='" + className + '\'' + ", userId=" + userId + ", sex='" + sex + '\'' + '}'; } }
與Android中的數據庫創建類似,使用OrmLite創建數據庫需要我們創建一個OrmHelper繼承OrmLiteSqliteOpenHelper,OrmLiteSqliteOpenHelper也有兩個方法需要我們去實現,分別是onCreate和onUpgrade,負責數據庫創建以及升級時的操作。
package com.example.administrator.ormsqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; import java.sql.SQLException; /** * Created by Administrator on 2016/10/14. * 創建和維護數據庫的類 */ public class OrmHelper extends OrmLiteSqliteOpenHelper { public static final String DB_NAME ="1607.db"; public static final int DB_VERSION = 1; public OrmHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { //建表,和Gson類似,第二個參數即是業務實體類 try { TableUtils.createTable(connectionSource,Student.class); } catch (SQLException e) { e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) { //區分不同的版本做不同的更新 } }
創建數據庫之後就可以對數據庫操作了,數據庫的操作主要就是增刪查改。OrmLite操作數據庫的類是Dao,Dao相當於原生的SQLiteDatabase,一個Dao只能操作一張表。
1,插入操作
這些方法使用起來都比較簡單,我們只需將自己的Bean傳入到下列方法中即可
2,查詢數據
OrmLite為我提供了一系列的查詢操作,方法很多,而且很多都是只看方法名就可以知道的,在這裡介紹一下如何使用QueryBuilder進行復雜查找。
與查詢操作類似,ORMLite同樣為我們提供了一系列的方法,同時也提供了復雜刪除,復雜更改的DeleteBuilder和UpdateBuilder,其用法與QueryBuilder相似。
取數據庫的操作類 * @param context * @throws SQLException */ public DBManager(Context context) throws SQLException { OrmHelper ormHelper = new OrmHelper(context); // SQLiteDatabase readableDatabase = ormHelper.getReadableDatabase(); //可以獲取一個原生的數據庫 //Dao相當於原生的SQLiteDatabase,可以操作數據庫,一個Dao只能操作一張表 dao = ormHelper.getDao(Student.class); } /** * 插入數據 * @param student * @throws SQLException */ public void insertStudent(Student student) throws SQLException { //在數據庫中創建一條記錄,作用與SQLiteDatabase.insert一樣 dao.create(student); } /** * 批量插入 * 不能使用循環一個一個的插入,因為這樣會一直打開數據庫、插入數據、 * 關閉數據庫 * @param students * @throws SQLException */ public void batchInsert(Liststudents) throws SQLException { dao.create(students); } /** * 查詢數據 * @return * @throws SQLException */ public List getStudent() throws SQLException { List list = dao.queryForAll(); return list; } /** * 查詢某個數據 * @return * @throws SQLException */ public List queryGuanyu() throws SQLException { //Eq是equals的縮寫 //方法1 //List list = dao.queryForEq("name", "張飛"); //方法2 QueryBuilder queryBuilder = dao.queryBuilder(); // queryBuilder.offset(); //偏移量 // queryBuilder.limit(8l); //最多幾行 offset + limit 做分頁 // queryBuilder.orderBy("age",true); queryBuilder.where().eq("name","關羽"); //多條件查詢 List query = queryBuilder.query();//此方法相當於build,提交設置 return query; } /** * 刪除數據 * @param student * @throws SQLException */ public void deleteStudent(Student student) throws SQLException { //只看id dao.delete(student); } /** * 刪除指定數據 * @throws SQLException */ public void deleteGuanyu() throws SQLException { DeleteBuilder deleteBuilder = dao.deleteBuilder(); deleteBuilder.where().eq("name","關羽"); deleteBuilder.delete(); } /** * 修改數據 * @param student * @throws SQLException */ public void updateStudent(Student student) throws SQLException { student.setName("關羽"); dao.update(student); } /** * 修改指定數據 * @throws SQLException */ public void updateGuanyu() throws SQLException { UpdateBuilder updateBuilder = dao.updateBuilder(); updateBuilder.where().eq("name","關羽"); updateBuilder.updateColumnValue("sex","女"); updateBuilder.update(); } }
package com.example.administrator.ormsqlite; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private DBManager dbManager; private ListView list; private ListmStudents; private MyAdapte myAdapte; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //把數據顯示在listview上 myAdapte = new MyAdapte(); list.setAdapter(myAdapte); //初始化DBManager try { dbManager = new DBManager(this); } catch (SQLException e) { e.printStackTrace(); } //剛進來時查詢所有的student queryStudent(); //給listview設置點擊監聽和長按監聽 list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int i, long l) { try { //單擊刪除該student dbManager.deleteStudent(mStudents.get(i)); queryStudent(); } catch (SQLException e) { e.printStackTrace(); } } }); list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView adapterView, View view, int i, long l) { try { //長按修改student dbManager.updateStudent(mStudents.get(i)); queryStudent(); } catch (SQLException e) { e.printStackTrace(); } return true; } }); } /** * 初始化控件 */ private void initView() { findViewById(R.id.insert).setOnClickListener(this); findViewById(R.id.delete).setOnClickListener(this); findViewById(R.id.insert).setOnClickListener(this); findViewById(R.id.insertAll).setOnClickListener(this); findViewById(R.id.query).setOnClickListener(this); list = (ListView) findViewById(R.id.list); } /** * 查詢所有的student */ public void queryStudent(){ try { mStudents = dbManager.getStudent(); myAdapte.notifyDataSetChanged(); } catch (SQLException e) { e.printStackTrace(); } } /** * 查詢指定數據 */ public void queryGuanyu(){ try { mStudents = dbManager.queryGuanyu(); myAdapte.notifyDataSetChanged(); } catch (SQLException e) { e.printStackTrace(); } } @Override public void onClick(View view) { switch (view.getId()){ case R.id.insert: //插入一條數據 Student student = new Student(); student.setName("張飛"); student.setSex("男"); student.setUserId(123); student.setClassName("1607"); try { dbManager.insertStudent(student); queryStudent(); } catch (SQLException e) { e.printStackTrace(); } break; case R.id.delete: //刪除指定數據(關羽) try { dbManager.deleteGuanyu(); queryStudent(); } catch (SQLException e) { e.printStackTrace(); } break; case R.id.update: //修改指定數據(修改關羽的性別) try { dbManager.updateGuanyu(); queryStudent(); } catch (SQLException e) { e.printStackTrace(); } break; case R.id.query: //查詢指定數據(關羽) queryGuanyu(); break; case R.id.insertAll: //批量插入數據 List studnets = new ArrayList<>(); for (int i = 0; i < 10; i++) { Student stu = new Student(); stu.setName("劉備"); stu.setClassName("234"); stu.setUserId(i); stu.setSex("男"); studnets.add(stu); } try { dbManager.batchInsert(studnets); queryStudent(); } catch (SQLException e) { e.printStackTrace(); } break; } } /** * ListView對應的適配器 */ class MyAdapte extends BaseAdapter{ @Override public int getCount() { return mStudents == null ? 0 : mStudents.size(); } @Override public Object getItem(int i) { return mStudents.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { TextView tv = new TextView(MainActivity.this); tv.setTextSize(18); tv.setText(mStudents.get(i).toString()); return tv; } } }
Android Window、PhoneWindow、WindowManager、Activity學習心得 第一彈閱讀本文,你首先需要理解 Context 上下文環境,W
在網上查了好多資料,大致都雷同,大家都是互相抄襲的,看著很費勁,不好理解,自己總結一下,留著需要看的話來查找。代碼中的例子如下:復制代碼 代碼如下:<ImageVi
在網上查了好多資料,大致都雷同,大家都是互相抄襲的,看著很費勁,不好理解,自己總結一下,留著需要看的話來查找。代碼中的例子如下 <ImageView
1、本地html與本地html裡的js交互2、本地html與本地js交互3、網絡html與網絡js交互4、網絡html與本地js交互5、各個情況動態添加js以上5點都可以