Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中运行SQLite数据库中的查询?_Java_Android_Sqlite - Fatal编程技术网

Java 如何在android中运行SQLite数据库中的查询?

Java 如何在android中运行SQLite数据库中的查询?,java,android,sqlite,Java,Android,Sqlite,在我的SQLite数据库管理器中,我可以查询: SELECT SUM(odometer) as odometer FROM tripmileagetable where date like '2012-07%'; 此查询返回2012年7月名为“tripmileagetable”的表中里程表列的总和,但我想在android查询中编写此代码 但是我不知道如何在数据库中建立这个查询。query()方法,有人能帮忙吗?您可以使用以下方法: 这取决于您计划如何在Android中访问数据库。您可以尝试以下

在我的SQLite数据库管理器中,我可以查询:

SELECT SUM(odometer) as odometer FROM tripmileagetable where date like '2012-07%';
此查询返回2012年7月名为“tripmileagetable”的表中里程表列的总和,但我想在android查询中编写此代码

但是我不知道如何在数据库中建立这个查询。query()方法,有人能帮忙吗?

您可以使用以下方法:


这取决于您计划如何在Android中访问数据库。您可以尝试以下方法:

SQLiteDatabase db = this.getWritableDatabase();
String selectQuery = "select sum(odometer) as odometer from tripmileagetable where date like '2012-07%'";
Cursor cursor = db.rawQuery(selectQuery, null);
SQLiteDatabase db = SQLiteDatabase.openDatabase("/data/data/com.package.name/databases/dbname.db", null, SQLiteDatabase.OPEN_READWRITE);
String selectQuery = "select sum(odometer) as odometer from tripmileagetable where date like '2012-07%'";
Cursor cursor = db.rawQuery(selectQuery, null);
如果您使用的是SQLiteOpenHelper类,则可以使用上述方法

如果您自己创建了数据库文件,则可以执行以下操作:

SQLiteDatabase db = this.getWritableDatabase();
String selectQuery = "select sum(odometer) as odometer from tripmileagetable where date like '2012-07%'";
Cursor cursor = db.rawQuery(selectQuery, null);
SQLiteDatabase db = SQLiteDatabase.openDatabase("/data/data/com.package.name/databases/dbname.db", null, SQLiteDatabase.OPEN_READWRITE);
String selectQuery = "select sum(odometer) as odometer from tripmileagetable where date like '2012-07%'";
Cursor cursor = db.rawQuery(selectQuery, null);
对SQLiteDatase、游标和SQLiteOpenHelper进行一些研究

此示例可能会帮助您:


您的字段未在表数据库中创建,请签出表中的字段。因为我在我身上看到了这个问题。我使用SQLite管理员查看我的数据库

或者,如果没有,请查看createdatabase的源代码。确保您的源代码是真实的,然后您可以在文件资源管理器上删除旧数据库(我的意思是使用eclipse)。您可以使用新数据库再次运行。

Android完全支持。您在应用程序内部创建的所有数据库都可以从应用程序的所有类访问(而不是从应用程序外部访问!)

首先,您应该创建一个扩展的Java类。在这里,您必须重写onCreate()和onUpdate()方法。可以假设,在创建DB时调用第一个,而在修改DB时调用后一个

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


/**
 * Class DatabaseHelper.
 */
public class DatabaseHelper extends SQLiteOpenHelper {
    //Database parameters:
    private static final String DATABASE_NAME = "dbname";  // the name of the DB!
    private static final int DATABASE_VERSION = 2;
    private static final String DATABASE_TABLE_NAME = "tripmileagetable";  // the name of the table!

    //Table attributes:
    private static final String DATABASE_TABLE_ATTR_ID = "id";  // attr1
    private static final String DATABASE_TABLE_ATTR_ODOMETER = "odometer";  // attr2
    private static final String DATABASE_TABLE_ATTR_DATE = "date";  // attr3


    /**
     * Class constructor.
     *
     * @param context  the context.
     */
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        String create = "CREATE TABLE " + DATABASE_TABLE_NAME + " (" +
                        DATABASE_TABLE_ATTR_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                        DATABASE_TABLE_ATTR_ODOMETER + " INTEGER, " +
                        DATABASE_TABLE_ATTR_DATE + " TEXT);";

        db.execSQL( create );
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE_NAME);
        onCreate(db);
    }
}
现在,在新的Java类中,您可以创建自定义方法来查询数据库

要写入数据库,应使用getWritableDatabase(),而要读取数据库,应使用getReadableDatabase()。它们都返回一个SQLiteDatabase对象,并最终抛出一个SQLiteException。 特别是,要查询数据库,有两种SQLiteDatabase方法可用:rawQuery和query(都返回游标对象)

请注意,SQLite会自动在参数(?)周围加上单引号(')


你可以在这里找到一个很好的教程:

谢谢,我正在检查它,并会让你知道结果:)我已经做了,但它得到了一个异常,说,android.database.CursorIndexOutOfBoundsException:Index-1请求,大小为1时,我相信您可以使用
GROUP BY
对数据进行求和?这一个给出了索引越界异常:(游标c=ourDB.rawQuery(“从tripmileagetable中选择sum(里程表)作为里程表,其中car='abdul'和日期如'2012-07%',null);如果(c.getCount()首先需要调用c.moveToFirst();在调用c.getInt()之前)
/**
 * Get the sum of the odometer of a particular month and year.
 *
 * @param year  the year.
 * @param month  the month.
 * @return the sum of the odometer of the year and the month.
 */
public int sumOdometer(Integer year, Integer month) {
    //Date composition:
    String date = year.toString() + "-" + month.toString() + "%";

    //SQL query:
    String query = "SELECT SUM(" + DATABASE_TABLE_ATTR_ODOMETER + ") AS " + DATABASE_TABLE_ATTR_ODOMETER + 
                   " FROM " + DATABASE_TABLE_NAME +
                   " WHERE " + DATABASE_TABLE_ATTR_DATE + "LIKE ?";

    //Execute the SQL query:
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.rawQuery(query, new String [] {date});

    int sum = 0;
    if( cursor.moveToFirst() ) {  // moves the cursor to the first row in the result set...
        sum = cursor.getInt( cursor.getColumnIndex(DATABASE_TABLE_ATTR_ODOMETER) );
    }

    //Close the Cursor:
    cursor.close();

    return sum;
}