Android数据库SD卡创建和图片存取操作

Android数据库中的创建,图片的存、取操作如下:

数据库类:

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log; 

/**
 * 此类继承了SQLiteOpenHelper抽象类,是一个辅助器类,需要 一个构造函数和重写两个方法。
 *
 */
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
  public static final String DATABASE_NAME = "text.db"; // 数据库名
  public static final int VERSION = 1; // 版本号
  public static final String TABLE_NAME = "text"; // 表名
  public static final String ID = "id";
  public static final String IMAGE = "image"; 

  public MySQLiteOpenHelper(Context context) {
    super(context, DATABASE_NAME, null, VERSION);
  } 

  /**
   * 在数据库第一次生成的时候会调用这个方法,同时我们在这个方法里边生成数据库表
   */
  @Override
  public void onCreate(SQLiteDatabase db) {
    // 创建数据表的操作
    String strSQL = "CREATE TABLE " + TABLE_NAME + "(" + ID
        + " INTEGER PRIMARY KEY AUTOINCREMENT," + IMAGE + " blob not null );"; 

    db.execSQL(strSQL);
  } 

  /**
   * 更新或者升级数据库的时候会自动调用这个方法,一般我们会在这个方法中 删除数据表,然后再创建新的数据表操作。
   */
  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.e("AndyDemo", "onUpgrade");
  }
}

Activity:

private Button btn_newTable, btn_addOne, get_Image;
private TextView tv;
private ImageView showimage;
private MySQLiteOpenHelper myOpenHelper;
private SQLiteDatabase sqlitedb;
private File path = new File("sdcard/text"); // 数据库文件目录
private File f = new File("sdcard/text/text.db"); // 数据库文件 

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

  init(); 

  // 实例化默认数据库辅助操作对象
  myOpenHelper = new MySQLiteOpenHelper(this); 

  // SD卡中创建数据库文件
  if (!path.exists()) { // 判断目录是否存在
    path.mkdirs(); // 创建目录
  }
  if (!f.exists()) { // 判断文件是否存在
    try {
      f.createNewFile(); // 创建文件
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
} 

/**
 * 初始化UI界面
 */
private void init() {
  tv = (TextView) findViewById(R.id.tv_result);
  btn_newTable = (Button) findViewById(R.id.newTable);
  btn_addOne = (Button) findViewById(R.id.addOne);
  get_Image = (Button) findViewById(R.id.getimage);
  showimage = (ImageView) findViewById(R.id.showimage);
  btn_newTable.setOnClickListener(new ClickEvent());
  btn_addOne.setOnClickListener(new ClickEvent());
  get_Image.setOnClickListener(new ClickEvent()); 

} 

class ClickEvent implements OnClickListener {
  @Override
  public void onClick(View v) {
    try {
      // SD卡中创建数据库,实例化sqlitedb的操作如下
      sqlitedb = SQLiteDatabase.openOrCreateDatabase(f, null);
      if (v == btn_newTable) { // 1.新建数据表
        String TABLE_NAME = "text";
        String ID = "id";
        String IMAGE = "image";
        String str_sql2 = "CREATE TABLE " + TABLE_NAME + "(" + ID
            + " INTEGER PRIMARY KEY AUTOINCREMENT," + IMAGE
            + " blob not null );";
        sqlitedb.execSQL(str_sql2);
        tv.setText("新建数据表成功!"); 

      } else if (v == btn_addOne) { // 2.插入一条记录
        ContentValues values = new ContentValues();
        values.put(
            MySQLiteOpenHelper.IMAGE,
            drawableChange(getResources().getDrawable(
                R.drawable.ic_launcher)));
        sqlitedb.insert(MySQLiteOpenHelper.TABLE_NAME, null, values);
        tv.setText("添加新数据成功!");
      } else if (v == get_Image) {
        Cursor c = sqlitedb.rawQuery("select * from text", null);
        c.moveToLast(); 

        if (c.isLast()) {
          byte[] blob = c.getBlob(c
              .getColumnIndex(MySQLiteOpenHelper.IMAGE));
          Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0,
              blob.length);
          showimage.setImageBitmap(bmp);
        }
        c.close();
      }
    } catch (Exception e) {
      tv.setText("操作失败");
    } finally {
      sqlitedb.close();
    }
  }
} 

/**
 * drawable转化成字节数组
 *
 * @param drawable
 * @return
 */
private byte[] drawableChange(Drawable drawable) { 

  Bitmap bm = ((BitmapDrawable) drawable).getBitmap();
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
  byte[] date = baos.toByteArray();
  return date;
}

新建一张表,插入一张图片,效果图如下:

查看表中的数据如下:

取出图片:

OK!!搞定! 最后别忘了加权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android使用SQLite数据库的简单实例

    先画个图,了解下Android下数据库操作的简单流程: 1.首先,写一个自己的数据库操作帮助类,这个类继承自Android自带的SQLiteOpenHelper. 2.在自己的DAO层借助自己的Helper写数据库操作的一些方法 3.Activity调用DAO层的数据库操作方法进行操作 下面例子是: 1.Helper 复制代码 代码如下: package cn.learn.db.util; import android.content.Context;import android.databas

  • android创建数据库(SQLite)保存图片示例

    复制代码 代码如下: //1.创建数据库public class DBService extends SQLiteOpenHelper { private final static int VERSION = 1;private final static String DATABASE_NAME = "uniteqlauncher.db"; public DBService(Context context) {    this(context, DATABASE_NAME, null,

  • Android编程之数据库的创建方法详解

    本文实例讲述了Android编程之数据库的创建方法.分享给大家供大家参考,具体如下: 主java package com.itheima.createdatabase; import android.app.Activity; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; public class MainActivity exten

  • Android操作SQLite数据库(增、删、改、查、分页等)及ListView显示数据的方法详解

    本文实例讲述了Android操作SQLite数据库(增.删.改.查.分页等)及ListView显示数据的方法.分享给大家供大家参考,具体如下: 由于刚接触android开发,故此想把学到的基础知识记录一下,以备查询,故此写的比较啰嗦: 步骤如下: 一.介绍: 此文主要是介绍怎么使用android自带的数据库SQLite,以及把后台的数据用ListView控件显示 二.新建一个android工程--DBSQLiteOperate 工程目录: 三.清单列表AndroidManifest.xml的配置

  • Android实现将已发送的短信写入短信数据库的方法

    短信是手机常见的功能,本文就以实例形式讲述了Android实现将已发送的短信写入短信数据库的方法.分享给大家供大家参考之用.具体如下: 一般来说,把短信发送出去以后,需要把已发送的短信写入短信数据库.短信数据库有多个Uri,其中已发送的Uri是content://sms/sent. 具体功能代码如下: // 把短信写入数据库 public void writeMsg(){ try{ ContentValues values = new ContentValues(); // 发送时间 value

  • Android SQLite数据库增删改查操作的案例分析

    Person实体类 复制代码 代码如下: package com.ljq.domain; public class Person {    private Integer id;    private String name;    private String phone; public Person() {        super();    } public Person(String name, String phone) {        super();        this.n

  • Android创建和使用数据库SQLIte

    一.关系型数据库SQLIte         每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的SQL数据库-SQLite.SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计目标是嵌入式的,占用资源非常的低,只需要几百K的内存就够了.SQLite已经被多种软件和产品使用,Mozilla FireFox就是使用SQLite来存储配置数据的,Android和iPhone都是使用SQLite来存储数据的. SQLite

  • Android实现创建或升级数据库时执行语句

    本文实例讲述了Android创建或升级数据库时执行的语句,如果是创建或升级数据库,请使用带List参数的构造方法,带SQL语句的构造方法将在数据库创建或升级时执行. 具体程序代码如下: import java.util.List; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFac

  • 实例讲解Android App使用自带的SQLite数据库的基本方法

    SQLite数据库是android系统内嵌的数据库,小巧强大,能够满足大多数SQL语句的处理工作,而SQLite数据库仅仅是个文件而已.虽然SQLite的有点很多,但并不是如同PC端的mysql般强大,而且android系统中不允许通过JDBC操作远程数据库,所以只能通过webservice等手段于php.servlet交互获取数据. 基础 SQLiteDatabase类,代表了一个数据库对象,通过SQLiteDatabase来操作管理数据库. 一些基本的用法: static  SQLiteDa

  • Android SQLite数据库增删改查操作的使用详解

    一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NULL.INTEGER.REAL(浮点数字). TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n). char(n).decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型. SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段

  • Android中操作SQLite数据库快速入门教程

    SQLite是Android平台软件开发中会经常用到的数据库产品,作为一款轻型数据库,SQLite的设计目标就是是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够.下面我们一起来看看针对Android平台的SQlite 3的使用. 以下概念都是在Android平台的SQlite限制下的理解: 数据库基础概念 1.SQlite 通过文件来保存数据库,一个文件就是一个数据库. 2.数据库里又包含数个表格: 3.每个表格里面包含了多个记录

随机推荐