Java 在Android中查询数据库时出错

Java 在Android中查询数据库时出错,java,android,sql,sqlite,cursor,Java,Android,Sql,Sqlite,Cursor,我对Android编程还不熟悉,对java也不熟悉! 我一直在开发一个小程序,要求用户向EditText输入一些内容,一旦时间停止或用户单击Finish按钮,它就会在数据库中搜索用户设置的值。 也就是说,我在这一部分遇到了错误( 在另一个类中创建或访问数据库 公共类DBAccess扩展活动{ private DatabaseHelper databaseHelper; private SQLiteDatabase db; public void onCreate(Context contex

我对Android编程还不熟悉,对java也不熟悉! 我一直在开发一个小程序,要求用户向EditText输入一些内容,一旦时间停止或用户单击Finish按钮,它就会在数据库中搜索用户设置的值。 也就是说,我在这一部分遇到了错误(

在另一个类中创建或访问数据库

公共类DBAccess扩展活动{

private DatabaseHelper databaseHelper;
private SQLiteDatabase db;


public void onCreate(Context context){
    databaseHelper = new DatabaseHelper(context);
    searchDB();
}

public void openDB(){
    db = databaseHelper.getWritableDatabase();
}
public void closeDB(){
    db.close();
}
public void searchDB(){
    Intent Scoring = getIntent();
    String rawdata[] = Scoring.getStringArrayExtra("data");
    openDB();
    Object tableList[] = { "table1", "table2", "table3", "table4", "table5", "table6" };
    Object columnList[] = { "KEY_COLUMN1", "KEY_COLUMN2", "KEY_COLUMN3", "KEY_COLUMN4", "KEY_COLUMN5",
    "KEY_COLUMN6" };

    int downScore = 0;
    int upScore = 0;
    String dbStuff;

    Cursor cursor = null;

    for (int i = 0; i < tableList.length; i++) {
        if(rawdata[i] == "niente")
            downScore = downScore + 5;
        else {
            cursor = db.rawQuery("SELECT * FROM " + tableList[i] + " WHERE " + rawdata[i] + " = " + columnList[i] , null);
        dbStuff = cursor.toString();
        if (i == 0)
             cursor.moveToFirst();
        else
            cursor.moveToNext();
        if(dbStuff == rawdata[i])
            upScore = upScore + 10;
        else
            downScore = downScore + 5;
        }
    }
    closeDB();
    cursor.close();
    Intent i = new Intent(this, ScoreScreen.class);
    i.putExtra("uScore", upScore);
    i.putExtra("dScore", downScore);
    }
私有数据库助手DatabaseHelper;
专用数据库数据库;
创建公共void(上下文){
databaseHelper=新的databaseHelper(上下文);
searchDB();
}
public void openDB(){
db=databaseHelper.getWritableDatabase();
}
公共数据库(){
db.close();
}
public void searchDB(){
意图评分=getIntent();
字符串rawdata[]=Scoring.getStringArrayExtra(“数据”);
openDB();
对象表列表[]={“表1”、“表2”、“表3”、“表4”、“表5”、“表6”};
对象列列表[]={“键列1”、“键列2”、“键列3”、“键列4”、“键列5”,
“第6列键”};
int-downScore=0;
int upScore=0;
凝灰岩;
游标=空;
对于(int i=0;i

}

您需要在
onCreate()
中初始化数据库及其帮助程序:


在设计方面,独立于DB访问层本身的DB构建和维护方面

为此,有2个类。1)将所有的构造和维护放在DBHelper.java中,2)DBAccess.java有访问数据库的方法

下面是这个的代码片段。。。请注意,应用程序(活动)本身应该对DB本身的构造一无所知,也不具有可见性(请参见DBHelper类本身的可见性),而只是对简单的访问方法(如open、close、CRUD方法)具有完全可见性


活动使用数据库,您可以有一个名为setupDB()的方法,该方法在创建活动期间调用:

private void setupDB() {
    dbAccess = new DBAccess(this);
    dbAccess.openDB();
}

:

private void searchDB() {
    :

    mStatusList = dbAccess.selectAllStatus();

    :
}

:
:

数据库
在此初始化<代码>数据库=dbHelper.getReadableDatabase()
但是仍然需要创建
dbHelper
。之后它们也应该关闭。谢谢你们的回复!但我在database=new SQLiteDatabase();->构造函数SQLiteDatabase()不可见。Sam,我不明白你对dbHelper所说的需要创建的内容谢谢Todd,但我在上下文中得到一个错误,它说:上下文不能解析为变量。嗯,我试着在android开发者网站上搜索,很难找到你想要的。所以我不知道为什么会有上下文。不要使用
context
thisCEO,谢谢。照你说的做了,几乎很棒,但是mStatusList=dbAccess.selectAllStatus()有一个问题;它表示DBAccess类型未定义。我也在android开发者网站和谷歌上搜索过。找不到它,也不知道它是干什么的。啊!还有一件事。要使用游标,我需要将它指向SQLitedatabase,但它在DBAccess类中;在我的示例中,该方法称为selectAllStatus()。。。相反,使用你自己的方法。其思想是,游标etc位于DBAccess内,位于将返回对象容器的方法内。在您的例子中,这样的方法是searchDB(),但它应该返回一个对象的容器(列表),在您的例子中,您将处理的字符串(dbStuff),在您的例子中显示tvCounter.setText(“耶”);啊!!非常感谢。虽然它是一个安卓系统,但有某种功能。真的很不一样,现在好像都清澈见底了!:)不幸的是,它几乎和水一样清澈。。。我更改了您给我的示例中的一些内容,特别是将public DBAccess(){}更改为public void onCreate(){},以便有目的地传递string[]数据。所以,这次没有错误消息,至少没有红色消息。但当我将一些值传递给下一个显示结果的类时,并没有显示任何内容。我希望你或其他善良的人能发现我犯了什么愚蠢的错误!
private DatabaseHelper databaseHelper;
private SQLiteDatabase db;


public void onCreate(Context context){
    databaseHelper = new DatabaseHelper(context);
    searchDB();
}

public void openDB(){
    db = databaseHelper.getWritableDatabase();
}
public void closeDB(){
    db.close();
}
public void searchDB(){
    Intent Scoring = getIntent();
    String rawdata[] = Scoring.getStringArrayExtra("data");
    openDB();
    Object tableList[] = { "table1", "table2", "table3", "table4", "table5", "table6" };
    Object columnList[] = { "KEY_COLUMN1", "KEY_COLUMN2", "KEY_COLUMN3", "KEY_COLUMN4", "KEY_COLUMN5",
    "KEY_COLUMN6" };

    int downScore = 0;
    int upScore = 0;
    String dbStuff;

    Cursor cursor = null;

    for (int i = 0; i < tableList.length; i++) {
        if(rawdata[i] == "niente")
            downScore = downScore + 5;
        else {
            cursor = db.rawQuery("SELECT * FROM " + tableList[i] + " WHERE " + rawdata[i] + " = " + columnList[i] , null);
        dbStuff = cursor.toString();
        if (i == 0)
             cursor.moveToFirst();
        else
            cursor.moveToNext();
        if(dbStuff == rawdata[i])
            upScore = upScore + 10;
        else
            downScore = downScore + 5;
        }
    }
    closeDB();
    cursor.close();
    Intent i = new Intent(this, ScoreScreen.class);
    i.putExtra("uScore", upScore);
    i.putExtra("dScore", downScore);
    }
  database = new SQLiteDatabase();
  dbHelper = new DatabaseHelper();
:

class DBHelper extends SQLiteOpenHelper {

    :
    :

    private SQLiteDatabase db;
    private static final int DATABASE_VERSION = 1;
    private static final String DB_NAME = "dbname.db";
    :
    :

}

public class DBAccess {

    :
    :

    private DBHelper dbHelper;
    private SQLiteDatabase db;

    :
    :

    public DBAccess(Context context) {
        dbHelper = new DBHelper(context);
    }

    /**
     * Open the database
     */
    public void openDB() {
        db = dbHelper.getWritableDatabase();
    }

    /**
     * Close the database
     */
    public void closeDB() {
        db.close();
    }

    :
    :
}
private void setupDB() {
    dbAccess = new DBAccess(this);
    dbAccess.openDB();
}

:

private void searchDB() {
    :

    mStatusList = dbAccess.selectAllStatus();

    :
}

:
: