【问题标题】:Inserting data to record in sqlite在sqlite中插入数据以记录
【发布时间】:2013-06-14 12:15:07
【问题描述】:

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

【问题讨论】:

  • 如果我不能说清楚,请询问您的困惑

标签: android android-sqlite android-date


【解决方案1】:

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

Using your own SQLite database in Android applications

您还会在github 中找到许多相同的项目。一个是Android Survey App

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

    然后保存该 db 文件并将该文件复制到项目的 assets 文件夹中。

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

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

    download sqlite browser

    DatabaseHelper.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
        }
    
        }
    

    【讨论】:

    • 我制作了数据库,但我不知道如何将它与我的 android 应用程序一起使用,请给我一些教程。
    猜你喜欢
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多