当前位置:   article > 正文

SQLiteDataBase的基本使用_sqlitedatabase类的使用

sqlitedatabase类的使用
第一种为: 通过继承SQLiteOpenHelper 这个抽象类
  1. class MySQLiteHelper extends SQLiteOpenHelper{
  2. public MySQLiteHelper(Context context, String name,
  3. CursorFactory factory, int version) {
  4. super(context, name, factory, version);
  5. }
  6. @Override
  7. public void onCreate(SQLiteDatabase db) {
  8. String str = "CREATE TABLE "+ tableName +"(" +
  9. "taskID VARCHAR PRIMARY KEY," +
  10. "accidentAddress VARCHAR," +
  11. "accidentReportedPeople VARCHAR," +
  12. "accidentReportedPhoneNumber VARCHAR," +
  13. "accidentPlateNumber VARCHAR," +
  14. "accidentReportedNumber VARCHAR," +
  15. "customerRank VARCHAR," +
  16. "accidentNumberOfTimes VARCHAR," +
  17. "taskState VARCHAR," +
  18. "taskTime VARCHAR)";
  19. try {
  20. db.execSQL(str);
  21. Log.i("TaskSavaDataBase", "成功创建表");
  22. } catch (Exception e) {
  23. Log.i("TaskSavaDataBase", "创建表失败");
  24. }
  25. }
  26. @Override
  27. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
  28. }
  29. }

然后再实例化这个类的对象,就创建的一个数据库
 

  1. MySQLiteHelper sqlHelper = new MySQLiteHelper(this.context, dataBaseName, null, 1);
  2. data = sqlHelper.getWritableDatabase();


由于SQLiteOpenHelper是一个抽象类,我们创建一个数据库时,重载的onCreate()方法在什么时候被调用呢?答案为:在数据库第一次被创建的时候被调用,如果这个数据库已经存在了,这个方法则不会被调用。onUpgrade()方法是在数据库的version改变时,则会自动调用此方法,以用来更新数据库,这时就需重写这个方法。

 

第二种:通过SQLiteDataBase.openOrCreateDatabase()这个方法来创建数据库

  1. /** 创建SQLite数据CallData*/
  2. public void createDataBase(){
  3. String path = "/mnt/sdcard/CallData.db";
  4. File file = new File(path);
  5. data = SQLiteDatabase.openOrCreateDatabase(file, null);
  6. //data = context.openOrCreateDatabase(name, mode, null);
  7. //data的创建方法注释和未注释的都可以,事不过实现的方式不同而已,有哪些不同请看我另外一篇关于SQLite数据库的博文
  8. }

通过这个方法必须手动调用一个创建表的函数,使用SQLiteOpenHelper 在创建数据库的时候,会自动调用onCreate方法帮你创建好一个表,再次启动时则不会创建。

SQLiteDataBase 常用的方法如下:


下面介绍一个常用的操作方法:


插入数据:

这个方法用于当你插入的数据不是写死的

  1. /**
  2. * 保存任务*/
  3. public void InsertTaskData(Task_Picc task){
  4. try {
  5. String str = "INSERT INTO " + tableName +" VALUES (?,?,?,?,?,?,?,?,?,?)";
  6. //注意每个字母之间都必须空格,尤其是参数和字符之间的空格 如:"INSERT INTO " + tableName +,INTO后必须有一个空格
  7. //博主我当初就被坑了
  8. String obj[] = new String[]{
  9. task.getTaskId(),
  10. task.getAccidentAddress(),
  11. task.getAccidentReportedPeople(),
  12. task.getAccidentReportedPhoneNumber(),
  13. task.getAccidentPlateNumber(),
  14. task.getAccidentReportedNumber(),
  15. task.getCustomerRank(),
  16. task.getAccidentNumberOfTimes(),
  17. task.getTaskState(),
  18. task.getTaskTime()
  19. };
  20. data.execSQL(str, obj);
  21. Log.i("TaskSaveDataBase", "保存成功");
  22. } catch (Exception e) {
  23. Log.i("TaskSaveDataBase", "添加任务异常");
  24. }
  25. }

 下面这种插入方法,其插入的数据时写死,不能以参数的形式传入:

  1. public void InsertTaskData1(){
  2. String str = "INSERT INTO"+tableName+" (" +
  3. taskID +"," +
  4. accidentAddress +
  5. " )VALUES('234','fdf')";
  6. //VALUES 后面括号类的数据必须为字符,当初我是以参数的形式填进去的,怎么弄怎么不对
  7. try {
  8. data.execSQL(str);
  9. Log.i("TaskSaveDataBase", "插入成功");
  10. } catch (Exception e) {
  11. Log.i("TaskSaveDataBase", "插入失败");
  12. }
  13. }

 还有一个插入方法,也能用参数的形式传入:

  1. public void InsertTaskData2(){
  2. ContentValues cv = new ContentValues();
  3. cv.put(taskID,"2344");
  4. cv.put(accidentAddress, "dfd");
  5. try {
  6. data.insertOrThrow(tableName,null,cv);
  7. Log.i("TaskSaveDataBase", "插入成功");
  8. } catch (SQLException e) {
  9. Log.i("TaskSaveDataBase", "插入失败");
  10. }
  11. }

 更新数据:

  1. /**
  2. * 更新任务状态*/
  3. public void UpdateTaskStateData(String state,String taskId){
  4. try {
  5. String str = "UPDATE " + tableName + " SET taskState ="+"'"+state+"'" + " WHERE " + "taskID =" +"'"+taskId+"'";
  6. data.execSQL(str);
  7. } catch (Exception e) {
  8. Log.i("TaskSavaDataBase", "插入任务状态数据异常");
  9. }
  10. }

删除数据:

  1. /**
  2. * 删除任务数据*/
  3. public void DeleteTaskData(String taskId){
  4. try {
  5. String str = "DROP FROM " + tableName + " WHERE taskID=" +"'"+taskId+"'";
  6. data.execSQL(str);
  7. } catch (Exception e) {
  8. Log.i("TaskSaveDataBase", "删除任务异常");
  9. }
  10. }
查询数据:
  1. /**
  2. * 查询历史任务信息*/
  3. public List<Task_Picc> QueryData(String taskId){
  4. Task_Picc task_picc = new Task_Picc();
  5. List<Task_Picc> list = new ArrayList<Task_Picc>();
  6. String sql = "SELECT * FROM "+tableName+" WHERE taskID="+"'"+taskId+"'";
  7. Cursor cursor = data.rawQuery(sql, null);
  8. Log.i("TaskSaveDataBase", "准备查询"+cursor.getCount());
  9. if(cursor.moveToFirst()){
  10. Log.i("TaskSaveDataBase", "正在查询");
  11. do{
  12. Log.i("TaskSaveDataBase", "查询成功");
  13. task_picc.setTaskId(cursor.getString(0)+"ff");
  14. task_picc.setAccidentAddress(cursor.getString(1)+"ff");
  15. task_picc.setAccidentReportedPeople(cursor.getString(2)+"ff");
  16. task_picc.setAccidentReportedPhoneNumber(cursor.getString(3)+"ff");
  17. task_picc.setAccidentPlateNumber(cursor.getString(4)+"ff");
  18. task_picc.setAccidentReportedNumber(cursor.getString(5)+"ff");
  19. task_picc.setCustomerRank(cursor.getString(6)+"ff");
  20. task_picc.setAccidentNumberOfTimes(cursor.getString(7)+"ff");
  21. task_picc.setTaskState(cursor.getString(8)+"ff");
  22. task_picc.setTaskTime(cursor.getString(9)+"ff");
  23. list.add(task_picc);
  24. }while(cursor.moveToNext());
  25. cursor.close();
  26. };
  27. return list;
  28. }

 

其实对SQLiteDataBase进行操作还能够其自带的数据库操作方法,只要传入对应的参数就行。具体参考这篇文章:http://www.cnblogs.com/TerryBlog/archive/2010/06/12/1757166.html

如果有时候SQL语句忘记写了,可以上这个网站去查询:

http://www.w3school.com.cn/sql/sql_insert.asp

参考文章:

http://aina-hk55hk.iteye.com/blog/698794

http://www.efan-gz.com/2011/07/android-sqlitedatabase/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/636335
推荐阅读
相关标签
  

闽ICP备14008679号