Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android中的SQLite數據庫存儲

android中的SQLite數據庫存儲

編輯:關於Android編程

創建數據庫

首頁現創建一個數據庫。 如下是代碼,我這裡只創建了一個表,用來存儲一些用戶信息。

創建數據庫表

/**
 * Created by acer on 2016/9/7.
 * @author Rine
 * 創建數據庫
 */
public class MyOpenHelper extends SQLiteOpenHelper
{
    /**
     * 數據庫版本
     */
    public static final int VERSION = 1;
    /**
     * 數據庫名
     */
    public static final String DB_NAME = "MyOneApp.db";
    private Context mcontext;

    /**
     * 用戶臨時數據(UserTemp)建表語句
     */
    public static final String CREATE_USERTEMP = "create table UserTemp ("
            + "id integer primary key autoincrement, "         //id主鍵
            + "user_name text, "                               //用戶賬號
            + "user_autograph text,"                           //用戶簽名
            + "user_idName text,"                              //用戶網名
            + "user_imgAddress text)";                         //用戶頭像地址 

 
    public MyOpenHelper(Context context)
    {
        super(context, DB_NAME, null, VERSION);
        mcontext = context;
    }

    /**
     * 創建表
     */
    @Override
    public void onCreate(SQLiteDatabase db)
    {
        db.execSQL(CREATE_USERTEMP);
        LogInfo.log("數據創建成功");
    }

    /**
     * 數據庫升級
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        // TODO Auto-generated method stub

    }
}

生成數據庫表

接下來你需要在主程序裡去創建這個數據庫,代碼如下: 比如我在MainActivity中的代碼。
public class MainActivity extends Activity{
	private MyOpenHelper dbHelper;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		dbHelper = new MyOpenHelper(context);
	        dbHelper.getWritableDatabase();//這句話在下面的創建實例及DAO注釋掉。
	}
}
當然,他只在第一次創建才有效(也就是當沒有改表的時候),當創建了該表,第二次就不會重復創建。

查看數據庫表

查看數據庫表需要配置環境變量,然後使用adb工具進行查看(adb工具的使用,即配置環境變量這裡就不詳細說了)。 打開命令行界面,輸入adb shell就進入到設備的控制台。 然後使用cd命令進行到/data/data/com.example.databasetest/databases/目錄下,並使用ls命令查看該目錄下的文件。   .sqlite命令可以打開數據庫。使用方式為:.sqlite3 後面加數據庫名。 .table命令可以查看表。使用方式直接輸入: .table .schema命令可以查看他們的建表語句 .使用方式直接輸入: .schema .exit或.quit可以退出數據庫的編輯 exit命令可以退出設備控制台    

使用數據庫

生成實體類

現創建一個實體類,以下還是關於一些臨時存儲的一些信息:  
/**
 * Created by acer on 2016/9/7.
 * @author Rine
 * APP臨時狀態(UserTemp)的實例
 */
public class UserTemp {
    /**id**/
    private int id;

    /**用戶賬戶**/
    private String name;

    /**用戶簽名**/
    private String autograph;

    /**用戶網名**/
    private String idName;

    /**用戶頭像地址**/
    private String imgAddress;

    public UserTemp()
    {
        super();
    }

    public UserTemp(int id, String name, String autograph, String idName,
                    String imgAddress)
    {
        super();
        this.id = id;
        this.name = name;
        this.autograph = autograph;
        this.idName = idName;
        this.imgAddress = imgAddress;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getAutograph() {
        return autograph;
    }

    public void setAutograph(String autograph) {
        this.autograph = autograph;
    }

    public String getIdName() {
        return idName;
    }

    public void setIdName(String idName) {
        this.idName = idName;
    }

    public String getImgAddress() {
        return imgAddress;
    }

    public void setImgAddress(String imgAddress) {
        this.imgAddress = imgAddress;
    }
}

數據庫操作封裝

再然後就是根據這個實體類,封裝一些常用的數據庫操作: userDao類
/**
 * Created by acer on 2016/9/7.
 * @author Rine
 * UserTemp   DAO的管理
 */
public class UserTempDAO {
    /**創建CloudOnlyDB對象 **/
    private MyOpenHelper helper;

    /**創建SQLiteDatabase對象 **/
    private SQLiteDatabase db;

    /** 定義構造函數 **/
    public UserTempDAO(Context context)
    {
        helper = new MyOpenHelper(context); //初始化CloudOnlyDB對象
        db = helper.getWritableDatabase(); //初始化SQLiteDatabase對象, 將上面MainActivity中的這句話注釋掉。
    }

    /**
     * 添加AppTemp信息
     * @param userTemp
     */
    public void add(UserTemp userTemp)
    {
//	   db = helper.getWritableDatabase(); //初始化SQLiteDatabase對象
        /** 執行添加操作 **/
        db.execSQL("insert into UserTemp(user_name,user_autograph,user_idName,user_imgAddress)"
                + "values(?,?,?,?)", new Object[]
                {userTemp.getName(),userTemp.getAutograph()
                        ,userTemp.getIdName(),userTemp.getImgAddress()});
    }

    /**
     * 根據account 查找值
     * @param user_name
     * @return
     */
    public List find(String user_name )
    {
        List userTemp = new ArrayList();
// 	  Cursor cursor = db.rawQuery("select * from UserTemp",null); //獲取UserTemp的值
        Cursor cursor = db.rawQuery("select * from UserTemp where user_name=?"
                ,new String[] {user_name}); //獲取UserTemp的值
// 		   將遍歷到的值存儲到UserTemp類中
        while (cursor.moveToNext())   //判斷Cursor是否有數據
        {
            //將遍歷到的值存儲到UserTemp類中
            userTemp.add(new UserTemp(cursor.getInt(cursor.getColumnIndex("id")),
                    cursor.getString(cursor.getColumnIndex("user_name")),
                    cursor.getString(cursor.getColumnIndex("user_autograph")),
                    cursor.getString(cursor.getColumnIndex("user_idName")),
                    cursor.getString(cursor.getColumnIndex("user_imgAddress"))));
        };
        return userTemp;
    }



    /**
     * 按name對UserTemp進行修改
     * @param key 鍵
     * @param value 值
     * @param name
     * 鍵的值
     * 1為簽名
     * 2為網名
     * 3為頭像地址
     */
    public void updateUserTemp(int key, String value, String name)
    {
        ContentValues values = new ContentValues();
        switch (key) {
            case 1:
                values.put("user_autograph", value);
                db.update("UserTemp", values, "user_name=?", new String[]
                        {name});
                break;
            case 2:
                values.put("user_idName", value);
                db.update("UserTemp", values, "user_name=?", new String[]
                        {name});
                break;
            case 3:
                values.put("user_imgAddress", value);
                db.update("UserTemp", values, "user_name=?", new String[]
                        {name});
                break;
            default:
                break;
        }
    }

    /**
     * 刪除全部
     */
    public void deleteAll()
    {
        db.delete("UserTemp", null, null);
    }

    /**
     * 獲取總記錄數
     * @return
     */
    public long getCount()
    {
//	   db = helper.getWritableDatabase();//初始化SQLiteDatabase對象
        Cursor cursor = db.rawQuery("select count(*) from UserTemp", null); //獲取AppTemp的記錄數
        if (cursor.moveToNext())   //判斷Cursor是否有數據
        {
            return cursor.getLong(0);          //返回總記錄數
        }
        return 0;
    }
}

再進行二次封裝

UserAccountTemp類
/**
 * Created by acer on 2016/9/7.
 * @author Rine
 * * 賬戶臨時數據
 */
public class UserAccountTemp {
    private static UserTemp userTemp;
    private static UserTempDAO userTempDAO;



    public UserAccountTemp(Context context)
    {
        userTemp = new UserTemp();
        userTempDAO = new UserTempDAO(context);
    }
    /**
     * 存儲
     * (賬戶,簽名,網名,頭像地址)
     */
    public void Save(String name, String autograph, String idName,
                     String imgAddress)
    {
        userTemp.setName(name);
        userTemp.setAutograph(autograph);
        userTemp.setIdName(idName);
        userTemp.setImgAddress(imgAddress);
        userTempDAO.add(userTemp);
    }
    /**
     * 更新
     * @param key
     * 1為簽名
     * 2為網名
     * 3為頭像地址
     * @param value 值
     * @param name  賬戶
     */
    public  void Update(int key, String value, String name)
    {
        userTempDAO.updateUserTemp(key, value, name);
    }

    /**
     * 查詢
     * @param name
     * @return Object
     */
    public List Select(String name)
    {
        if(userTempDAO.getCount() == 0)
        {
           // LogInfo.log("數據為空");
            return null;
        }
        else
        {
            
            //LogInfo.log("有數據:"+userTempDAO.getCount());
            List userTempList = new ArrayList();
            // LogInfo.log("有數據222id:"+userTempDAO.find( name).get(0).getId());
            userTempList = userTempDAO.find( name);

            return userTempList;
        }
    }

    /**
     * 刪除記錄
     */
    public  void DeleteAll()
    {
        userTempDAO.deleteAll();
    }

    /**
     * 查詢是否有數據
     * @return 有則true 無則false
     */
    public  boolean isData()
    {
        if(userTempDAO.getCount() != 0)
        {
            return true;
        }
        return false;

    }
}

最終效果使用

=-=這裡再次申明:將最開始MainActivity中的db = helper.getWritableDatabase();注釋。最開始在MainActivity中加這個是因為第一次創建數據庫做實驗。   然後我還是在MainActivity中操作吧=-=
public class MainActivity extends Activity{ private MyOpenHelper dbHelper; private UserAccountTemp userAccountTemp; private Context context; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new MyOpenHelper(context); init(); } //這個是為了驗證數據庫是否正常創建並存入數據。 private void init() { userAccountTemp = new UserAccountTemp(context); userAccountTemp.Save("2449199892","我的作品", "夏-未醒", "就是這樣"); int value = userAccountTemp.Select("2449199892").size(); Toast.makeText(context, "幾條數據:" + value, Toast.LENGTH_SHORT).show(); } } 
大功告成=-=至於DEMO,因為我集成到項目裡,所以沒有寫出一個DEMO。但是寫的這麼詳細,應該還是能看明白的。   如果有需要=-=我可以Q我。我再放上去。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved