0

我必须制作一个 Android 应用程序,我必须在其中存储预定义的问题和答案,使用 sqlite 来存储数据。我发现每次运行应用程序时都会在其中插入值的教程,但是我必须在程序中插入这些问题和答案才能创建我的数据库。有人可以建议我任何解释如何在表中插入值的教程吗?

4

2 回答 2

2

我了解您希望将问题和答案预加载到sqlite数据库中。以下教程将帮助您预加载sqlite数据库...

在 Android 应用程序中使用您自己的 SQLite 数据库

您还会在github中找到许多相同的项目。一种是Android 调查应用程序

希望这可以帮助。

于 2013-06-14T12:26:42.380 回答
1

首先下载 sqlite 浏览器并打开理想情况下应该在资产文件夹中的 .db 文件,然后手动或通过查询将所有记录插入相应表中。

然后保存该数据库文件并将该文件复制到项目的资产文件夹中。

然后创建 databasehelper 类并使其扩展 SQLiteOpenHelper 并定义您的数据库和所有函数以在那里获取数据。

如果您还有其他疑问,请告诉我:)

下载sqlite浏览器

数据库助手.java

public class DataBaseHelper extends SQLiteOpenHelper {

// The Android's default system path of your application database.
private static String DB_PATH = "/data/data/com.example.tutionimage/databases/";
private static String DB_NAME = "master_subject.db";
private SQLiteDatabase myDatabase;
private final Context myContext;
private boolean add2;

/**
 * Constructor Takes and keeps a reference of the passed context in order to
 * access to the application assets and resources.
 * 
 * @param context
 */
public DataBaseHelper(Context context) {
    super(context, DB_NAME, null, 1);
    this.myContext = context;
}

/**
 * Creates a empty database on the system and rewrites it with your own
 * database.
 * */
public void createDataBase() throws IOException {
    boolean dbExist = checkDataBase();
    if (dbExist) {
        // do nothing - database already exist
    } else {

        // By calling this method and empty database will be created into
        // the default system path
        // of your application so we are gonna be able to overwrite that
        // database with our database.
        this.getReadableDatabase();
        try {
            copyDataBase();
        } catch (IOException e) {
            throw new Error("Error copying database");
        }
    }
}

/**
 * Check if the database already exist to avoid re-copying the file each
 * time you open the application.
 * 
 * @return true if it exists, false if it doesn't
 */
private boolean checkDataBase() {
    SQLiteDatabase checkDB = null;
    try {
        String myPath = DB_PATH + DB_NAME;
        checkDB = SQLiteDatabase.openDatabase(myPath, null,
                SQLiteDatabase.OPEN_READONLY);
    } catch (SQLiteException e) {
        // database does't exist yet.
    }
    if (checkDB != null) {
        checkDB.close();
    }
    return checkDB != null ? true : false;
}

/**
 * Copies your database from your local assets-folder to the just created
 * empty database in the system folder, from where it can be accessed and
 * handled. This is done by transfering bytestream.
 * */
private void copyDataBase() throws IOException {
    // Open your local db as the input stream
    InputStream myInput = myContext.getAssets().open(DB_NAME);
    // Path to the just created empty db
    String outFileName = DB_PATH + DB_NAME;
    // Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);
    // transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }
    // Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();

    // Toast.makeText(myContext, "Copy Done", 300).show();
}

public void openDataBase() throws SQLException {
    // Open the database
    String myPath = DB_PATH + DB_NAME;
    myDatabase = SQLiteDatabase.openDatabase(myPath, null,
            SQLiteDatabase.OPEN_READWRITE);

}

@Override
public synchronized void close() {
    if (myDatabase != null)
        myDatabase.close();
    super.close();
}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Add your public helper methods to access and get content from the
    // database.
    // You could return cursors by doing "return myDatabase.query(....)" so
    // it'd be easy
    // to you to create adapters for your views.
}

//Insert Title into database
public long insertTitle(String sem, String subject,String jee, String chp, String marks, String time) {

    ContentValues initialValues = new ContentValues();

    initialValues.put("sem", sem);
    initialValues.put("subject", subject);
    initialValues.put("jee_flag", jee);
    initialValues.put("chapter", chp);
    initialValues.put("marks", marks);
    initialValues.put("time", time);

    return myDatabase.insert("testdata", null, initialValues);
}

//Fetching data from the database
public Cursor getTestData() throws SQLException{

    Cursor cursor = null;
    String queryString = "";


        if(NewStartPanel.queryString.split("-")[2].equalsIgnoreCase("n")){

            queryString = "select * from testdata where jee_flag='n' order by id desc";

        }

        else if(NewStartPanel.queryString.split("-")[2].equalsIgnoreCase("y")){

            queryString = "select * from testdata where jee_flag='y' order by id desc";
        }

        System.out.println("Query String:................  "+queryString);
        cursor = myDatabase.rawQuery(queryString, null);

    //  cursor.moveToFirst();

        System.out.println("cursor count of testdata is:"+cursor.getCount());


    return cursor;

}

TestOrReport.java

    public class TestOrReport extends Activity implements OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.test_or_report);

    // set resources

    //Interacting with database

    DataBaseHelper dataBaseHelper =new DataBaseHelper(this);
    System.out.println("Before open db");
    dataBaseHelper.openDataBase();

    System.out.println("After open db");
    Cursor mCursor = dataBaseHelper.getTestData();

    System.out.println("@@ total rows :"+mCursor.getCount());


    // Then you can iterate through cursor and get those data in arraylist or whatever collection you want to
    }

    }
于 2013-06-14T12:30:01.940 回答