android中的SQLite数据库存储

写下这个,只是让自己记忆的更深。


创建数据库

首页现创建一个数据库。
如下是代码,我这里只创建了一个表,用来存储一些用户信息。

创建数据库表

/**
 * 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<UserTemp> find(String user_name )
    {
        List<UserTemp> userTemp = new ArrayList<UserTemp>();
// 	  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<UserTemp> Select(String name)
    {
        if(userTempDAO.getCount() == 0)
        {
           // LogInfo.log("数据为空");
            return null;
        }
        else
        {
            
            //LogInfo.log("有数据:"+userTempDAO.getCount());
            List<UserTemp> userTempList = new ArrayList<UserTemp>();
            // 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中操作吧=-=
 <pre name="code" class="java">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我。我再放上去。




猜你喜欢

转载自blog.csdn.net/R_ine/article/details/52456312