如何在我的应用程序中添加两个数据库?这是一个好习惯吗?

Posted

技术标签:

【中文标题】如何在我的应用程序中添加两个数据库?这是一个好习惯吗?【英文标题】:How to add two databases in my application? Is it a good practice? 【发布时间】:2020-02-01 09:39:59 【问题描述】:

我正在开发一个需要从服务器获取视频的应用程序,并且我需要用户身份验证,用户只有支付了费用才能观看视频。现在有人建议我使用两个数据库,即从 cloudinary 数据库中获取视频(很快)并使用 firebase 来存储用户信息。现在的问题是我不知道该怎么做,以及在一个项目中使用两个数据库是否是个好主意。

请帮忙。

【问题讨论】:

【参考方案1】:

在一个应用程序中使用多个数据库没有固有的技术问题。事实上,根据您定义数据库的方式,在您的代码执行之前,可能已经有多个数据库在使用中。

只需按照每个数据库的文档将它们添加到应用程序,并与它们进行交互。如果您遇到其中一个问题,请通过minimal steps how anyone can reproduce that problem 发布问题。大多数情况下,这只需要其中一个数据库。

【讨论】:

感谢您的回复,我一定会想办法做到这一点。【参考方案2】:

正如你所说,有人建议你使用两个数据库。

Firebase 为您提供两种不同的数据库类型。

Firebase Realtime Database 和 Firestore。如需更多指导,请参阅给定链接上的文档。

用于您的应用程序的数据库结构。

1. Firestore 数据库结构:

User
  -> user_id(uid of [Firebase Auth][3])
         - name
         - user_payment : Paid or unpaid
         - user other details

2。 Firebase 实时数据库结构:

Users
  ->paid_users(uid)
        - user details
  ->unpaid users(uid)
        - user details

根据上述结构,您 (->) 此符号用作 Collection 并且 (-) 此符号用于 Collection 或 Document 的 Fields。如果您想了解更多详细信息,请在下方评论。

【讨论】:

谢谢,问题是获取视频时firebase太慢了,这就是为什么我不得不寻找其他选项的原因。免费版是否提供上述功能? 如果您阅读有关firestore 和realtime database 的定价,则免费版本有限制。 好的,谢谢你,我会尝试实施并看看它的去向。 我为文档提供的链接需要任何帮助,只需使用 firebase 标签发布问题 好的,我会实施,看看效果如何。【参考方案3】:

做或不做,这取决于情况,但 这是在 android 应用程序中添加两个数据库的完全工作代码。 两个数据库和一个 MainActivity.java 的两个单独文件

    DatabaseFaculty.java DatabaseStudent.java MainActivity.java

DatabaseFaculty.java

public class DatabaseFaculty 
public static final String DATABASE_NAME="dbfaculty";
public static final String TABLE_NAME="tablefaculty";
public static final int DATABSE_VERSION=1;


public static final String FID="fid";
public static final String FNAME="fname";


//to create a table
private static final String TABLE_CREATE_FACULTY="create table tablefaculty(fid INTEGER, fname TEXT);";

private Context context;
SQLiteDatabase db;  // manipulation with database
DatabaseHelper dbhelper;

public DatabaseFaculty(Context ctx) 
    // TODO Auto-generated constructor stub
    this.context=ctx;
    dbhelper=new DatabaseHelper(ctx);



//SQLITEOpenHelper has methods to creae and open
class DatabaseHelper extends SQLiteOpenHelper

    //DatabaseHelper's constructor will create the database
    public DatabaseHelper(Context context) 
        super(context, DATABASE_NAME, null, DATABSE_VERSION);
        // TODO Auto-generated constructor stub
    

    @Override
    public void onCreate(SQLiteDatabase db) 
        // TODO Auto-generated method stub
        db.execSQL(TABLE_CREATE_FACULTY);
        Log.d("table is created..","tablefaculty");
    

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS");
        onCreate(db);
    





public DatabaseFaculty Open() throws SQLException

        db=dbhelper.getWritableDatabase();
        return this;


public void close()

    dbhelper.close();


public long insertData(int fid,String fname)

        ContentValues initialvalues=new ContentValues();

        initialvalues.put(FID, fid);
        initialvalues.put(FNAME,fname);

        return db.insert(TABLE_NAME, null,initialvalues);



public Cursor getNames()

    String query="SELECT fname FROM "+TABLE_NAME;
    Cursor cur=db.rawQuery(query, null);
    return cur;



public void getFacultyDetail(String rfid) 
    // TODO Auto-generated method stub
    db.delete(TABLE_NAME,  FID + " = ?",  new String[]  rfid);
    Log.d("Delete called....","Delete called.....");



DatabaseStudent.java

public class DatabaseStudent 
public static final String DATABASE_NAME="dbstudent";
public static final String TABLE_NAME="tablestudent";
public static final int DATABSE_VERSION=1;


public static final String ROLLNO="rollno";
public static final String SNAME="sname";
public static final String CITY="city";


//to create a table
private static final String TABLE_CREATE_STUDENT="create table tablestudent(rollno INTEGER, sname TEXT, city TEXT);";

private Context context;
SQLiteDatabase db;  // manipulation with database
DatabaseHelper dbhelper;

public DatabaseStudent(Context ctx) 
    // TODO Auto-generated constructor stub
    this.context=ctx;
    dbhelper=new DatabaseHelper(ctx);



//SQLITEOpenHelper has methods to creae and open
class DatabaseHelper extends SQLiteOpenHelper

    //DatabaseHelper's constructor will create the database
    public DatabaseHelper(Context context) 
        super(context, DATABASE_NAME, null, DATABSE_VERSION);
        // TODO Auto-generated constructor stub
    

    @Override
    public void onCreate(SQLiteDatabase db) 
        // TODO Auto-generated method stub
        db.execSQL(TABLE_CREATE_STUDENT);
        Log.d("table is created..","tablestudent");
    

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS");
        onCreate(db);
    





public DatabaseStudent Open() throws SQLException

        db=dbhelper.getWritableDatabase();
        return this;


public void close()

    dbhelper.close();


public long insertData(int rollno,String sname,String city)

        ContentValues initialvalues=new ContentValues();

        initialvalues.put(ROLLNO, rollno);
        initialvalues.put(SNAME,sname);
        initialvalues.put(CITY,city);

        return db.insert(TABLE_NAME, null,initialvalues);



public Cursor getNames()

    String query="SELECT fname FROM "+TABLE_NAME;
    Cursor cur=db.rawQuery(query, null);
    return cur;





public void deleteStudentDetail(String rrollno) 
    // TODO Auto-generated method stub
    db.delete(TABLE_NAME,  ROLLNO + " = ?",  new String[]  rrollno);
    Log.d("Delete called....","Delete called.....");



MainActivity.java

public class MainActivity extends AppCompatActivity 

DatabaseFaculty databaseFaculty;
DatabaseStudent databaseStudent;


@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    databaseFaculty=new DatabaseFaculty(getApplicationContext());
    databaseFaculty.Open();
    databaseFaculty.close();

    databaseStudent=new DatabaseStudent(getApplicationContext());
    databaseStudent.Open();
    databaseStudent.close();



当然,它会很有帮助,并且会成功运行。

【讨论】:

谢谢,会努力实现的。

以上是关于如何在我的应用程序中添加两个数据库?这是一个好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章

这是问答的好习惯吗?

Mongoose - 更新模型的实例方法,这是一种好习惯吗?

每秒查询表以获取通知。这是一个好习惯吗?

如何在我的应用程序中添加静音按钮?

在我的手机游戏中添加图像

如何在我的程序中添加 PyQt 菜单栏?