База данных Helloworld - соединение Android с sqlite - PullRequest
1 голос
/ 20 сентября 2011

Я новичок в Android.Мне нужно запрограммировать простое приложение hello-world, которое показывает на экране некоторые данные о базе данных, с которой связано приложение.Вот моя попытка, но она вылетает в части «выбрать или показать».Он состоит из двух файлов: Main и DataBaseHelper.

Main:

package com.SQLearning;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;

public class HelloTestSQLActivity extends Activity {
    DatabaseHelper dbHelper;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        dbHelper = new DatabaseHelper(this);
        int seats = dbHelper.getSeats("2");
        TextView tv = new TextView(this);
        setContentView(tv);
        tv.setText( "My first Android App: This is a Hello World Test..." +
                    "Database connection in progress..." +
                    "Table 1 has "+seats);

        dbHelper.close();
    }
}

DatabaseHelper:

package com.SQLearning;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {

    static final String dbName="demoDB";
    static final String tablesTable="Tables";
    static final String colNum="TableNum";
    static final String colSeats="NumSeats";
    private final Context myContext; 

    static final String viewTables="ViewTables";

    public DatabaseHelper(Context context) {
        super(context, dbName, null,2); 
        this.myContext = context;
    }

    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub

        db = getWritableDatabase();

        db.execSQL("CREATE TABLE "+tablesTable+" ("+colNum+ " INTEGER PRIMARY KEY , "+
                                                  colSeats+ " INTEGER)");


        db.execSQL("CREATE VIEW "+viewTables+
                   " AS SELECT "+tablesTable+"."+colNum+" AS _id,"+
                   " "+tablesTable+"."+colSeats+","+
                   " FROM "+tablesTable);

        //Inserts pre-defined departments
        insertTableRecords();
    }

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
          // TODO Auto-generated method stub

          db.execSQL("DROP TABLE IF EXISTS "+tablesTable);
          db.execSQL("DROP VIEW IF EXISTS "+viewTables);
          onCreate(db);
     }

    public void insertTableRecords() {
        SQLiteDatabase db=this.getWritableDatabase();
        ContentValues cv=new ContentValues();

        cv.put(colNum, 1);
        cv.put(colSeats, 3);
        db.insert(tablesTable, colNum, cv);

        cv.put(colNum, 2);
        cv.put(colSeats, 6);
        db.insert(tablesTable, colNum, cv);

        cv.put(colNum, 3);
        cv.put(colSeats, 5);
        db.insert(tablesTable, colNum, cv);

        cv.put(colNum, 4);
        cv.put(colSeats, 2);
        db.insert(tablesTable, colNum, cv);

        db.close();
    }

    public int getSeats(String tablenum)
    {
        SQLiteDatabase db=this.getReadableDatabase();

        String[] args = new String[] {"1"};
        Cursor cur = db.rawQuery(" SELECT "+colSeats+" FROM "+tablesTable+" WHERE "+colNum+"=? ", args);

        cur.moveToFirst();
        db.close();
        //return cur.getInt(cur.getColumnIndex(colSeats));
        return cur.getInt(0);

     }
 }

Заранее спасибо

1 Ответ

1 голос
/ 21 сентября 2011

Вы закрываете соединение с базой данных и затем пытаетесь прочитать что-то из курсора.Курсор указывает на вашу базу данных, и он потерпит неудачу, если вы закроете соединение за это время.

Замените:

   db.close();
   return cur.getInt(0);

На:

  int value= cur.getInt(0);
  db.close();
  return value;

Также всегда смотритев журналах (вкладка DDMS в Eclipse) вы можете увидеть описание исключения.

Кстати.Вы не должны использовать индексы столбцов напрямую, код не очень читабелен.Вместо cur.getInt (0) используйте cur.getInt (cur.getColumnIndex (colSeats)) ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...