一篇搞定Android Sqlite

开门见山的说,咱不搞那么多理论的,直接来写实用的。

由于经常用到数据库存储,多以写一篇博文分享下经验,也是自己做个笔记。直接上代码,详情见代码中的注释。


import java.util.ArrayList;
import java.util.Calendar;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.UrlQuerySanitizer.ValueSanitizer;
import android.util.Log;
import com.mct.blogrssreader.R;
import com.mct.model.Channel;
import com.mct.model.ChannelListItem;
import com.mct.model.Item;
import com.mct.model.Outline;
import com.mct.model.Reply;
import com.mct.model.User;

/**
 * @author 作者 E-mail:
 * @version 创建时间:2020-05-22 下午3:18:03 类说明
 */
public class NewsDataBaseAdapter {
	// 数据库名称
	private static final String DB_NAME = "my_rss_db";

	// ========================新闻Outline开始===========================//
	public static final String OUTLINE_TABLE = "outline_tb";

	public static final String KEY_OUTLINE_ID = "_id";
	public static final String KEY_OUTLINE_TITLE = "outline_title";
	public static final String KEY_OUTLINE_XMLURL = "xmlurl";
	private static final String CREATE_OUTLINE_TABLE_SQL = "create table outline_tb (_id integer primary key autoincrement, "
			+ "outline_title text not null, xmlurl text not null)";
	// ========================新闻Outline开始===========================//

	// ========================新闻item开始===========================//
	// 数据库表
	public static final String NEWS_TABLE             = "new_tb";
	// 新闻id(数据库id)
	public static final String KEY_NEWS_ROWID         = "_id";
	// 新闻分类id
	public static final String KEY_NES_OUTLINE_ID     = "outline_id";
	// 标题
	public static final String KEY_NEWS_TITLE         = "title";
	// 链接
	public static final String KEY_NEWS_LINK          = "link";
	// 发布日期
	public static final String KEY_NEWS_PUBDATE       = "pubdate";
	// 分类
	public static final String KEY_NEWS_CATEGORY      = "category";
	// 描述
	public static final String KEY_NEWS_DESCRIPTION   = "description";
	// 作者
	public static final String KEY_NEWS_AUTHOR        = "author";

	private static final String CREATE_NEWS_TABLE_SQL = "create table new_tb (_id integer primary key autoincrement, "
			+ "outline_id integer not null,"
			+ "title text not null, link text not null,"
			+ "pubdate text,category text,"
			+ "description text,"
			+ "author text)";

	// ========================新闻item结束===========================//

	// ========================新闻评论开始===========================//
	// 数据表名
	public static final String REPLY_TABLE             = "reply_tb";
	// id字段
	public static final String KEY_REPLY_ID            = "_id";
	// 评论新闻id
	public static final String KEY_REPLY_NEWS_ID       = "news_id";
	// 评论人名称
	public static final String KEY_REPLY_AUTHOR        = "reply_author";
	// 评论内容
	public static final String KEY_REPLY_CONTENRS      = "reply_contents";
	// 当前楼层的底楼id
	public static final String KEY_REPLY_PARENT        = "reply_parent_id";
	// 评论日期
	public static final String KEY_REPLY_DATE          = "reply_date";

	private static final String CREATE_REPLY_TABLE_SQL = "create table reply_tb (_id integer primary key autoincrement, "
			+ "news_id integer not null, reply_author text not null, reply_contents text not null,"
			+ "reply_parent_id integer not null,reply_date text not null)";

	// ========================新闻评论结束===========================//

	// ========================用户信息开始===========================//
	// 用户表名称
	public static final String USER_TABLE             = "user_tb";
	// 用户id
	public static final String KEY_USER_ID            = "_id";
	// 用户名
	public static final String KEY_USER_NAME          = "name";
	// 用户密码
	public static final String KEY_USER_PASSWORD      = "password";

	private static final String CREATE_USER_TABLE_SQL = "create table user_tb (_id integer primary key autoincrement, "
			+ "name text not null, password text not null)";

	// ========================用户信息结束===========================//

	// ========================用户评分开始===========================//
	// 用户评分表
	public static final String SCORE_TABLE 				= "score_tb";

	// 评分id
	public static final String KEY_SCORE_ID 			= "_id";

	// 评分的新闻id
	public static final String KEY_SCORE_NEWS_ID 		= "news_id";

	// 1分票数字段
	public static final String KEY_SCORE_ONE 			= "one";

	// 2分票数字段
	public static final String KEY_SCORE_TWO 			= "two";

	// 3分票数字段
	public static final String KEY_SCORE_THREE 			= "three";

	// 4分票数字段
	public static final String KEY_SCORE_FOUR 			= "four";

	// 5分票数字段
	public static final String KEY_SCORE_FIVE 			= "five";

	private static final String CREATE_SCORE_TABLE_SQL  = "create table score_tb (_id integer primary key autoincrement, "
			+ "news_id integer not null, one integer, two integer, three integer, "
			+ "four integer, five integer)";
	// ========================用户评分结束===========================//

	private MyDataBaseOpenHelper mOpenHelper;

	private SQLiteDatabase mDb;

	private static NewsDataBaseAdapter mNewsDataBaseAdapter;

	class MyDataBaseOpenHelper extends SQLiteOpenHelper {

		public MyDataBaseOpenHelper(Context context) {
			super(context, DB_NAME, null, 1);
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			db.execSQL(CREATE_OUTLINE_TABLE_SQL);
			db.execSQL(CREATE_NEWS_TABLE_SQL);
			db.execSQL(CREATE_REPLY_TABLE_SQL);
			db.execSQL(CREATE_USER_TABLE_SQL);
			db.execSQL(CREATE_SCORE_TABLE_SQL);
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			db.execSQL("DROP TABLE IF EXISTS outline_tb");
			db.execSQL("DROP TABLE IF EXISTS new_tb");
			db.execSQL("DROP TABLE IF EXISTS reply_tb");
			db.execSQL("DROP TABLE IF EXISTS user_tb");
			db.execSQL("DROP TABLE IF EXISTS score_tb");
			onCreate(db);
		}

	}

	public static NewsDataBaseAdapter shareNewsBaseAdapter(Context context) {
		if (mNewsDataBaseAdapter == null) {
			mNewsDataBaseAdapter = new NewsDataBaseAdapter(context);
		}
		return mNewsDataBaseAdapter;
	}

	private NewsDataBaseAdapter(Context context) {
		mOpenHelper = new MyDataBaseOpenHelper(context);
		openSQLiteDatabase();
	}

	public void openSQLiteDatabase() {
		mDb = mOpenHelper.getWritableDatabase();
	}

	public void closeSQLiteDatabase() {
		mDb.close();
		mOpenHelper.close();
		mDb = null;
		mNewsDataBaseAdapter = null;
	}

	/**
	 * 向新闻类型表插入数据
	 * @param outline_title
	 *            类型标题
	 * @param xmlurl
	 *            类型xml文件的url地址
	 */
	public void insertOutline(String outline_title, String xmlurl) {
		ContentValues values = new ContentValues();
		values.put(KEY_OUTLINE_TITLE, outline_title);
		values.put(KEY_OUTLINE_XMLURL, xmlurl);
		mDb.insert(OUTLINE_TABLE, null, values);
	}

	/**
	 * 清除历史记录以便刷新数据
	 */
	public void clearReadBlog() {
		mDb.delete(NEWS_TABLE, null, null);
		mDb.delete(REPLY_TABLE, null, null);
	}

	/**
	 * 查询分类,获取查询指针
	 * @return 返回类型查询指针
	 */
	public Cursor queryOutline() {
		String columns[] = { KEY_OUTLINE_ID, KEY_OUTLINE_TITLE,
				KEY_OUTLINE_XMLURL };
		Cursor cursor = mDb.query(OUTLINE_TABLE, columns, null, null, null,
				null, null);
		return cursor;
	}

	/**
	 * 获取新闻类型
	 * @return
	 */
	public ChannelListItem getOutlines() {
		ChannelListItem outlines = new ChannelListItem();
		outlines.setChannelTitle("博客中心");
		Cursor cursor = queryOutline();
		// cursor.moveToFirst();
		ArrayList<Outline> outlineList = new ArrayList<Outline>();
		while (cursor.moveToNext()) {
			int id = cursor.getInt(cursor.getColumnIndex(KEY_OUTLINE_ID));
			String outlineTitle = cursor.getString(cursor.getColumnIndex(KEY_OUTLINE_TITLE));
			String xmlUrl = cursor.getString(cursor.getColumnIndex(KEY_OUTLINE_XMLURL));
			Outline outline = new Outline(id, outlineTitle, xmlUrl);
			outlineList.add(outline);
		}
		outlines.setOutlines(outlineList);
		cursor.close();
		return outlines;
	}

	/**
	 * 插入新闻
	 * 
	 * @param outline_id
	 * @param title
	 * @param link
	 * @param pubdate
	 * @param category
	 * @param description
	 * @param author
	 */
	public void insertNews(int outline_id, String title, String link,String pubdate, String category, String description, String author) {
		ContentValues values = new ContentValues();
		values.put(KEY_NES_OUTLINE_ID, outline_id);
		values.put(KEY_NEWS_TITLE, title);
		values.put(KEY_NEWS_LINK, link);
		values.put(KEY_NEWS_PUBDATE, pubdate);
		values.put(KEY_NEWS_CATEGORY, category);
		values.put(KEY_NEWS_DESCRIPTION, description);
		values.put(KEY_NEWS_AUTHOR, author);
		mDb.insert(NEWS_TABLE, null, values);
	}

	/**
	 * 查询新闻
	 * @param outline_id
	 * @return
	 */
	public Cursor queryChannel(int outline_id) {
		String columns[] = { KEY_NEWS_ROWID, KEY_NES_OUTLINE_ID, KEY_NEWS_TITLE, KEY_NEWS_LINK, KEY_NEWS_PUBDATE, KEY_NEWS_CATEGORY, KEY_NEWS_DESCRIPTION, KEY_NEWS_AUTHOR };
		Cursor cursor = mDb.query(NEWS_TABLE, columns, "outline_id = "+ outline_id, null, null, null, null);
		return cursor;
	}

	/**
	 * 根据类型id获取新闻
	 * 
	 * @param outline_id
	 * @return
	 */
	public Channel getChannel(int outline_id) {
		Channel channel = new Channel();
		Cursor cursor = queryChannel(outline_id);
		ArrayList<Item> items = new ArrayList<Item>();
		// cursor.moveToFirst();
		while (cursor.moveToNext()) {
			Item item = getItemFromCursor(cursor);
			items.add(item);
		}
		channel.setItems(items);
		cursor.close();
		return channel;
	}

	/**
	 * 从查询指针中获取新闻对象
	 * 
	 * @param cursor
	 * @return
	 */
	public Item getItemFromCursor(Cursor cursor) {
		int id = cursor.getInt(cursor.getColumnIndex(KEY_NEWS_ROWID));
		String title = cursor.getString(cursor.getColumnIndex(KEY_NEWS_TITLE));
		String link = cursor.getString(cursor.getColumnIndex(KEY_NEWS_LINK));
		String pubDate = cursor.getString(cursor.getColumnIndex(KEY_NEWS_PUBDATE));
		String category = cursor.getString(cursor.getColumnIndex(KEY_NEWS_CATEGORY));
		String description = cursor.getString(cursor.getColumnIndex(KEY_NEWS_DESCRIPTION));
		String author = cursor.getString(cursor.getColumnIndex(KEY_NEWS_AUTHOR));
		Item item = new Item(id, title, link, pubDate, category, description, author);
		return item;
	}

	/**
	 * 根据新闻id查找新闻
	 * 
	 * @param news_id
	 * @return
	 */
	public Item queryItem(int news_id) {
		String columns[] = { KEY_NEWS_ROWID, KEY_NES_OUTLINE_ID, KEY_NEWS_TITLE, KEY_NEWS_LINK, KEY_NEWS_PUBDATE, KEY_NEWS_CATEGORY, KEY_NEWS_DESCRIPTION, KEY_NEWS_AUTHOR };
		Cursor cursor = mDb.query(NEWS_TABLE, columns, "_id = " + news_id, null, null, null, null);
		Item item = null;
		if (cursor.getCount() > 0) {
			cursor.moveToFirst();
			item = getItemFromCursor(cursor);
		}
		cursor.close();
		return item;
	}

	/**
	 * 添加新的盖楼评论
	 * 
	 * @param news_id
	 * @param author
	 * @param contents
	 * @param parent
	 */
	public boolean insertNewReply(long news_id, String author, String contents, int parent) {
		ContentValues values = new ContentValues();
		values.put(KEY_REPLY_AUTHOR, author);
		values.put(KEY_REPLY_CONTENRS, contents);
		values.put(KEY_REPLY_PARENT, parent);
		values.put(KEY_REPLY_NEWS_ID, news_id);
		values.put(KEY_REPLY_DATE, getCurrentTime());
		long inserId = mDb.insert(REPLY_TABLE, null, values);
		if (inserId > -1) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 插入普通评论
	 * 
	 * @param news_id
	 * @param author
	 * @param contents
	 */
	public boolean insertNewReply(long news_id, String author, String contents) {
		// 普通评论作为独立楼层,所以parent直接设置为-1
		return insertNewReply(news_id, author, contents, -1);
	}

	/**
	 * 获取某条新闻下的盖楼的列表
	 * 
	 * @param new_id
	 * @return
	 */
	public ArrayList<ArrayList<Reply>> getReplyList(long new_id) {
		Cursor cursor = queryFromReplyTable("news_id = " + new_id);
		ArrayList<ArrayList<Reply>> mList = new ArrayList<ArrayList<Reply>>();
		while (cursor.moveToNext()) {
			// 最顶楼层部分获取
			ArrayList<Reply> list = new ArrayList<Reply>();
			Reply r = getReplyByCursor(cursor);
			list.add(r);
			int parent = r.getParent();
			if (parent != -1) {
				getBaseTower(mDb, list, new_id, parent);
			}
			mList.add(list);
		}
		cursor.close();
		return mList;
	}

	/**
	 * 所有底楼回复的获取
	 * 
	 * @param db
	 * @param list
	 * @param new_id
	 * @param parent
	 */
	public void getBaseTower(SQLiteDatabase db, ArrayList<Reply> list,
			long new_id, long parent) {
		Cursor cursor = queryFromReplyTable("_id = " + parent
				+ " AND news_id = " + new_id);
		if (cursor.getCount() > 0) {
			cursor.moveToFirst();
			Reply reply = getReplyByCursor(cursor);
			// 把盖楼的底楼添加到盖楼前面
			list.add(reply);
			int thisParent = reply.getParent();
			if (thisParent != -1) {
				getBaseTower(db, list, new_id, thisParent);
			}
		}
	}

	/**
	 * 从回复表中查询数据
	 * 
	 * @param where
	 * @return
	 */
	private Cursor queryFromReplyTable(String where) {
		String[] columns = { KEY_REPLY_ID, KEY_REPLY_NEWS_ID, KEY_REPLY_AUTHOR, KEY_REPLY_CONTENRS, KEY_REPLY_PARENT, KEY_REPLY_DATE };
		Cursor cursor = mDb.query(REPLY_TABLE, columns, where, null, null, null, KEY_REPLY_ID + " DESC");
		return cursor;
	}

	/**
	 * 将数据库中数据转换为回复对象
	 * 
	 * @param cursor
	 * @return
	 */
	private Reply getReplyByCursor(Cursor cursor) {
		int id = cursor.getInt(cursor.getColumnIndex(KEY_REPLY_ID));
		String author = cursor.getString(cursor.getColumnIndex(KEY_REPLY_AUTHOR));
		String contents = cursor.getString(cursor.getColumnIndex(KEY_REPLY_CONTENRS));
		String reply_date = cursor.getString(cursor.getColumnIndex(KEY_REPLY_DATE));
		int parent = cursor.getInt(cursor.getColumnIndex(KEY_REPLY_PARENT));
		int news_id = cursor.getInt(cursor.getColumnIndex(KEY_REPLY_NEWS_ID));
		Reply r = new Reply(id, news_id, reply_date, author, contents, parent);
		return r;
	}

	/**
	 * 向用户数据表插入用户名和密码
	 * 
	 * @param userName
	 *            用户名
	 * @param password
	 *            密码
	 */
	public long inserUser(String userName, String password) {
		ContentValues values = new ContentValues();
		values.put(KEY_USER_NAME, userName);
		values.put(KEY_USER_PASSWORD, password);
		long inserId = mDb.insert(USER_TABLE, null, values);
		return inserId;
	}

	/**
	 * 获取新闻评分
	 * 
	 * @param new_id
	 * @return
	 */
	public int[] getScore(long new_id) {
		int[] score = new int[5];
		String columns[] = { KEY_SCORE_NEWS_ID, KEY_SCORE_NEWS_ID,
				KEY_SCORE_ONE, KEY_SCORE_TWO, KEY_SCORE_THREE, KEY_SCORE_FOUR,
				KEY_SCORE_FIVE };
		Cursor cursor = mDb.query(SCORE_TABLE, columns, KEY_SCORE_NEWS_ID + "="
				+ new_id, null, null, null, null);
		while (cursor.moveToNext()) {
			score[0] = cursor.getInt(cursor.getColumnIndex(KEY_SCORE_ONE));
			score[1] = cursor.getInt(cursor.getColumnIndex(KEY_SCORE_TWO));
			score[2] = cursor.getInt(cursor.getColumnIndex(KEY_SCORE_THREE));
			score[3] = cursor.getInt(cursor.getColumnIndex(KEY_SCORE_FOUR));
			score[4] = cursor.getInt(cursor.getColumnIndex(KEY_SCORE_FIVE));
		}
		cursor.close();
		return score;
	}

	/**
	 * 对新闻进行评分
	 * 
	 * @param score
	 * @param news_id
	 * @return
	 */
	public boolean updateScore(int score, long news_id) {
		Cursor c = mDb.query(SCORE_TABLE, null, KEY_SCORE_NEWS_ID + "="
				+ news_id, null, null, null, null);
		if (c.getCount() <= 0) {
			ContentValues values = new ContentValues();
			values.put(KEY_SCORE_NEWS_ID, news_id);
			values.put(KEY_SCORE_ONE, 0);
			values.put(KEY_SCORE_TWO, 0);
			values.put(KEY_SCORE_THREE, 0);
			values.put(KEY_SCORE_FOUR, 0);
			values.put(KEY_SCORE_FIVE, 0);
			long rowId = mDb.insert(SCORE_TABLE, null, values);
		}
		c.close();
		String key = "";
		switch (score) {
		case 1:
			key = KEY_SCORE_ONE;
			break;
		case 2:
			key = KEY_SCORE_TWO;
			break;
		case 3:
			key = KEY_SCORE_THREE;
			break;
		case 4:
			key = KEY_SCORE_FOUR;
			break;
		case 5:
			key = KEY_SCORE_FIVE;
			break;
		}
		String sql = "update score_tb set " + key + "=" + key + "+1 where "
				+ KEY_SCORE_NEWS_ID + "=" + news_id;
		Log.e("m_tag", "==sql:" + sql);
		mDb.execSQL(sql);
		// long rowId = mDb.update(SCORE_TABLE, values, KEY_SCORE_NEWS_ID +
		// "="
		// + news_id, null);
		return true;
	}

	/**
	 * 根据用户名和密码查询用户数据库
	 * 
	 * @param userName
	 * @param password
	 * @return
	 */
	public User qeryUser(String userName, String password) {
		User user = null;
		long user_id = -1;
		String[] columns = { KEY_USER_ID, KEY_USER_NAME, KEY_USER_PASSWORD };
		Cursor cursor = mDb.query(USER_TABLE, columns,
				"name = ? AND password = ?",
				new String[] { userName, password }, null, null, null);
		while (cursor.moveToNext()) {
			user_id = cursor.getLong(cursor.getColumnIndex(KEY_USER_ID));
			user = new User(user_id, userName, password);
		}
		cursor.close();
		return user;
	}

	/**
	 * 获取当前日期
	 * 
	 * @return
	 */
	private String getCurrentTime() {
		Calendar calendar = Calendar.getInstance();
		String created = calendar.get(Calendar.YEAR) + "年"
				+ (calendar.get(Calendar.MONTH) + 1) + "月"
				+ calendar.get(Calendar.DAY_OF_MONTH) + "日"
				+ calendar.get(Calendar.HOUR_OF_DAY) + "时"
				+ calendar.get(Calendar.MINUTE) + "分";
		return created;
	}

	/**
	 * 分享文本
	 * 
	 * @param context
	 * @param title
	 * @param text
	 */
	public static void shareText(Context context, String title, String text) {
		Intent intent = new Intent(Intent.ACTION_SEND);
		intent.setType("text/plain");
		intent.putExtra(Intent.EXTRA_SUBJECT, title);
		intent.putExtra(Intent.EXTRA_TEXT, text);
		context.startActivity(Intent.createChooser(intent,
				context.getString(R.string.share_to)));
	}



	public boolean insterMedia(String type, String lane, String speed, String latitude, String altitude, String longitude, String timestamp, String path/*, String mediaId*/) {
		SQLiteDatabase db = DatabaseManager.getInstance().getWritableDatabase();
		try {
				ContentValues values = new ContentValues();
				values.put("type",      type);
				values.put("lane",      lane);
				values.put("speed",     speed);
				values.put("latitude",  latitude);
				values.put("altitude",  altitude);
				values.put("longitude", longitude);
				values.put("timestamp", timestamp);
				values.put("path",      path);
				values.put("files",     path);
				
			return db.insert(TableCollection.Params.MEDIA_TAB, null, values) > 0;

		} catch (Exception e) {
		} finally {
			DatabaseManager.getInstance().closeDatabase();
		}
		return false;
	}
	
    public synchronized long getTimeStamp(String mediaId) {
        Cursor cursor  = null;
        long timeStamp = 0;
        SQLiteDatabase mDb = DatabaseManager.getInstance().getWritableDatabase();
        try {
        	 cursor = mDb.query(TableCollection.Params.MEDIA_TAB, new String[]{ "timestamp" }, " path like '%" + mediaId + "%'", null, null, null, null);
                
			if (cursor != null && cursor.moveToFirst()) {
				timeStamp = cursor.getLong(cursor.getColumnIndex("timestamp"));
			}
			
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != cursor)   cursor.close();
            DatabaseManager.getInstance().closeDatabase();
        }
        return timeStamp;
    }
    
	/*public boolean deleteMedia(String mediaId) {
		SQLiteDatabase db = DatabaseManager.getInstance().getWritableDatabase();
		try {
			return db.delete(TableCollection.Params.MEDIA_TAB, " mediaId = ? ", new String[] { mediaId }) > 0;
			
		} catch (Exception e) {
		} finally {
			DatabaseManager.getInstance().closeDatabase();
		}
		return false;
	}*/
	
	/*public int queryCount(String mediaId) {
		Cursor cursor = null;
		SQLiteDatabase db = DatabaseManager.getInstance().getWritableDatabase();
		try {
			String[] columns = { "type", "lane", "speed", "latitude", "altitude", "longitude", "timestamp", "path", "mediaId" }; 

			cursor = db.query(TableCollection.Params.MEDIA_TAB, columns, "mediaId = ? ", new String[] { mediaId }, null, null, null);
			
			if (cursor != null && cursor.moveToFirst())  {
				
				return cursor.getCount();
			}  
		} catch (Exception e) {
		} finally {
			if (null != cursor)   cursor.close();
			DatabaseManager.getInstance().closeDatabase();
		}
		return 0;
	}*/
	
    /*public synchronized MediaBean getMediaBean(String stamp) {
    	MediaBean bean = null;
        Cursor cursor  = null;
        SQLiteDatabase mDb = DatabaseManager.getInstance().getWritableDatabase();
        try { 
        	 String[] columns = { "type", "lane", "speed", "latitude", "altitude", "longitude", "timestamp", "path" };
        	 
        	 cursor = mDb.query(TableCollection.Params.MEDIA_TAB, columns, " timestamp = ? ", new String[] { stamp }, null, null, null);
                
                if(cursor != null && cursor.moveToFirst()) {
                	bean = new MediaBean();
                	
                	bean.setType(cursor.getString(cursor.getColumnIndex("type")));
	       			bean.setTimestamp(cursor.getString(cursor.getColumnIndex("timestamp")));
	       			bean.setSpeed(cursor.getString(cursor.getColumnIndex("speed")));
	       			bean.setPath(cursor.getString(cursor.getColumnIndex("path")));
	       			bean.setLongitude(cursor.getString(cursor.getColumnIndex("longitude")));
	       			bean.setLatitude(cursor.getString(cursor.getColumnIndex("latitude")));
	       			bean.setLane(cursor.getString(cursor.getColumnIndex("lane")));
	       			bean.setAltitude(cursor.getString(cursor.getColumnIndex("altitude")));
                }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != cursor)   cursor.close();
            DatabaseManager.getInstance().closeDatabase();
        }
        return bean;
    }*/
    
  // SELECT * FROM mediaTable WHERE INSTR('/storage/sdcard0/AdasDmsVedio/1082786211.mp4', path)
	public synchronized MediaBean getMediaBean(String mediaId) {
		MediaBean bean     = null;
		Cursor cursor      = null;
		SQLiteDatabase mDb = DatabaseManager.getInstance().getWritableDatabase();
		try {

			String[] columns = { "_id", "type", "lane", "speed", "latitude", "altitude", "longitude", "timestamp", "path", "files" };

			cursor = mDb.query(TableCollection.Params.MEDIA_TAB, columns, " path like '%" + mediaId + "%'", null, null, null, null);

			if (cursor != null && cursor.moveToFirst()) {
				
				 do {
					 String getPath = cursor.getString(cursor.getColumnIndex("path"));
					 
					 if (getPath.contains(mediaId)) {
						 
						 bean = new MediaBean();
						 
						 	bean.setId(cursor.getString(cursor.getColumnIndex("_id")));
							bean.setType(cursor.getString(cursor.getColumnIndex("type")));
							bean.setTimestamp(cursor.getString(cursor.getColumnIndex("timestamp")));
							bean.setSpeed(cursor.getString(cursor.getColumnIndex("speed")));
							bean.setPath(cursor.getString(cursor.getColumnIndex("path")));
							bean.setLongitude(cursor.getString(cursor.getColumnIndex("longitude")));
							bean.setLatitude(cursor.getString(cursor.getColumnIndex("latitude")));
							bean.setLane(cursor.getString(cursor.getColumnIndex("lane")));
							bean.setAltitude(cursor.getString(cursor.getColumnIndex("altitude")));
							bean.setFiles(cursor.getString(cursor.getColumnIndex("files")));
							
							break;
					 } 
					 
				 }while(cursor.moveToNext());
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (null != cursor)
				cursor.close();
			DatabaseManager.getInstance().closeDatabase();
		}
		return bean;
	}
  
	public boolean deleteMedia(String rowId) {
		SQLiteDatabase db = DatabaseManager.getInstance().getWritableDatabase();
		try {
			return db.delete(TableCollection.Params.MEDIA_TAB, " _id = ? ", new String[] { rowId }) > 0;
			
		} catch (Exception e) {
		} finally {
			DatabaseManager.getInstance().closeDatabase();
		}
		return false;
	}
	
//	public boolean deleteMedia() {
//		SQLiteDatabase db = DatabaseManager.getInstance().getWritableDatabase();
//		try {
//			return db.delete(TableCollection.Params.MEDIA_TAB, null, null) > 0;
//			
//		} catch (Exception e) {
//		} finally {
//			DatabaseManager.getInstance().closeDatabase();
//		}
//		return false;
//	}
	
	//  cursor = mDb.query(TableCollection.Params.MEDIA_TAB, new String[]{ "timestamp" }, " path like '%" + mediaId + "%'", null, null, null, null);
//	public boolean deleteMediaId(String id) {
//		SQLiteDatabase db = DatabaseManager.getInstance().getWritableDatabase();
//		try {
//			return db.delete(TableCollection.Params.MEDIA_TAB, " path like ? '%" + id + "%'", null) > 0;
			
//			return db.delete(TableCollection.Params.MEDIA_TAB, " path = ? ", new String[]{ id }) > 0;
//			
//		} catch (Exception e) {
//		} finally {
//			DatabaseManager.getInstance().closeDatabase();
//		}
//		return false;
//	}
	
	public boolean updatePath(String path, String id) {
		SQLiteDatabase mDb = DatabaseManager.getInstance().getReadableDatabase();
		try {
				ContentValues contentValue = new ContentValues();
				contentValue.put("path", path);
				
				return mDb.update(TableCollection.Params.MEDIA_TAB, contentValue, " _id = ? ", new String[]{ id }) > 0; 
		} catch (Exception e) {
		} finally {
			DatabaseManager.getInstance().closeDatabase();
		}
		return false;
	}
	
	public ArrayList<MediaBean> loadMedia() {
		SQLiteDatabase mDb = DatabaseManager.getInstance().getReadableDatabase();
		ArrayList<MediaBean> list = null;
		Cursor cursor			  = null;
        try {
        	String sql = "select * from "+TableCollection.Params.MEDIA_TAB;
        	cursor = mDb.rawQuery(sql, null);
        	
        	 if (cursor != null && cursor.moveToFirst()) {
        		 list = new ArrayList<MediaBean>();
        		 
        		 do {
        			 MediaBean bean = new MediaBean();
        			 
        			 bean.setId(cursor.getString(cursor.getColumnIndex("_id")));
        			 bean.setType(cursor.getString(cursor.getColumnIndex("type")));
        			 bean.setLane(cursor.getString(cursor.getColumnIndex("lane")));
        			 bean.setSpeed(cursor.getString(cursor.getColumnIndex("speed")));
        			 bean.setLatitude(cursor.getString(cursor.getColumnIndex("latitude")));
        			 bean.setAltitude(cursor.getString(cursor.getColumnIndex("altitude")));
        			 bean.setLongitude(cursor.getString(cursor.getColumnIndex("longitude")));
        			 bean.setTimestamp(cursor.getString(cursor.getColumnIndex("timestamp")));
        			 bean.setPath(cursor.getString(cursor.getColumnIndex("path")));
        			 bean.setFiles(cursor.getString(cursor.getColumnIndex("files")));
        			 
        			 list.add(bean);
        			 
				} while (cursor.moveToNext());
        	 }
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
            if (null != cursor)   cursor.close();
            DatabaseManager.getInstance().closeDatabase();
		}
        return list;
	}
	
	/*public ArrayList<MediaBean> getSameMedia(String timeStamp) {
		SQLiteDatabase mDb = DatabaseManager.getInstance().getReadableDatabase();
		ArrayList<MediaBean> list = null;
		Cursor cursor			  = null;
        try {
        	String sql = "select * from "+TableCollection.Params.MEDIA_TAB + " where timestamp = " + timeStamp;
        	cursor = mDb.rawQuery(sql, null);
        	
        	 if (cursor != null && cursor.moveToFirst()) {
        		 list = new ArrayList<MediaBean>();
        		 
        		 Mina4Log.d(JSATLApp.TAG, "--cursor != null--");
        		 
        		 do {
        			 MediaBean bean = new MediaBean();
        			 
        			 bean.setType(cursor.getString(cursor.getColumnIndex("type")));
        			 bean.setLane(cursor.getString(cursor.getColumnIndex("lane")));
        			 bean.setMediaId(cursor.getString(cursor.getColumnIndex("mediaId")));
        			 bean.setSpeed(cursor.getString(cursor.getColumnIndex("speed")));
        			 bean.setLatitude(cursor.getString(cursor.getColumnIndex("latitude")));
        			 bean.setAltitude(cursor.getString(cursor.getColumnIndex("altitude")));
        			 bean.setLongitude(cursor.getString(cursor.getColumnIndex("longitude")));
        			 bean.setTimestamp(cursor.getString(cursor.getColumnIndex("timestamp")));
        			 bean.setPath(cursor.getString(cursor.getColumnIndex("path")));
        			 
        			 list.add(bean);
        			 
				} while (cursor.moveToNext());
        	 }
		} catch (Exception e) {
			e.printStackTrace();
			Mina4Log.d(JSATLApp.TAG, "--getSameMedia--" + e.getMessage());
		} finally {
            if (null != cursor)   cursor.close();
            DatabaseManager.getInstance().closeDatabase();
		}
        return list;
	}*/



}

调用直接使用 NewsDataBaseAdapter.shareNewsBaseAdapter(Context).  So easy~~~

猜你喜欢

转载自blog.csdn.net/u011694328/article/details/106296015