`

Android使用SQLiteDatabase直接存取数据与图像

 
阅读更多

 

Android使用SQLiteDatabase直接存取数据与图像的简单方法如下:

package com.test;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;

import com.test.R;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Bitmap.Config;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class SQLiteDatabaseTest extends Activity {
	/** Called when the activity is first created. */
	private Button btnSave;
	private Button btnLoad;
	private Button btnClear;
	private ImageView imgView;
	private ImageView imgView2;
	private TextView txtView;
	private Bitmap bmp;
	private static SQLiteDatabase db;
	private Context mContext;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		btnSave = (Button) findViewById(R.id.btnSave);
		btnLoad = (Button) findViewById(R.id.btnLoad);
		btnClear = (Button) findViewById(R.id.btnClear);
		imgView = (ImageView) findViewById(R.id.imgView);
		imgView2 = (ImageView) findViewById(R.id.imgView2);
		txtView = (TextView) findViewById(R.id.txtView);
		btnSave.setOnClickListener(new ClickEvent());
		btnLoad.setOnClickListener(new ClickEvent());
		btnClear.setOnClickListener(new ClickEvent());
		imgView2.setImageBitmap(BitmapFactory.decodeResource(getResources(),
				R.drawable.bg));
		mContext = SQLiteDatabaseTest.this;

		// 创建数据库文件
		File path = mContext.getDir("databases", Context.MODE_WORLD_WRITEABLE);
		path = new File(path, "test.db");
		int flag = SQLiteDatabase.OPEN_READWRITE;
		flag = flag | SQLiteDatabase.CREATE_IF_NECESSARY;
		flag = flag | SQLiteDatabase.NO_LOCALIZED_COLLATORS;
                  db = SQLiteDatabase.openDatabase(path.getAbsolutePath(), null, flag);
                  // 创建表
		String sql = "create table if not exists info("
				+ "id integer primary key autoincrement,name varchar(20),"
				+ "time varchar(20),img BLOB)";
                 db.execSQL(sql);
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		if (db.isOpen()) {
		      db.close();
		}
		if(!bmp.isRecycled()){
		     bmp.recycle();
		}
	}

	class ClickEvent implements View.OnClickListener {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			if (v == btnSave) {
				Cursor c = db.rawQuery("select * from info", null);
				ContentValues values = new ContentValues();
				c.moveToFirst();
				values.put("name", "test" + (c.getCount() + 1));
				SimpleDateFormat sDateFormat = new SimpleDateFormat(
						"yyyy-MM-dd hh:mm:ss");
				String time = sDateFormat.format(new java.util.Date());
				values.put("time", time);
			    Bitmap bmp = BitmapFactory.decodeResource(getResources(),
						R.drawable.bg);
			    
				if (null != bmp) {	
					//在Bitmap上绘制标签
					Bitmap drawBmp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.ARGB_8888);
					Canvas cvs = new Canvas(drawBmp);
					Paint p = new Paint();
					p.setColor(Color.RED);
					p.setTextSize(22);
					cvs.drawBitmap(bmp, 0, 0, p);
					cvs.drawText("test" + (c.getCount() + 1), 10, 20,p);
				    //将绘制后Bitmap转为Byte[]并加入values	
					values.put("img", bmpToByteArray(drawBmp));
					drawBmp.recycle();
				}
				db.insert("info", null, values);
				c.close();
				bmp.recycle();

			} else if (v == btnLoad) {
				Cursor c = db.rawQuery("select * from info", null);
				c.moveToLast();
				if (c.isLast()) {
				       String name = c.getString(c.getColumnIndex("name"));
				       txtView.setText("name:" + name + " 共计:" + c.getCount()
							+ " 条");
				       bmp = cursorToBmp(c, c.getColumnIndex("img"));
				       imgView.setImageBitmap(bmp);
				}
				c.close();

			} else if (v == btnClear) {
				imgView.setImageBitmap(null);
			}

		}

	}

	// Bitmap to byte[]
	public byte[] bmpToByteArray(Bitmap bmp) {
	    // Default size is 32 bytes
	    ByteArrayOutputStream bos = new ByteArrayOutputStream();
		try {
			bmp.compress(Bitmap.CompressFormat.JPEG, 100, bos);
			bos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return bos.toByteArray();
	}

	// Cursor to bitmap
	Bitmap cursorToBmp(Cursor c, int columnIndex) {

		byte[] data = c.getBlob(columnIndex);
		try {
			return BitmapFactory.decodeByteArray(data, 0, data.length);
		} catch (Exception e) {
			return null;
		}
	}

}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" 
	android:layout_height="fill_parent"
	android:orientation="horizontal">
  <ImageView 
	android:id="@+id/imgView"
	android:layout_width="640dip" 
	android:layout_height="fill_parent"/>
    
   <LinearLayout 
      android:id="@+id/LinearLayout01"
      android:layout_width="150dip" 
      android:layout_height="fill_parent"
      android:layout_marginLeft="5dip"
      android:layout_marginRight="5dip"
      android:orientation="vertical">
                 <ImageView 
	         android:id="@+id/imgView2"
		android:layout_width="fill_parent" 
		android:layout_height="150dip"
		android:layout_marginTop="10dip"/>
	         <Button 
		    android:id="@+id/btnSave" 
		    android:layout_width="fill_parent"
		    android:layout_height="wrap_content" 
		    android:text="保存图像"/>
		<Button 
		    android:id="@+id/btnLoad" 
		    android:layout_width="fill_parent"
		    android:layout_height="wrap_content" 
		    android:text="载入图像"/>
		<Button
		    android:id="@+id/btnClear"
		    android:layout_width="fill_parent"
		    android:layout_height="wrap_content"
		    android:text="清除图像"/>
		<TextView 
		    android:id="@+id/txtView"
		    android:layout_width="fill_parent"
		    android:layout_height="wrap_content"
		    android:textColor="#FFFFFF"
		    android:textSize="22sp"
		    android:text="..."/>

   </LinearLayout>
	
</LinearLayout>

 

开发环境:XP3+Eclipse+Android2.2+JDK6.0
测试环境:Android2.2,5寸屏,分辨率640X480
源代码:http://download.csdn.net/detail/xinzheng_wang/4420817

 

分享到:
评论

相关推荐

    Android数据库SQLiteDataBase的使用

    因为数据库的操作在开发中的重要性是不言而喻的,所以,在数据库这一方面下了很大的功夫,终于掌握了基本的操作,包括建表和删除,对数据库的操作,“增删改查”基本操作,而且用了封装性来实现,是学习数据库的一个...

    Android 数据库SQLiteDatabase的使用

    Android 数据库SQLiteDatabase的使用 1.数据库辅助操作接口SQLiteDatabaseOpenHelper的使用 2.ContentValues的使用 3.数据的增删改查 4.listView 与Adapter的使用 5.OptionsMenu的使用 6.Editext隐藏失去焦点的方法

    android开发sqliteDataBase使用实例

    本教程将深入讲解如何在Android项目中使用SQLite数据库。 首先,我们需要创建一个SQLite数据库。在Android中,我们通过继承`SQLiteOpenHelper`类来实现这个功能。`SQLiteOpenHelper`提供了创建、升级和打开数据库的...

    android studio SQLiteDatabase的基本功能与操作

    下面将详细介绍如何在Android Studio中使用SQLiteDatabase进行基本的功能与操作。 首先,我们需要在AndroidManifest.xml文件中添加读写权限,以允许应用访问SQLite数据库: ```xml &lt;uses-permission android:name=...

    Android SQLiteDatabase的使用详解

    ### Android SQLiteDatabase的使用详解 在Android开发过程中,`SQLiteDatabase`是进行本地数据存储的核心类之一,它提供了创建和查询SQLite数据库的方法。SQLite是一种轻量级的嵌入式数据库引擎,广泛应用于移动...

    android的SQLiteDatabase的CRUD小案例

    在Android应用中,我们通常不会直接创建数据,而是通过调用`insert()`方法来插入数据。例如: ```java public long insertData(String name, int age) { SQLiteDatabase db = this.getWritableDatabase(); ...

    实例讲解Android中SQLiteDatabase使用方法

    本文将通过一个实例详细介绍如何在Android中使用SQLiteOpenHelper和SQLiteDatabase进行数据库操作。 首先,要使用SQLite数据库,你需要创建一个继承自SQLiteOpenHelper的类。这个类会处理数据库的创建、升级以及...

    SQLiteDataBase简单Android实例

    SQLite是Android系统中内置的关系型数据库,用于存储和管理应用程序中的结构化数据。在这个"SQLiteDataBase简单...在这个实例中,你可以进一步学习如何结合Android组件与SQLite进行数据交互,提升你的Android开发技能。

    Sqlite及SQLiteDatabase的使用

    SQLiteDatabase是Android系统中对SQLite数据库的封装,它是Android SDK的一部分,提供了与SQLite数据库进行交互的接口和类。开发者可以通过SQLiteDatabase来创建、更新、查询和管理数据库。 在Android应用开发中,...

    androidDb.rar_ SQLiteDatabase_SQLiteDatabase_android

    总结一下,本示例"androidDb.rar_ SQLiteDatabase_SQLiteDatabase_android"展示了如何在Android应用中使用SQLite数据库进行数据管理。开发者需要创建`SQLiteOpenHelper`子类,定义数据库版本和表结构,在`onCreate()...

    android数据存取xml和数据库

    在Android开发中,数据存取是至关重要的环节,XML和SQLite数据库是两种常见的数据存储方式。本教程将详细探讨XML的三种读取技术以及SQLite数据库的基本操作,旨在帮助开发者掌握这两种数据存储方式。 首先,我们来...

    android SQLIteDatabase

    本篇文章将详细探讨如何在Android中使用SQLite数据库进行数据的增删改查(CRUD)操作,并介绍与之相关的布局页面编写。 首先,创建SQLite数据库需要实现`SQLiteOpenHelper`的子类。这个类提供了创建和升级数据库的...

    wellsql,简化您在android上使用sqlitedatabase的工作.zip

    在Android开发中,SQLite数据库是应用内存储数据的常用方式,但其原生API使用起来确实相对复杂,涉及很多重复的代码。为了简化这一过程,`wellsql`库应运而生,它是一个专为Android设计的开源项目,旨在让开发者更...

    listView SQLiteDatabase的使用

    假设我们使用ArrayAdapter,我们需要创建一个自定义的`MyAdapter`类,继承自ArrayAdapter,它会根据数据填充ListView的每个项目。 ```java public class MyAdapter extends ArrayAdapter&lt;String&gt; { public ...

    android ListView与SQLiteDatabase结合

    对于SQLite数据,我们通常使用`SimpleCursorAdapter`,它可以直接将SQLite查询结果映射到ListView的各个视图项。 在布局文件中,如`patient_item.xml`,定义ListView的每一项布局,通常包括患者姓名、年龄、性别等...

    android数据存取

    在Android系统中,数据...综上所述,Android数据存取涉及数据库操作、文件系统管理、网络通信、数据共享以及资源文件的使用,是Android开发中的核心技能,理解并掌握这些知识点对于构建功能丰富的Android应用至关重要。

    Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解

    使用 SQLiteDatabase 操作 SQLite 数据库 代码如下:/* Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除...

    Android数据存储SQLite.docx

    Android 数据存储 SQLite Android 数据存储是 Android 应用程序中的一个重要组件,它负责存储和管理应用程序中的数据。在 Android 中,有多种数据存储方式,包括 SharedPreferences、内部文件存储、SD 卡存储和 ...

Global site tag (gtag.js) - Google Analytics