未在Android中使用不同的尝试方法创建数据库

时间:2014-07-09 14:35:11

标签: android database sqlite android-sqlite

我在SQLite数据库创建中遇到的问题是,在使用AVD时,我没有看到在DDMS透视图中创建任何DATABASE_NAME.db文件。虽然我确信我使用的代码是正确的,因为它来自在线教程。我想,只留下一个缺陷,如下所示:

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class AABDatabaseManager {

    private SQLiteDatabase db; // a reference to the database manager class.
    private final String DB_NAME = "database_name"; // the name of our database
    private final int DB_VERSION = 1; // the version of the database

    // the names for our database columns
    private final String TABLE_NAME = "database_table";
    private final String TABLE_ROW_ID = "id";
    private final String TABLE_ROW_ONE = "table_row_one";
    private final String TABLE_ROW_TWO = "table_row_two";

    // TODO: write the constructor and methods for this class

    // the beginnings our SQLiteOpenHelper class
    private class CustomSQLiteOpenHelper extends SQLiteOpenHelper
    {
        // TODO: override the constructor and other methods for the parent class

        //super(context, DB_NAME, null, DB_VERSION); I had to comment out this //statement because it gave me error-->>Syntax error, insert "}" to complete Block


        public CustomSQLiteOpenHelper(Context context, String name,
                CursorFactory factory, int version) {
            super(context, name, factory, version);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onCreate(SQLiteDatabase db)
        {
            // the SQLite query string that will create our 3 column database table.
            String newTableQueryString =    
                "create table " +
                TABLE_NAME +
                " (" +
                TABLE_ROW_ID + " integer primary key autoincrement not null," +
                TABLE_ROW_ONE + " text," +
                TABLE_ROW_TWO + " text" +
                ");";

            // execute the query string to the database.
            db.execSQL(newTableQueryString);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
        {
            // NOTHING TO DO HERE. THIS IS THE ORIGINAL DATABASE VERSION.
            // OTHERWISE, YOU WOULD SPECIFIY HOW TO UPGRADE THE DATABASE
            // FROM OLDER VERSIONS.
        }
    }

    public void addRow(String rowStringOne, String rowStringTwo)
    {
        // this is a key value pair holder used by android's SQLite functions
        ContentValues values = new ContentValues();

        // this is how you add a value to a ContentValues object
        // we are passing in a key string and a value string each time
        values.put(TABLE_ROW_ONE, rowStringOne);
        values.put(TABLE_ROW_TWO, rowStringTwo);

        // ask the database object to insert the new data 
        try
        {
            db.insert(TABLE_NAME, null, values);
        }
        catch(Exception e)
        {
            Log.e("DB ERROR", e.toString()); // prints the error message to the log
            e.printStackTrace(); // prints the stack trace to the log
        }
    }

    public void deleteRow(long rowID)
    {
        // ask the database manager to delete the row of given id
        try
        {
            db.delete(TABLE_NAME, TABLE_ROW_ID + "=" + rowID, null);
        }
        catch (Exception e)
        {
            Log.e("DB ERROR", e.toString());
            e.printStackTrace();
        }
    }

    public void updateRow(long rowID, String rowStringOne, String rowStringTwo)
    {
        // this is a key value pair holder used by android's SQLite functions
        ContentValues values = new ContentValues();
        values.put(TABLE_ROW_ONE, rowStringOne);
        values.put(TABLE_ROW_TWO, rowStringTwo);

        // ask the database object to update the database row of given rowID
        try {db.update(TABLE_NAME, values, TABLE_ROW_ID + "=" + rowID, null);}
        catch (Exception e)
        {
            Log.e("DB Error", e.toString());
            e.printStackTrace();
        }
    }

    /** Additional Code */

    /**********************************************************************
     * RETRIEVING ALL ROWS FROM THE DATABASE TABLE
     * 
     * This is an example of how to retrieve all data from a database
     * table using this class.  You should edit this method to suit your
     * needs.
     * 
     * the key is automatically assigned by the database
     */
    public ArrayList<ArrayList<Object>> getAllRowsAsArrays()
    {
        // create an ArrayList that will hold all of the data collected from
        // the database.
        ArrayList<ArrayList<Object>> dataArrays =
            new ArrayList<ArrayList<Object>>();

        // this is a database call that creates a "cursor" object.
        // the cursor object store the information collected from the
        // database and is used to iterate through the data.
        Cursor cursor;

        try
        {
            // ask the database object to create the cursor.
            cursor = db.query(
                    TABLE_NAME,
                    new String[]{TABLE_ROW_ID, TABLE_ROW_ONE, TABLE_ROW_TWO},
                    null, null, null, null, null
            );

            // move the cursor's pointer to position zero.
            cursor.moveToFirst();

            // if there is data after the current cursor position, add it
            // to the ArrayList.
            if (!cursor.isAfterLast())
            {
                do
                {
                    ArrayList<Object> dataList = new ArrayList<Object>();

                    dataList.add(cursor.getLong(0));
                    dataList.add(cursor.getString(1));
                    dataList.add(cursor.getString(2));

                    dataArrays.add(dataList);
                }
                // move the cursor's pointer up one position.
                while (cursor.moveToNext());
            }
        }
        catch (SQLException e)
        {
            Log.e("DB Error", e.toString());
            e.printStackTrace();
        }

        // return the ArrayList that holds the data collected from
        // the database.
        return dataArrays;
    }




    /**********************************************************************
     * RETRIEVING A ROW FROM THE DATABASE TABLE
     * 
     * This is an example of how to retrieve a row from a database table
     * using this class.  You should edit this method to suit your needs.
     * 
     * @param rowID the id of the row to retrieve
     * @return an array containing the data from the row
     */
    public ArrayList<Object> getRowAsArray(long rowID)
    {
        // create an array list to store data from the database row.
        // I would recommend creating a JavaBean compliant object 
        // to store this data instead.  That way you can ensure
        // data types are correct.
        ArrayList<Object> rowArray = new ArrayList<Object>();
        Cursor cursor;

        try
        {
            // this is a database call that creates a "cursor" object.
            // the cursor object store the information collected from the
            // database and is used to iterate through the data.
            cursor = db.query
            (
                    TABLE_NAME,
                    new String[] { TABLE_ROW_ID, TABLE_ROW_ONE, TABLE_ROW_TWO },
                    TABLE_ROW_ID + "=" + rowID,
                    null, null, null, null, null
            );

            // move the pointer to position zero in the cursor.
            cursor.moveToFirst();

            // if there is data available after the cursor's pointer, add
            // it to the ArrayList that will be returned by the method.
            if (!cursor.isAfterLast())
            {
                do
                {
                    rowArray.add(cursor.getLong(0));
                    rowArray.add(cursor.getString(1));
                    rowArray.add(cursor.getString(2));
                }
                while (cursor.moveToNext());
            }

            // let java know that you are through with the cursor.
            cursor.close();
        }
        catch (SQLException e) 
        {
            Log.e("DB ERROR", e.toString());
            e.printStackTrace();
        }

        // return the ArrayList containing the given row from the database.
        return rowArray;
    }



}

任何帮助将不胜感激!!我希望它不是与IDE相关的一些问题

Logcat输出是::

07-09 10:13:24.205: E/ERROR(985): java.lang.NullPointerException
07-09 10:13:24.205: W/System.err(985): java.lang.NullPointerException
07-09 10:13:24.215: W/System.err(985):  at com.example.haloapp.AABDatabaseManager.getAllRowsAsArrays(AABDatabaseManager.java:144)
07-09 10:13:24.215: W/System.err(985):  at com.example.haloapp.MainActivity.updateTable(MainActivity.java:290)
07-09 10:13:24.225: W/System.err(985):  at com.example.haloapp.MainActivity.onCreate(MainActivity.java:61)
07-09 10:13:24.225: W/System.err(985):  at android.app.Activity.performCreate(Activity.java:5133)
07-09 10:13:24.235: W/System.err(985):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-09 10:13:24.235: W/System.err(985):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
07-09 10:13:24.267: W/System.err(985):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
07-09 10:13:24.267: W/System.err(985):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-09 10:13:24.285: W/System.err(985):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
07-09 10:13:24.285: W/System.err(985):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-09 10:13:24.295: W/System.err(985):  at android.os.Looper.loop(Looper.java:137)
07-09 10:13:24.304: W/System.err(985):  at android.app.ActivityThread.main(ActivityThread.java:5103)
07-09 10:13:24.304: W/System.err(985):  at java.lang.reflect.Method.invokeNative(Native Method)
07-09 10:13:24.304: W/System.err(985):  at java.lang.reflect.Method.invoke(Method.java:525)
07-09 10:13:24.314: W/System.err(985):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-09 10:13:24.314: W/System.err(985):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-09 10:13:24.325: W/System.err(985):  at dalvik.system.NativeStart.main(Native Method)
07-09 10:13:24.695: I/Choreographer(985): Skipped 55 frames!  The application may be doing too much work on its main thread.
07-09 10:13:26.656: I/Choreographer(985): Skipped 57 frames!  The application may be doing too much work on its main thread.
07-09 10:13:27.144: D/gralloc_goldfish(985): Emulator without GPU emulation detected.
07-09 10:13:48.964: D/dalvikvm(985): GC_FOR_ALLOC freed 145K, 9% free 2874K/3136K, paused 174ms, total 188ms
07-09 10:13:52.204: I/Choreographer(985): Skipped 43 frames!  The application may be doing too much work on its main thread.
07-09 10:13:54.064: E/DB ERROR(985): java.lang.NullPointerException
07-09 10:13:54.074: W/System.err(985): java.lang.NullPointerException
07-09 10:13:54.134: W/System.err(985):  at com.example.haloapp.AABDatabaseManager.addRow(AABDatabaseManager.java:79)
07-09 10:13:54.134: W/System.err(985):  at com.example.haloapp.MainActivity.addRow(MainActivity.java:150)
07-09 10:13:54.154: W/System.err(985):  at com.example.haloapp.MainActivity.access$0(MainActivity.java:145)
07-09 10:13:54.154: W/System.err(985):  at com.example.haloapp.MainActivity$1.onClick(MainActivity.java:108)
07-09 10:13:54.165: W/System.err(985):  at android.view.View.performClick(View.java:4240)
07-09 10:13:54.165: W/System.err(985):  at android.view.View$PerformClick.run(View.java:17721)
07-09 10:13:54.184: W/System.err(985):  at android.os.Handler.handleCallback(Handler.java:730)
07-09 10:13:54.184: W/System.err(985):  at android.os.Handler.dispatchMessage(Handler.java:92)
07-09 10:13:54.194: W/System.err(985):  at android.os.Looper.loop(Looper.java:137)
07-09 10:13:54.194: W/System.err(985):  at android.app.ActivityThread.main(ActivityThread.java:5103)
07-09 10:13:54.204: W/System.err(985):  at java.lang.reflect.Method.invokeNative(Native Method)
07-09 10:13:54.204: W/System.err(985):  at java.lang.reflect.Method.invoke(Method.java:525)
07-09 10:13:54.214: W/System.err(985):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-09 10:13:54.214: W/System.err(985):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-09 10:13:54.224: W/System.err(985):  at dalvik.system.NativeStart.main(Native Method)
07-09 10:13:54.224: E/Add Error(985): java.lang.NullPointerException
07-09 10:13:54.234: W/System.err(985): java.lang.NullPointerException
07-09 10:13:54.244: W/System.err(985):  at com.example.haloapp.AABDatabaseManager.getAllRowsAsArrays(AABDatabaseManager.java:144)
07-09 10:13:54.255: W/System.err(985):  at com.example.haloapp.MainActivity.updateTable(MainActivity.java:290)
07-09 10:13:54.274: W/System.err(985):  at com.example.haloapp.MainActivity.addRow(MainActivity.java:157)
07-09 10:13:54.274: W/System.err(985):  at com.example.haloapp.MainActivity.access$0(MainActivity.java:145)
07-09 10:13:54.284: W/System.err(985):  at com.example.haloapp.MainActivity$1.onClick(MainActivity.java:108)
07-09 10:13:54.294: W/System.err(985):  at android.view.View.performClick(View.java:4240)
07-09 10:13:54.294: W/System.err(985):  at android.view.View$PerformClick.run(View.java:17721)
07-09 10:13:54.304: W/System.err(985):  at android.os.Handler.handleCallback(Handler.java:730)
07-09 10:13:54.316: W/System.err(985):  at android.os.Handler.dispatchMessage(Handler.java:92)
07-09 10:13:54.316: W/System.err(985):  at android.os.Looper.loop(Looper.java:137)
07-09 10:13:54.324: W/System.err(985):  at android.app.ActivityThread.main(ActivityThread.java:5103)
07-09 10:13:54.334: W/System.err(985):  at java.lang.reflect.Method.invokeNative(Native Method)
07-09 10:13:54.344: W/System.err(985):  at java.lang.reflect.Method.invoke(Method.java:525)
07-09 10:13:54.344: W/System.err(985):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-09 10:13:54.354: W/System.err(985):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-09 10:13:54.364: W/System.err(985):  at dalvik.system.NativeStart.main(Native Method)
07-09 10:14:02.895: E/SpannableStringBuilder(985): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
07-09 10:14:02.895: E/SpannableStringBuilder(985): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
07-09 10:14:05.855: I/Choreographer(985): Skipped 35 frames!  The application may be doing too much work on its main thread.
07-09 10:14:06.625: I/Choreographer(985): Skipped 64 frames!  The application may be doing too much work on its main thread.
07-09 10:14:07.585: I/Choreographer(985): Skipped 48 frames!  The application may be doing too much work on its main thread.
07-09 10:14:09.525: E/DB ERROR(985): java.lang.NullPointerException
07-09 10:14:09.525: W/System.err(985): java.lang.NullPointerException
07-09 10:14:09.555: W/System.err(985):  at com.example.haloapp.AABDatabaseManager.addRow(AABDatabaseManager.java:79)
07-09 10:14:09.555: W/System.err(985):  at com.example.haloapp.MainActivity.addRow(MainActivity.java:150)
07-09 10:14:09.625: W/System.err(985):  at com.example.haloapp.MainActivity.access$0(MainActivity.java:145)
07-09 10:14:09.635: W/System.err(985):  at com.example.haloapp.MainActivity$1.onClick(MainActivity.java:108)
07-09 10:14:09.656: W/System.err(985):  at android.view.View.performClick(View.java:4240)
07-09 10:14:09.656: W/System.err(985):  at android.view.View$PerformClick.run(View.java:17721)
07-09 10:14:09.665: W/System.err(985):  at android.os.Handler.handleCallback(Handler.java:730)
07-09 10:14:09.665: W/System.err(985):  at android.os.Handler.dispatchMessage(Handler.java:92)
07-09 10:14:09.665: W/System.err(985):  at android.os.Looper.loop(Looper.java:137)
07-09 10:14:09.695: W/System.err(985):  at android.app.ActivityThread.main(ActivityThread.java:5103)
07-09 10:14:09.695: W/System.err(985):  at java.lang.reflect.Method.invokeNative(Native Method)
07-09 10:14:09.715: W/System.err(985):  at java.lang.reflect.Method.invoke(Method.java:525)
07-09 10:14:09.715: W/System.err(985):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-09 10:14:09.745: W/System.err(985):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-09 10:14:09.745: W/System.err(985):  at dalvik.system.NativeStart.main(Native Method)
07-09 10:14:09.756: E/Add Error(985): java.lang.NullPointerException
07-09 10:14:09.756: W/System.err(985): java.lang.NullPointerException
07-09 10:14:09.785: W/System.err(985):  at com.example.haloapp.AABDatabaseManager.getAllRowsAsArrays(AABDatabaseManager.java:144)
07-09 10:14:09.785: W/System.err(985):  at com.example.haloapp.MainActivity.updateTable(MainActivity.java:290)
07-09 10:14:09.806: W/System.err(985):  at com.example.haloapp.MainActivity.addRow(MainActivity.java:157)
07-09 10:14:09.835: W/System.err(985):  at com.example.haloapp.MainActivity.access$0(MainActivity.java:145)
07-09 10:14:09.835: W/System.err(985):  at com.example.haloapp.MainActivity$1.onClick(MainActivity.java:108)
07-09 10:14:09.835: W/System.err(985):  at android.view.View.performClick(View.java:4240)
07-09 10:14:09.865: W/System.err(985):  at android.view.View$PerformClick.run(View.java:17721)
07-09 10:14:09.875: W/System.err(985):  at android.os.Handler.handleCallback(Handler.java:730)
07-09 10:14:09.885: W/System.err(985):  at android.os.Handler.dispatchMessage(Handler.java:92)
07-09 10:14:09.895: W/System.err(985):  at android.os.Looper.loop(Looper.java:137)
07-09 10:14:09.895: W/System.err(985):  at android.app.ActivityThread.main(ActivityThread.java:5103)
07-09 10:14:09.905: W/System.err(985):  at java.lang.reflect.Method.invokeNative(Native Method)
07-09 10:14:09.905: W/System.err(985):  at java.lang.reflect.Method.invoke(Method.java:525)
07-09 10:14:09.915: W/System.err(985):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-09 10:14:09.925: W/System.err(985):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-09 10:14:09.925: W/System.err(985):  at dalvik.system.NativeStart.main(Native Method)
07-09 10:14:19.634: I/Choreographer(985): Skipped 55 frames!  The application may be doing too much work on its main thread.
07-09 10:14:19.734: E/SpannableStringBuilder(985): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
07-09 10:14:19.734: E/SpannableStringBuilder(985): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
07-09 10:14:21.805: E/DB ERROR(985): java.lang.NullPointerException
07-09 10:14:21.805: W/System.err(985): java.lang.NullPointerException
07-09 10:14:21.924: W/System.err(985):  at com.example.haloapp.AABDatabaseManager.addRow(AABDatabaseManager.java:79)
07-09 10:14:21.944: W/System.err(985):  at com.example.haloapp.MainActivity.addRow(MainActivity.java:150)
07-09 10:14:21.944: W/System.err(985):  at com.example.haloapp.MainActivity.access$0(MainActivity.java:145)
07-09 10:14:21.944: W/System.err(985):  at com.example.haloapp.MainActivity$1.onClick(MainActivity.java:108)
07-09 10:14:21.954: W/System.err(985):  at android.view.View.performClick(View.java:4240)
07-09 10:14:21.954: W/System.err(985):  at android.view.View$PerformClick.run(View.java:17721)
07-09 10:14:21.964: W/System.err(985):  at android.os.Handler.handleCallback(Handler.java:730)
07-09 10:14:21.974: W/System.err(985):  at android.os.Handler.dispatchMessage(Handler.java:92)
07-09 10:14:21.974: W/System.err(985):  at android.os.Looper.loop(Looper.java:137)
07-09 10:14:21.984: W/System.err(985):  at android.app.ActivityThread.main(ActivityThread.java:5103)
07-09 10:14:21.984: W/System.err(985):  at java.lang.reflect.Method.invokeNative(Native Method)
07-09 10:14:21.994: W/System.err(985):  at java.lang.reflect.Method.invoke(Method.java:525)
07-09 10:14:22.004: W/System.err(985):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-09 10:14:22.004: W/System.err(985):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-09 10:14:22.014: W/System.err(985):  at dalvik.system.NativeStart.main(Native Method)
07-09 10:14:22.014: E/Add Error(985): java.lang.NullPointerException
07-09 10:14:22.024: W/System.err(985): java.lang.NullPointerException
07-09 10:14:22.058: W/System.err(985):  at com.example.haloapp.AABDatabaseManager.getAllRowsAsArrays(AABDatabaseManager.java:144)
07-09 10:14:22.058: W/System.err(985):  at com.example.haloapp.MainActivity.updateTable(MainActivity.java:290)
07-09 10:14:22.064: W/System.err(985):  at com.example.haloapp.MainActivity.addRow(MainActivity.java:157)
07-09 10:14:22.064: W/System.err(985):  at com.example.haloapp.MainActivity.access$0(MainActivity.java:145)
07-09 10:14:22.075: W/System.err(985):  at com.example.haloapp.MainActivity$1.onClick(MainActivity.java:108)
07-09 10:14:22.075: W/System.err(985):  at android.view.View.performClick(View.java:4240)
07-09 10:14:22.084: W/System.err(985):  at android.view.View$PerformClick.run(View.java:17721)
07-09 10:14:22.084: W/System.err(985):  at android.os.Handler.handleCallback(Handler.java:730)
07-09 10:14:22.094: W/System.err(985):  at android.os.Handler.dispatchMessage(Handler.java:92)
07-09 10:14:22.104: W/System.err(985):  at android.os.Looper.loop(Looper.java:137)
07-09 10:14:22.138: W/System.err(985):  at android.app.ActivityThread.main(ActivityThread.java:5103)
07-09 10:14:22.138: W/System.err(985):  at java.lang.reflect.Method.invokeNative(Native Method)
07-09 10:14:22.138: W/System.err(985):  at java.lang.reflect.Method.invoke(Method.java:525)
07-09 10:14:22.144: W/System.err(985):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-09 10:14:22.144: W/System.err(985):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-09 10:14:22.144: W/System.err(985):  at dalvik.system.NativeStart.main(Native Method)
07-09 10:15:09.164: I/Choreographer(985): Skipped 49 frames!  The application may be doing too much work on its main thread.
07-09 10:21:41.265: I/Choreographer(985): Skipped 51 frames!  The application may be doing too much work on its main thread.
07-09 10:21:42.525: I/Choreographer(985): Skipped 52 frames!  The application may be doing too much work on its main thread.
07-09 10:21:42.775: W/IInputConnectionWrapper(985): showStatusIcon on inactive InputConnection
07-09 10:21:48.015: I/Choreographer(985): Skipped 131 frames!  The application may be doing too much work on its main thread.

4 个答案:

答案 0 :(得分:1)

将.db扩展名添加到此行

private final String DB_NAME = "database_name"; // the name of our database

所以它看起来像这样

private final String DB_NAME = "database_name.db"; // the name of our database

编辑 - 每次引用db时它都为null,你需要获得对数据库的引用,如下所示:

SQLiteDatabase db = this.getWritableDatabase();
// OR
SQLiteDatabase db = this.getReadableDatabase();
// depending on what type of action you need to perform (READ vs WRITE)

答案 1 :(得分:0)

首先你必须创建一个数据库,如果你评论这个超级名称,那么就不会创建数据库。

private static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);

        }

或多或少这是我正在使用并且完美运行的代码。

代码:

import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.util.Log;

public class DBAdapter {

    public static final String KEY_name = "name";
    public static final String KEY_nr = "nr";

    private static DBAdapter instance;

    private DatabaseHelper mDbHelper;
    private SecretDatabaseHelper secretDbHelper;
    private SQLiteDatabase mDb, secretDB;
    private android.database.sqlite.SQLiteDatabase questionDB;

    private static final String DATABASE_NAME = "data";
    private static final String IN_TABLE = "in_table";

    private static final int DATABASE_VERSION = 1;

    /**
     * Database creation sql statement
     */
    private static final String IN_TABLE_CREATE = "create table "
            + IN_TABLE + " (_id integer primary key autoincrement, "
            + KEY_name + " text, " + KEY_nr + " text"
            + ");";
    private final Context mCtx;

    private static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);

        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(IN_TABLE_CREATE);        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        }
    }

    private DBAdapter(Context ctx) {

        mCtx = ctx;

    }

    public static synchronized DBAdapter getInstance(Context ctx) {

        if (instance == null) {
            instance = new DBAdapter(ctx);
            SQLiteDatabase.loadLibs(ctx);
        }

        return instance;
    }

    public DBAdapter open(String password) throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase(password);

        return this;
    }

    public boolean isOpen() {
        if (mDb != null) {
            return mDb.isOpen();
        } else {
            return false;
        }
    }   public Cursor getInCursor() {
        return mDb.query(IN_TABLE, null, null, null, null, null, null);
    }


}

答案 2 :(得分:0)

这是我的DataBaseHandler类。您可以修改它以供您使用。

public class DatabaseHandler extends SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "android_api";

// Login table name
private static final String TABLE_LOGIN = "login";

// Login Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_MEMBER_ID = "memberid";
private static final String KEY_EMAIL = "email";
private static final String KEY_ADDRESS = "address";
private static final String KEY_MOBILE = "mobile";
private static final String KEY_PASSWORD = "password";
private static final String KEY_UID = "uid";
private static final String KEY_CREATED_AT = "created_at";

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
            + KEY_MEMBER_ID + " TEXT," + KEY_EMAIL + " TEXT UNIQUE,"
            + KEY_ADDRESS + " TEXT," + KEY_MOBILE + " TEXT," + KEY_PASSWORD
            + " TEXT," + KEY_UID + " TEXT," + KEY_CREATED_AT + " TEXT"
            + ")";
    db.execSQL(CREATE_LOGIN_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOGIN);

    // Create tables again
    onCreate(db);
}

/**
 * Storing user details in database
 * */
public void addUser(String name, String memberid, String email,
        String address, String mobile, String password, String uid,
        String created_at) {

    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put(KEY_NAME, name); // Name
    values.put(KEY_MEMBER_ID, memberid);// Member ID
    values.put(KEY_EMAIL, email); // Email
    values.put(KEY_ADDRESS, address);// Address
    values.put(KEY_MOBILE, mobile);// Mobile
    values.put(KEY_PASSWORD, password);// Password
    values.put(KEY_UID, uid); // Email
    values.put(KEY_CREATED_AT, created_at); // Created At

    // Inserting Row
    db.insert(TABLE_LOGIN, null, values);
    db.close(); // Closing database connection
}

/**
 * Getting user data from database
 * */
public HashMap<String, String> getUserDetails() {

    HashMap<String, String> user = new HashMap<String, String>();

    String selectQuery = "SELECT  * FROM " + TABLE_LOGIN;

    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.rawQuery(selectQuery, null);
    // Move to first row
    cursor.moveToFirst();

    if (cursor.getCount() > 0) {
        user.put("name", cursor.getString(cursor.getColumnIndex(KEY_NAME)));
        user.put("memberid",
                cursor.getString(cursor.getColumnIndex(KEY_MEMBER_ID)));
        user.put("email",
                cursor.getString(cursor.getColumnIndex(KEY_EMAIL)));
        user.put("address",
                cursor.getString(cursor.getColumnIndex(KEY_ADDRESS)));
        user.put("mobile",
                cursor.getString(cursor.getColumnIndex(KEY_MOBILE)));
        user.put("password",
                cursor.getString(cursor.getColumnIndex(KEY_PASSWORD)));
        user.put("uid", cursor.getString(cursor.getColumnIndex(KEY_UID)));
        user.put("created_at",
                cursor.getString(cursor.getColumnIndex(KEY_CREATED_AT)));
    }
    cursor.close();
    db.close();
    // return user
    return user;
}

/**
 * Getting user login status return true if rows are there in table
 * */
public int getRowCount() {
    String countQuery = "SELECT  * FROM " + TABLE_LOGIN;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    int rowCount = cursor.getCount();
    db.close();
    cursor.close();

    // return row count
    return rowCount;
}

/**
 * Re crate database Delete all tables and create them again
 * */
public void resetTables() {
    SQLiteDatabase db = this.getWritableDatabase();
    // Delete All Rows
    db.delete(TABLE_LOGIN, null, null);
    db.close();
}

}

答案 3 :(得分:0)

SQLiteDatabase db = this.getWritableDatabase();

每次插入更新数据库时都包含此行 每次都需要数据库引用null