
我有一部分代码在查询数据库后返回数组,但是当我运行应用程序时,它崩溃了
//info is the name of the object of the type DataBase info.open(); String[] data = info.queryAll(); info.close();数据库代码的一部分,我试图在其中检索某一列的数据库的所有行
public String[] queryAll() { String[] columns = new String[] { KEY_name }; Cursor cursor = ourDatabase.query(DATABASE_table, columns, null, null, null, null, null); if (cursor != null) { try { final int nameColumnIndex = cursor.getColumnIndex(KEY_name); List<String> names = new ArrayList<String>(); while (cursor.movetoNext()) { names.add(cursor.getString(nameColumnIndex)); } return names.toArray(new String[names.size()]); } finally { cursor.close(); } } return null;}是因为我的数据库开头是空的吗?如果是的话,我该如何纠正代码?
所有建议都会有所帮助’
谢谢
LOGCAT
09-23 22:26:47.780: E/AndroIDRuntime(2825): FATAL EXCEPTION: main09-23 22:26:47.780: E/AndroIDRuntime(2825): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.contactList/com.example.contactList.Contacts}: androID.database.sqlite.sqliteException: no such table: mycontacts (code 1): , while compiling: SELECT Contact_name FROM mycontacts09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2059)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.app.ActivityThread.access0(ActivityThread.java:130)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.os.Handler.dispatchMessage(Handler.java:99)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.os.Looper.loop(Looper.java:137)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.app.ActivityThread.main(ActivityThread.java:4745)09-23 22:26:47.780: E/AndroIDRuntime(2825): at java.lang.reflect.Method.invokeNative(Native Method)09-23 22:26:47.780: E/AndroIDRuntime(2825): at java.lang.reflect.Method.invoke(Method.java:511)09-23 22:26:47.780: E/AndroIDRuntime(2825): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)09-23 22:26:47.780: E/AndroIDRuntime(2825): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:553)09-23 22:26:47.780: E/AndroIDRuntime(2825): at dalvik.system.NativeStart.main(Native Method)09-23 22:26:47.780: E/AndroIDRuntime(2825): Caused by: androID.database.sqlite.sqliteException: no such table: mycontacts (code 1): , while compiling: SELECT Contact_name FROM mycontacts09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.database.sqlite.sqliteConnection.nativePrepareStatement(Native Method)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.database.sqlite.sqliteConnection.acquirePreparedStatement(sqliteConnection.java:882)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.database.sqlite.sqliteConnection.prepare(sqliteConnection.java:493)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.database.sqlite.sqliteSession.prepare(sqliteSession.java:588)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.database.sqlite.sqliteProgram.<init>(sqliteProgram.java:58)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.database.sqlite.sqlitequery.<init>(sqlitequery.java:37)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.database.sqlite.sqliteDirectCursorDriver.query(sqliteDirectCursorDriver.java:44)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.database.sqlite.sqliteDatabase.rawqueryWithFactory(sqliteDatabase.java:1314)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.database.sqlite.sqliteDatabase.queryWithFactory(sqliteDatabase.java:1161)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.database.sqlite.sqliteDatabase.query(sqliteDatabase.java:1032)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.database.sqlite.sqliteDatabase.query(sqliteDatabase.java:1200)09-23 22:26:47.780: E/AndroIDRuntime(2825): at com.example.contactList.DBContact.queryAll(DBContact.java:97)09-23 22:26:47.780: E/AndroIDRuntime(2825): at com.example.contactList.Contacts.onCreate(Contacts.java:38)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.app.Activity.performCreate(Activity.java:5008)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)09-23 22:26:47.780: E/AndroIDRuntime(2825): at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2023)09-23 22:26:47.780: E/AndroIDRuntime(2825): ... 11 more数据库代码
public class DBContact { public static final String KEY_ROWID = "_ID"; public static final String KEY_name = "Contact_name"; public static final String KEY_PERSONALPHONE = "Personal_Phonenumber"; public static final String KEY_HOMEPHONE = "Home_Phonenumber"; public static final String KEY_OFFICEPHONE = "Office_Phonenumber"; private static final String DATABASE_name = "Contact_name"; private static final String DATABASE_table = "mycontacts"; private static final int DATABASE_VERSION = 1; // Instance of the class DbHelper private DbHelper ourHelper; private final Context ourContext; private sqliteDatabase ourDatabase; public static final String[] KEYS_ALL = { DBContact.KEY_ROWID, DBContact.KEY_name, DBContact.KEY_PERSONALPHONE, DBContact.KEY_HOMEPHONE, DBContact.KEY_OFFICEPHONE }; private static class DbHelper extends sqliteOpenHelper { private static final String DATABASE_CREATE = "create table contacts (_ID integer primary key autoincrement, " + "Contact_name text not null, Personal_Phonenumber text not null, Home_Phonenumber text not null, Office_Phone text not null); "; public DbHelper(Context context) { super(context, DATABASE_name, null, DATABASE_VERSION); // Todo auto-generated constructor stub } @OverrIDe public voID onCreate(sqliteDatabase ourDatabase) { // Todo auto-generated method stub try { ourDatabase.execsql(DATABASE_CREATE); } catch (sqlException e) { e.printstacktrace(); } } @OverrIDe public voID onUpgrade(sqliteDatabase ourDatabase, int oldVersion, int newVersion) { // Todo auto-generated method stub ourDatabase.execsql("DROP table IF EXISTS contacts"); onCreate(ourDatabase); } } // Context of constructor withhin our Class public DBContact(Context c) { ourContext = c; } // Opens the database public DBContact open() throws sqlException { // Constructor for DB Helper class takes in a Context // Context is passed in is "ourContext" for within our class ourHelper = new DbHelper(ourContext); // Passes in DB name and Version // ourDatabase is of type sqlite DataBase ourDatabase = ourHelper.getWritableDatabase(); return this; } // Closes the database connection public voID close() { // refer to our DbHelper and close the sqlite DataBase Helper ourHelper.close(); ourHelper = null; ourDatabase = null; } // Deletes the Row public boolean deleteRow(long rowID) { return ourDatabase.delete(DATABASE_table, DBContact.KEY_ROWID + "=" + rowID, null) > 0; } public String[] queryAll() { String[] columns = new String[] { KEY_name }; Cursor cursor = ourDatabase.query(DATABASE_table, columns, null, null, null, null, null); if (cursor != null) { try { final int nameColumnIndex = cursor.getColumnIndex(KEY_name); List<String> names = new ArrayList<String>(); cursor.movetoFirst(); while (cursor.movetoNext()) { names.add(cursor.getString(nameColumnIndex)); } return names.toArray(new String[names.size()]); } finally { cursor.close(); } } return null; } /*public Cursor queryAll(){ String[] columns = new String[] {KEY_name}; return ourDatabase.query(DATABASE_table, columns, null, null, null, null, null); if(data == null){ columns[0] = "NO CONTACTS PRESENT"; return columns; }else{ return columns; } }*/ public long newRow(String name, String pphone, String hphone, String ophone) { // Todo auto-generated method stub ContentValues newvalue = new ContentValues(); newvalue.put(KEY_name, name); newvalue.put(KEY_PERSONALPHONE, pphone); newvalue.put(KEY_HOMEPHONE, hphone); newvalue.put(KEY_OFFICEPHONE, ophone); return ourDatabase.insert(DATABASE_table, null, newvalue); } public String getname(Long l) { // Todo auto-generated method stub String[] columns = new String[] { KEY_ROWID, KEY_name, KEY_PERSONALPHONE, KEY_HOMEPHONE, KEY_OFFICEPHONE }; Cursor c = ourDatabase.query(DATABASE_table, columns, KEY_ROWID + "=" + 1, null, null, null, null); if (c != null) { c.movetoFirst(); String name = c.getString(1); return name; } return null; } public String getPphone(Long l) { // Todo auto-generated method stub String[] columns = new String[] { KEY_ROWID, KEY_name, KEY_PERSONALPHONE, KEY_HOMEPHONE, KEY_OFFICEPHONE }; Cursor c = ourDatabase.query(DATABASE_table, columns, KEY_ROWID + "=" + 1, null, null, null, null); if (c != null) { c.movetoFirst(); String Pphone = c.getString(2); return Pphone; } return null; } public String getHphone(Long l) { // Todo auto-generated method stub String[] columns = new String[] { KEY_ROWID, KEY_name, KEY_PERSONALPHONE, KEY_HOMEPHONE, KEY_OFFICEPHONE }; Cursor c = ourDatabase.query(DATABASE_table, columns, KEY_ROWID + "=" + 1, null, null, null, null); if (c != null) { c.movetoFirst(); String Hphone = c.getString(3); return Hphone; } return null; } public String getophone(Long l) { // Todo auto-generated method stub String[] columns = new String[] { KEY_ROWID, KEY_name, KEY_PERSONALPHONE, KEY_HOMEPHONE, KEY_OFFICEPHONE }; Cursor c = ourDatabase.query(DATABASE_table, columns, KEY_ROWID + "=" + 1, null, null, null, null); if (c != null) { c.movetoFirst(); String Ophone = c.getString(4); return Ophone; } return null; }}解决方法:
private static final String DATABASE_CREATE = "create table contacts (_ID integer primary key autoincrement, " + "Contact_name text not null, Personal_Phonenumber text not null, Home_Phonenumber text not null, Office_Phone text not null); ";上面的代码与Office_Phone的声明不匹配.也别人怎么说.
总结以上是内存溢出为你收集整理的android-SQLite数据库后应用程序崩溃全部内容,希望文章能够帮你解决android-SQLite数据库后应用程序崩溃所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)