android studio中的数据库[关闭]

Posted

技术标签:

【中文标题】android studio中的数据库[关闭]【英文标题】:Database in android studio [closed] 【发布时间】:2014-09-10 17:50:29 【问题描述】:

我是一名 windows phone 开发人员,最近我开始使用 android studio 开发 android 应用程序。

我需要创建一个数据库并在其中存储值并在屏幕上检索更新的值,所以我需要以下帮助:

    正在创建数据库。 如何在屏幕上显示数据库中的值?

【问题讨论】:

【参考方案1】:

要创建数据库,您需要扩展 SQLiteOpenHelper 并需要一个带有 Context 的构造函数。 假设您将此类命名为 DBOperator。表创建过程将如下所示,

public class DbOperator extends SQLiteOpenHelper 

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "DB_NAME";
    protected static final String FIRST_TABLE_NAME = "FIRST_TABLE";
    protected static final String SECOND_TABLE_NAME = "SECOND_TABLE";

    public static final String CREATE_FIRST_TABLE = "create table if not exists "
            + FIRST_TABLE_NAME
            + " ( _id integer primary key autoincrement, COL1  TEXT NOT NULL, COL2 TEXT NOT NULL,COL3 TEXT, COL4 int, COL5 TEXT,"
            + "COL6 TEXT,COL7 REAL, COL8 INTEGER,COL9 TEXT not null);";

    public static final String CREATE_SECOND_TABLE = "create table if not exists "
            + SECOND_TABLE_NAME+.........

    public DbOperator(Context context) 
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    

    @Override
    public void onCreate(SQLiteDatabase db) 
        db.execSQL(CREATE_SFIRST_TABLE);
        db.execSQL(CREATE_SECOND_TABLE);
        //db.close();
    

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        //THIS WILL BE EXECUTED WHEN YOU UPDATED VERSION OF DATABASE_VERSION
        //YOUR DROP AND CREATE QUERIES
    


现在您的数据操作类(添加、删除、更新)将如下所示,

public class FirstTableDML extends DbOperator 

    public FirstTableDML(Context context) 
        super(context);
    

    private static final String COL_ID = "_id";
    private static final String COL1 = "COL1";
    private static final String COL2 = "COL2";
    ........
    .......

    public void deleteFirstTableDataList(List<FirstTableData> firstTableDataList) 
        for (FirstTableData data : firstTableDataList)
            deleteFirstTableDetailData(data);
    
    public void deleteFirstTableDetailData(FirstTableData item) 
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(FIRST_TABLE_NAME, item.getId() + "=" + COL_ID, null);
        db.close();
    
    /**this method retrieves all the records from table and returns them as list of  
     FirstTableData types. Now you use this list to display detail on your screen as per your 
    requirements.
    */
    public List< FirstTableData > getFirstTableDataList() 
        List< FirstTableData > firstTableDataList = new ArrayList< FirstTableData >();
        String refQuery = "Select * From " + FIRST_TABLE_NAME;
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(refQuery, null);
        try 
            if (cursor.moveToFirst()) 
                do 
                    FirstTableData itemData = new FirstTableData();

                    itemData.setId(cursor.getInt(0));

                    itemData.setCol1(cursor.getString(1));
                    itemData.setCol2(cursor.getInt(2));
                    .....
                    .....

                    firstTableDataList.add(itemData);
                 while (cursor.moveToNext());
            
         finally 

            db.close();
        

        Collections.sort(itemDataList);
        return itemDataList;
    

    public int  addFirstTableData(FirstTableData data) 
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();

        values.put(COL1, data.getCol1());
        values.put(COL2, data.getCol2());
        .....
        .....
        long x=db.insert(FIRST_TABLE_NAME, null, values);
        db.close();
        return (int)x;
    

    public void updateItemDetailData(FirstTableData data) 
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();

        values.put(COL1, data.getCol1());
        values.put(COL2, data.getCol2());
        values.put(COL3, data.getCol3());
        .....
        .....


        db.update(FIRST_TABLE_NAME, values, COL_ID + "=" + data.getId(),    null);
        db.close();
    


P.S : *Data 类是 POJO 数据类,代表对应的表。 由于您说您对这些并不完全陌生,因此我没有提供任何帮助 cmets,因为大多数方法名称都是不言自明的。 希望它可以帮助您入门。

【讨论】:

【参考方案2】:

为Android应用创建数据库有两种方式:

    使用代码创建数据库和表 使用现有数据库

1) 使用代码创建数据库和表

在这种情况下,您必须编写一个类和代码来为其创建数据库和表。您必须使用不同的类和接口,例如 SQLiteOpenHelper、SQLiteDatabase 等。请查看 Jimmy 上面发布的答案。

2) 使用现有数据库

在这种情况下,您可以在 android 应用程序中使用现有的 sqlite 数据库。您必须将数据库文件放在 assets 文件夹中并编写代码将现有数据库复制到内部或外部存储。

关于最佳方案,我想说这取决于应用程序的功能和性质,如果您的数据库很小,那么您应该使用第一种方案,如果您的数据库很大并且有很多表,那么您应该使用第二种方案,因为您会使用任何基于 GUI 的 SQLite 浏览器创建数据库,这将帮助您减少错误。 (当我说使用 GUI 的错误更少时,相信我有机会通过代码创建表)。

如何在屏幕上显示数据库中的值?

为此,您必须编写一个 SQL 查询,该查询为您提供Cursor 作为回报,这是一组结果数据,因此您必须遍历游标数据并根据 ArrayList 或 Array 或哈希映射。

您可以在ListViewGridView中显示这组数据。

附:我没有发布任何教程或示例的链接,因为网络上有大量信息/示例,因此建议您围绕给定点进行搜索。

【讨论】:

【参考方案3】:

一个好的开始方法是阅读 Android 官方文档网站上的 Storage Options:http://developer.android.com/guide/topics/data/data-storage.html

【讨论】:

以上是关于android studio中的数据库[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Studio 中同时从 recyclerview 和数据库中删除数据? [关闭]

我们可以在同一个 Android Studio 项目中使用多个数据库吗? [关闭]

android studio中的代码是啥[关闭]

如何使 Android 应用程序与 Android Studio 中的所有 6735 Android 设备兼容 [关闭]

谁能告诉我android studio中的这个错误是啥[关闭]

适用于Android Studio的十六进制代码颜色库[关闭]