Android--數據存儲(數據持久化)

嚮往常一樣,我們先來搞清一下我們需要梳理的知識點:
今天我們使用的數據存儲是使用第三方控件orlmlite
我們先來介紹一下ORMLite:
ORMLite是一個輕量級的Java對象關係映射持久層框架。支持包括 MySQL、Postgres、Microsoft SQL Server、H2、Derby、HSQLDB和Sqlite等在內的數據庫。提供靈活的QueryBuilder來構建複雜的數據查詢。強大的抽象DAO類,只需5行代碼便能夠自動生成SQL來創建和刪除數據庫表格。
導入第三方控件的好處是直接調用方法,不再需要自己寫方法。

本次工程實現功能介紹

將輸入的數據加到數據庫中
點擊增加:可以將數據加入到數據庫中
點擊查詢:查詢全部信息
點擊刪除:你可以只輸入主鍵ID,選中進行刪除
點擊ID查詢:輸入ID查詢單條數據

具體實現步驟:
第一步:建立數據庫。可以直接拿去使用

public  class DatabaseHelper extends OrmLiteSqliteOpenHelper {
    //數據庫的名字
    private static final String TABLE_NAME = "ormtest.db";
    private Map<String, Dao> daos = new HashMap<String, Dao>();
    private static DatabaseHelper instance;
    private DatabaseHelper(Context context) {
        super(context, TABLE_NAME, null, 1);
    }
    @Override  
    public void onCreate(SQLiteDatabase database,  
            ConnectionSource connectionSource) {
        try {
            //建表、可以建多個表
            TableUtils.createTable(connectionSource, User.class);
            //TableUtils.createTable(connectionSource, User.class);
        } catch (SQLException e) {
            e.printStackTrace();  
        }  
    }
    @Override  
    public void onUpgrade(SQLiteDatabase database,  
            ConnectionSource connectionSource, int oldVersion, int newVersion) {
        try {
            //User實體類
            TableUtils.dropTable(connectionSource, User.class, true);
            onCreate(database, connectionSource);  
        } catch (SQLException e) {
            e.printStackTrace();  
        }  
    }
    /** 
     * 單例獲取該Helper 
     *  
     * @param context 
     * @return 
     */  
    public static synchronized DatabaseHelper getHelper(Context context) {
        context = context.getApplicationContext();  
        if (instance == null) {
            synchronized (DatabaseHelper.class) {
                if (instance == null)  {
                    instance = new DatabaseHelper(context);
                }
            }  
        }
        return instance;  
    }
    public synchronized Dao getDao(Class clazz) throws SQLException {
        Dao dao = null;  
        String className = clazz.getSimpleName();
        if (daos.containsKey(className)) {
            dao = daos.get(className);  
        }  
        if (dao == null) {
            dao = super.getDao(clazz);  
            daos.put(className, dao);  
        }  
        return dao;  
    }
    /** 
     * 釋放資源 
     */  
    @Override  
    public void close() {
        super.close();
        for (String key : daos.keySet()) {
            Dao dao = daos.get(key);  
            dao = null;  
        }  
    }
}  

第二步:建立數據庫中的數據表
運用註解的方式,在實體類中創建表格

//不寫tableName = "user",默認找名字都叫User
    //表名
@DatabaseTable(tableName = "user")
public class User {
    @DatabaseField(id = true)//true爲主鍵
    private String userId;
    //@DatabaseField代表是列
    //列名columnName = "username"寫數據庫裏就叫這個名    不寫默認屬性名叫name
    @DatabaseField(columnName = "username")
    private String name;
    @DatabaseField()
    private String age;
    public User(){

    }

    public User(String userId, String name, String age) {
        this.userId = userId;
        this.name = name;
        this.age = age;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

第三步:書寫方法

public class UserDaoOrm  {
    private Context context;
    //調用它自帶的Dao
    private Dao<User,Integer> userDao;
    private DatabaseHelper helper;
    public UserDaoOrm(Context context){
        this.context = context;
        helper=DatabaseHelper.getHelper(context);
        try {
            userDao=helper.getDao(User.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //添加一條數據
    public void add(User user){
        try {
            userDao.createOrUpdate(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //查詢全部
    public List<User> select(){
        try {
            return userDao.queryForAll();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    //刪除
    public void delete(User user){
        try {
            userDao.delete(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //查詢一個
    public User selectUser(String id){
        try {
           return userDao.queryBuilder()
                   .where()
                   .eq("userId",id)
                   .queryForFirst();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

第四步:建立一個Activity然後,通過調用,實現具體功能

public class UserOrlActivity extends AppCompatActivity {
    private EditText name,age,id;
    private Button insert,select,delete,update;
    private TextView show;
    private UserDaoOrm userDaoOrm;
    private Spinner sp;
    private List<User>list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_orl);
        name= (EditText) findViewById(R.id.name);
        age= (EditText) findViewById(R.id.age);
        id= (EditText) findViewById(R.id.pwd);
        insert= (Button) findViewById(R.id.add);
        select= (Button) findViewById(R.id.search);
        delete= (Button) findViewById(R.id.delete);
        show= (TextView) findViewById(R.id.show);
        sp= (Spinner) findViewById(R.id.sp);
        update= (Button) findViewById(R.id.update);
        userDaoOrm=new UserDaoOrm(this);
        //新增方法
        insert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                User user=new User();
                user.setUserId(id.getText().toString());
                user.setName(name.getText().toString());
                user.setAge(age.getText().toString());
                userDaoOrm.add(user);
                Toast.makeText(getBaseContext(), "新增成功", Toast.LENGTH_SHORT).show();
            }
        });
        select.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                list = userDaoOrm.select();
                show.setText(list.toString());
                List mydate = new ArrayList();
                for (User u : list) {
                    mydate.add(u.getUserId() + ":" + u.getName() + ":" + u.getAge());
                    ArrayAdapter aa = new ArrayAdapter(getBaseContext(), android.R.layout.simple_list_item_1, mydate);
                    sp.setAdapter(aa);
                }
                sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> parent, View view, int position, long idd) {
                        String str = sp.getSelectedItem().toString();
                        if (!str.equals("")) {
                            String userid = str.split(":")[0];
                            User user = userDaoOrm.selectUser(userid);
                            name.setText(user.getName().toString());
                            id.setText(user.getUserId().toString());
                            age.setText(user.getAge().toString());
                        }
                    }
                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {

                    }
                });
            }  });

        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!id.getText().toString().equals("")){
                    User u=new User();
                    u.setUserId(id.getText().toString());
                    userDaoOrm.delete(u);
                    Toast.makeText(getBaseContext(), "刪除成功", Toast.LENGTH_SHORT).show();
                }
            }
        });
        //查詢一個
        update.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String uid=id.getText().toString();
                User u=userDaoOrm.selectUser(uid);
                String a=u.getUserId()+":"+u.getName()+":"+u.getAge();
                show.setText(a);

            }
        });
    }
}

編程結束:下面爲效果圖
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章