ANDROID SQLITE:如何检索某一行的主键[重复]

sqlserverAndroid

1个回答

写回答

Chennengan

2025-07-09 15:27

+ 关注

Android
Android

使用Android中的SQLite数据库时,有时我们需要根据某一行的主键来检索数据。这个问题在Stack Overflow上已经有人问过了,下面就来详细解答一下。

Android中,SQLite数据库是一种轻量级的数据库,常用于存储应用程序的数据。当我们需要从数据库中检索某一行的主键时,可以使用一些SQL查询语句来实现。

首先,我们需要创建一个SQLiteOpenHelper类来帮助我们管理数据库。这个类负责创建数据库、升级数据库和打开数据库连接。我们可以在这个类中添加一些方法来实现我们的需求。

接下来,我们需要定义一个方法来查询某一行的主键。我们可以使用SQL的SELECT语句来实现这个功能。下面是一个例子:

Java

public long getPrimaryKeyById(int id) {

SQLiteDatabase db = this.getReadableDatabase();

String query = "SELECT _id FROM table_name WHERE id = ?";

Cursor cursor = db.rawQuery(query, new String[]{String.valueOf(id)});

long primaryKey = -1;

if (cursor.moveToFirst()) {

primaryKey = cursor.getLong(0);

}

cursor.close();

db.close();

return primaryKey;

}

在上面的代码中,我们首先获取一个可读的数据库连接。然后,我们使用SQL的SELECT语句来查询指定id的行的主键。注意,这里的"table_name"是你的表名,"id"是你要查询的行的id。我们使用了一个占位符"?"来代替id,然后将实际的id值作为参数传入。

接下来,我们使用Cursor对象来遍历查询结果。如果查询结果不为空,我们可以通过调用cursor.getLong(0)来获取第一列的值,即主键。最后,我们关闭Cursor和数据库连接,并返回查询到的主键。

这样,我们就实现了根据某一行的主键来检索数据的功能。

案例代码:

假设我们有一个名为"users"的表,其中有三列:"id"、"name"和"age"。我们可以使用上面的方法来查询某一行的主键,然后根据主键来获取其他列的值。

下面是一个完整的例子:

Java

public class MyDatabaseHelper extends SQLiteOpenHelper {

private static final String Database_NAME = "my_Database";

private static final int Database_VERSION = 1;

public MyDatabaseHelper(Context context) {

super(context, Database_NAME, null, Database_VERSION);

}

@Override

public void onCreate(SQLiteDatabase db) {

// 创建表的SQL语句

String createTableQuery = "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";

db.execSQL(createTableQuery);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// 升级数据库的操作

}

public long getPrimaryKeyById(int id) {

SQLiteDatabase db = this.getReadableDatabase();

String query = "SELECT _id FROM users WHERE id = ?";

Cursor cursor = db.rawQuery(query, new String[]{String.valueOf(id)});

long primaryKey = -1;

if (cursor.moveToFirst()) {

primaryKey = cursor.getLong(0);

}

cursor.close();

db.close();

return primaryKey;

}

}

// 在Activity中使用

public class MAInActivity extends AppCompatActivity {

private MyDatabaseHelper dbHelper;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setcontentView(R.layout.activity_mAIn);

dbHelper = new MyDatabaseHelper(this);

// 查询id为1的行的主键

long primaryKey = dbHelper.getPrimaryKeyById(1);

// 根据主键查询其他列的值

String name = getNameByPrimaryKey(primaryKey);

int age = getAgeByPrimaryKey(primaryKey);

// 打印结果

Log.d("MAInActivity", "Name: " + name);

Log.d("MAInActivity", "Age: " + age);

}

private String getNameByPrimaryKey(long primaryKey) {

SQLiteDatabase db = dbHelper.getReadableDatabase();

String query = "SELECT name FROM users WHERE _id = ?";

Cursor cursor = db.rawQuery(query, new String[]{String.valueOf(primaryKey)});

String name = "";

if (cursor.moveToFirst()) {

name = cursor.getString(0);

}

cursor.close();

db.close();

return name;

}

private int getAgeByPrimaryKey(long primaryKey) {

SQLiteDatabase db = dbHelper.getReadableDatabase();

String query = "SELECT age FROM users WHERE _id = ?";

Cursor cursor = db.rawQuery(query, new String[]{String.valueOf(primaryKey)});

int age = -1;

if (cursor.moveToFirst()) {

age = cursor.getInt(0);

}

cursor.close();

db.close();

return age;

}

}

在上面的例子中,我们首先创建了一个名为"users"的表,并插入了一些示例数据。然后,我们使用getPrimaryKeyById方法来获取id为1的行的主键。接着,我们使用getNameByPrimaryKeygetAgeByPrimaryKey方法来根据主键查询其他列的值。最后,我们将查询结果打印出来。

这样,我们就成功地根据某一行的主键检索了数据。

在本文中,我们讨论了如何在Android中使用SQLite数据库来检索某一行的主键。我们首先创建了一个SQLiteOpenHelper类来管理数据库,然后定义了一个方法来查询指定行的主键。我们使用了SQL的SELECT语句和Cursor对象来实现这个功能,并提供了一个完整的例子来演示具体的用法。

希望本文对你有所帮助!

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号