当前位置:   article > 正文

Android数据库SD卡创建,及图片存、取操作!!_android studio使用数据库实现图片的存取

android studio使用数据库实现图片的存取

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

数据库类:

  1. import android.content.Context;
  2. import android.database.sqlite.SQLiteDatabase;
  3. import android.database.sqlite.SQLiteOpenHelper;
  4. import android.util.Log;
  5. /**
  6. * 此类继承了SQLiteOpenHelper抽象类,是一个辅助器类,需要 一个构造函数和重写两个方法。
  7. *
  8. */
  9. public class MySQLiteOpenHelper extends SQLiteOpenHelper {
  10. public static final String DATABASE_NAME = "text.db"; // 数据库名
  11. public static final int VERSION = 1; // 版本号
  12. public static final String TABLE_NAME = "text"; // 表名
  13. public static final String ID = "id";
  14. public static final String IMAGE = "image";
  15. public MySQLiteOpenHelper(Context context) {
  16. super(context, DATABASE_NAME, null, VERSION);
  17. }
  18. /**
  19. * 在数据库第一次生成的时候会调用这个方法,同时我们在这个方法里边生成数据库表
  20. */
  21. @Override
  22. public void onCreate(SQLiteDatabase db) {
  23. // 创建数据表的操作
  24. String strSQL = "CREATE TABLE " + TABLE_NAME + "(" + ID
  25. + " INTEGER PRIMARY KEY AUTOINCREMENT," + IMAGE + " blob not null );";
  26. db.execSQL(strSQL);
  27. }
  28. /**
  29. * 更新或者升级数据库的时候会自动调用这个方法,一般我们会在这个方法中 删除数据表,然后再创建新的数据表操作。
  30. */
  31. @Override
  32. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  33. Log.e("AndyDemo", "onUpgrade");
  34. }
  35. }
Activity:

  1. private Button btn_newTable, btn_addOne, get_Image;
  2. private TextView tv;
  3. private ImageView showimage;
  4. private MySQLiteOpenHelper myOpenHelper;
  5. private SQLiteDatabase sqlitedb;
  6. private File path = new File("sdcard/text"); // 数据库文件目录
  7. private File f = new File("sdcard/text/text.db"); // 数据库文件
  8. @Override
  9. public void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.main);
  12. init();
  13. // 实例化默认数据库辅助操作对象
  14. myOpenHelper = new MySQLiteOpenHelper(this);
  15. // SD卡中创建数据库文件
  16. if (!path.exists()) { // 判断目录是否存在
  17. path.mkdirs(); // 创建目录
  18. }
  19. if (!f.exists()) { // 判断文件是否存在
  20. try {
  21. f.createNewFile(); // 创建文件
  22. } catch (IOException e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. }
  27. /**
  28. * 初始化UI界面
  29. */
  30. private void init() {
  31. tv = (TextView) findViewById(R.id.tv_result);
  32. btn_newTable = (Button) findViewById(R.id.newTable);
  33. btn_addOne = (Button) findViewById(R.id.addOne);
  34. get_Image = (Button) findViewById(R.id.getimage);
  35. showimage = (ImageView) findViewById(R.id.showimage);
  36. btn_newTable.setOnClickListener(new ClickEvent());
  37. btn_addOne.setOnClickListener(new ClickEvent());
  38. get_Image.setOnClickListener(new ClickEvent());
  39. }
  40. class ClickEvent implements OnClickListener {
  41. @Override
  42. public void onClick(View v) {
  43. try {
  44. // SD卡中创建数据库,实例化sqlitedb的操作如下
  45. sqlitedb = SQLiteDatabase.openOrCreateDatabase(f, null);
  46. if (v == btn_newTable) { // 1.新建数据表
  47. String TABLE_NAME = "text";
  48. String ID = "id";
  49. String IMAGE = "image";
  50. String str_sql2 = "CREATE TABLE " + TABLE_NAME + "(" + ID
  51. + " INTEGER PRIMARY KEY AUTOINCREMENT," + IMAGE
  52. + " blob not null );";
  53. sqlitedb.execSQL(str_sql2);
  54. tv.setText("新建数据表成功!");
  55. } else if (v == btn_addOne) { // 2.插入一条记录
  56. ContentValues values = new ContentValues();
  57. values.put(
  58. MySQLiteOpenHelper.IMAGE,
  59. drawableChange(getResources().getDrawable(
  60. R.drawable.ic_launcher)));
  61. sqlitedb.insert(MySQLiteOpenHelper.TABLE_NAME, null, values);
  62. tv.setText("添加新数据成功!");
  63. } else if (v == get_Image) {
  64. Cursor c = sqlitedb.rawQuery("select * from text", null);
  65. c.moveToLast();
  66. if (c.isLast()) {
  67. byte[] blob = c.getBlob(c
  68. .getColumnIndex(MySQLiteOpenHelper.IMAGE));
  69. Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0,
  70. blob.length);
  71. showimage.setImageBitmap(bmp);
  72. }
  73. c.close();
  74. }
  75. } catch (Exception e) {
  76. tv.setText("操作失败");
  77. } finally {
  78. sqlitedb.close();
  79. }
  80. }
  81. }
  82. /**
  83. * drawable转化成字节数组
  84. *
  85. * @param drawable
  86. * @return
  87. */
  88. private byte[] drawableChange(Drawable drawable) {
  89. Bitmap bm = ((BitmapDrawable) drawable).getBitmap();
  90. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  91. bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
  92. byte[] date = baos.toByteArray();
  93. return date;
  94. }
新建一张表,插入一张图片,效果图如下:


查看表中的数据如下:


取出图片:


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

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



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

闽ICP备14008679号