package co.jasonwyatt.sqliteperf.blobs; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteStatement; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Arrays; import java.util.Random; /** * @author jason */ public class DbHelper extends SQLiteOpenHelper { private final int mFileSize; private final int mFiles; private String[] mFileNames; public DbHelper(Context context, String name, int fileSize, int files) { super(context, name, null, 1); mFileSize = fileSize; mFiles = files; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE files (filename TEXT PRIMARY KEY, data BLOB NOT NULL)"); db.beginTransaction(); try { createFiles(db); db.setTransactionSuccessful(); } finally { db.endTransaction(); } } private void createFiles(SQLiteDatabase db) { mFileNames = new String[mFiles]; byte[] rawData = new byte[mFileSize+mFiles]; Random random = new Random(); random.nextBytes(rawData); ByteArrayOutputStream[] streams = new ByteArrayOutputStream[mFiles]; for (int i = 0; i < mFiles; i++) { streams[i] = new ByteArrayOutputStream(mFileSize); streams[i].write(rawData, i, mFileSize); mFileNames[i] = String.valueOf(i); } SQLiteStatement insert = db.compileStatement("INSERT INTO files (filename, data) VALUES (?, ?)"); for (int i = 0; i < mFiles; i++) { insert.bindString(1, mFileNames[i]); insert.bindBlob(2, streams[i].toByteArray()); insert.execute(); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} public String[] getFileNames() { return mFileNames; } }