写下这个,只是让自己记忆的更深。
创建数据库
首页现创建一个数据库。
如下是代码,我这里只创建了一个表,用来存储一些用户信息。
创建数据库表
/**
* 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;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
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中操作吧=-=
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);
context = this;
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。但是写的这么详细,应该还是能看明白的。