如何在我的应用程序中添加两个数据库?这是一个好习惯吗?
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();
当然,它会很有帮助,并且会成功运行。
【讨论】:
谢谢,会努力实现的。以上是关于如何在我的应用程序中添加两个数据库?这是一个好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章