androidで写真撮影した画像を直接sqliteに保存したいのですが上手くできません。
写真の撮影で指定のフォルダーに写真保存できるのですがsqliteに写真データの保存ができなく困っています。
BitmapDB.java

public class BitmapDB extends SQLiteOpenHelper {

/**
 * 画像管理テーブル名
 */
public static final String SAVE_PHOTO_TABLE = "save_photo";
/**
 * カラム名 画像ファイル名
 */
public static final String COLUMN_FILE_NAME = "fname";
/**
 * カラム名 画像バイナリデータ
 */
public static final String COLUMN_PHOTO_BINARY_DATA = "bdata";
/**
 * アクセスするデータベース名
 */
private static final String DB_NAME = "example.db";
/**
 * DBのバージョン
 */
private static final int DB_VERSION = 2;
/**
 * create table文
 */
private static final String createTableString = "create table "
        + SAVE_PHOTO_TABLE + "(_id integer primary key autoincrement, "
        + COLUMN_FILE_NAME + " text, " + COLUMN_PHOTO_BINARY_DATA
        + " blob)";

public BitmapDB(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(createTableString);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL(createTableString);
}}

MainActivity.java

public class MainActivity extends Activity {
private SQLiteDatabase db;
Button bt;
SurfaceView sv;
SurfaceHolder sh;
Camera cm;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    LinearLayout ll = new LinearLayout(this);
    ll.setOrientation(LinearLayout.VERTICAL);
    setContentView(ll);

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

    bt = new Button(this);
    bt.setText("撮影");

    sv = new SurfaceView(this);
    sh = sv.getHolder();

    sh.addCallback(new SampleSurfaceHolderCallback());

    ll.addView(bt);
    ll.addView(sv);

    bt.setOnClickListener(new SampleClickListener());
}

class SampleSurfaceHolderCallback
        implements SurfaceHolder.Callback {
    public void surfaceCreated(SurfaceHolder holder) {
        try {
            cm = Camera.open(0);
            Camera.Parameters pr = cm.getParameters();
            List<Size> ss = pr.getSupportedPictureSizes();
            Size s = ss.get(0);
            pr.setPictureSize(s.width, s.height);
            cm.setParameters(pr);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        try {
            WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
            Display dp = wm.getDefaultDisplay();
            int rt = dp.getRotation();
            int d = 0;
            switch (rt) {
                case Surface.ROTATION_0:
                    d = 90;
                    break;
                case Surface.ROTATION_90:
                    d = 0;
                    break;
                case Surface.ROTATION_180:
                    d = 270;
                    break;
                case Surface.ROTATION_270:
                    d = 180;
                    break;
            }
            cm.setDisplayOrientation(d);
            cm.setPreviewDisplay(sv.getHolder());

            Camera.Parameters pr = cm.getParameters();

            List<Size> previewSizes = cm.getParameters().getSupportedPreviewSizes();
            Size size = previewSizes.get(0);

            pr.setPreviewSize(size.width, size.height);
            cm.setParameters(pr);
            cm.startPreview();
        } catch (Exception e) {
        }
    }

    public void surfaceDestroyed(SurfaceHolder Holder) {
        cm.stopPreview();
        cm.release();
    }
}

class SampleClickListener implements OnClickListener {
    public void onClick(View v) {
        cm.takePicture(null, null, new SamplePictureCallback());
    }

    class SamplePictureCallback implements PictureCallback {

        public void onPictureTaken(byte[] data, Camera c) {
            try {
                File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Download/");

                if (dir.exists() == false) {
                    dir.mkdir();
                }
                Time time = new Time("Asia/Tokyo");
                time.setToNow();
                String filename = "pic" + time.month + time.monthDay + time.hour + time.minute + time.second + ".png";
                File f = new File(dir, filename);

                ByteArrayOutputStream photo1 = getByteArrayOutputStream(dir+"/"+filename);
                FileOutputStream fos = new FileOutputStream(f);
                fos.write(data);
                Toast.makeText(getApplicationContext(), "撮影完了。", Toast.LENGTH_LONG).show();
                fos.close();

                // インスタンス作成
                BitmapDB helper = new BitmapDB(MainActivity.this);
                // 読み書き出来るように開く
                db = helper.getWritableDatabase();
                // レコードの一括DELETE
                db.delete(BitmapDB.SAVE_PHOTO_TABLE, null, null);
                ContentValues values = new ContentValues();
                values.put(BitmapDB.COLUMN_FILE_NAME, filename);
                values.put(BitmapDB.COLUMN_PHOTO_BINARY_DATA, photo1.toByteArray());
                // トランザクション正常終了
                db.setTransactionSuccessful();
            } catch (Exception e) {
                e.printStackTrace();
            }

            try {
                // レコードを検索してカーソルを作成
                Cursor cursor = db.query(BitmapDB.SAVE_PHOTO_TABLE,
                        new String[]{"_id", BitmapDB.COLUMN_FILE_NAME,
                                BitmapDB.COLUMN_PHOTO_BINARY_DATA}, null,
                        null, null, null, null);
                // カーソルから値を取り出す
                ImageView iv = new ImageView(MainActivity.this);
                while (cursor.moveToNext()) {

                    // idとファイル名を受け取りTextViewとして表示
                    String str = cursor.getString(cursor.getColumnIndex("_id")) + "\t"
                            + cursor.getString(cursor
                            .getColumnIndex(BitmapDB.COLUMN_FILE_NAME));
                    TextView tv = new TextView(MainActivity.this);

                    tv.setText(str);
                    // BLOBをbyte[]で受け取る.
                    byte blob[] = cursor
                            .getBlob(cursor
                                    .getColumnIndex(BitmapDB.COLUMN_PHOTO_BINARY_DATA));
                    // byte[]をビットマップに変換しImageViewとして表示
                    Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0, blob.length);

                    iv.setImageBitmap(bmp);
                    iv.setScaleType(ImageView.ScaleType.FIT_XY);//
                    iv.setAdjustViewBounds(true);//
                }
                Dialog dialog = new Dialog(MainActivity.this);
                dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
                dialog.setContentView(iv);
                dialog.show();
                cm.startPreview();

                // カーソルクローズ
                cursor.close();
                // DBクローズ
                db.close();
            } catch (Exception e) {
            }
        }
    }

    private ByteArrayOutputStream getByteArrayOutputStream(String fileName) {
        // 返却するByteArrayOutputStream
        ByteArrayOutputStream retStream = new ByteArrayOutputStream();
        try {
            // assetsから画像ファイルを読み込みBufferedInputStreamを作成
            BufferedInputStream iS = new BufferedInputStream(getAssets().open(fileName));
            // 書き込み用int
            int writeInt;
            // ByteArrayOutputStreamに画像ファイルを書き込む
            while ((writeInt = iS.read()) != -1) {
                retStream.write(writeInt);
            }
            // inputstreamのクローズ
            try {
                iS.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return retStream;
    }
}}