我在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.
答案 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