【问题标题】:How to setup MySQL database tables for an Android Studio Application?如何为 Android Studio 应用程序设置 MySQL 数据库表?
【发布时间】:2017-03-11 15:22:30
【问题描述】:

目前我正在为我在大学的最后一堂课开发一个应用程序。该应用程序的概念是一个保持联系的应用程序,本质上,用户将看到一个登录屏幕,如果他们已经有一个帐户,他们可以在该屏幕上登录,如果没有,则可以注册。当您注册时,用户将被提示输入他们的姓名、用户名、密码和电子邮件。然后他们提交它,他们将再次受到登录屏幕的欢迎,他们现在可以使用他们最近创建的凭据登录。一旦他们成功登录,他们将显示一个 Activity,该 Activity 通过匹配登录时的用户名和密码从数据库中的表中检索到他们的名字来欢迎他们,它会检索该行中的所有信息。我几乎把它记下来了,但我遇到的麻烦是我要在哪里保存用户想要保存的联系人,我知道那必须在另一个表中,但我将如何设置它所以我可以将某个用户与其他表中的所有联系人进行匹配。

一旦我得到这些信息,我需要将它放在 ListView 上,以便用户可以查看他们的联系人并滚动浏览他们,然后他们可以添加、删除或编辑它们。

截至目前,我可以毫无问题地注册、登录和显示欢迎屏幕,我只需要能够添加、删除和编辑联系人即可。

Java 用于 Android Studio 部分,PHP 用于在主机中建立联机连接的文件。

我正在使用 Volley 和 JSON 请求。

向数据库发出请求的数据库和 PHP 文件托管在 000webhost 中。

【问题讨论】:

  • 你可以从这里开始Android CRUD Tutorial
  • 听起来很难。祝你好运!你能为我们提供的不仅仅是作业吗?你已经尝试了什么?我们可以查看您的代码,以便其他人可以修改它吗?
  • 我需要有关如何在数据库中设置表的帮助。表 1 用户:id、姓名、用户名、密码、电子邮件字段。然后我有表 2 联系人:id、user_id、firstname、lastname、phone、email。我想知道如何将这两张表匹配起来,我想与 user_id 但我不知道我是否在正确的轨道上

标签: java php android mysql database-design


【解决方案1】:

这似乎是一个简单的 CRUD 应用程序。 如果您使用 RESTful 通信模型,实现起来非常简单。 至于存储联系人,您可以拥有一个特定于每个用户的文件,并将该文件的 URI 放在数据库中的用户表上。该文件可以是 CSV 或 JSON,可以使用正确的 API 轻松转换为 POJO。

祝你好运。

【讨论】:

    【解决方案2】:

    首先,创建一个 MySQLite Helper 类

    public class MySQLiteHelper extends SQLiteOpenHelper {
    public static final String TABLE_CONTACTS = "contacts";
    public static final String COLUMN_CONTACTS_ID = "_id";
    public static final String COLUMN_NAME = "name";
    public static final String COLUMN_USERNAME ="username";
    public static final String COLUMN_PASSWORD = "password"
    
    private static final String DATABASE_NAME = "Contacts.db";
    private static final int DATABASE_VERSION = 1;
    
    private static final String DATABASE_CONTACTS_CREATE = "create table "+ TABLE_CONTACTS+
            "("+COLUMN_CONTACTS_ID+" integer primary key autoincrement, "
            +COLUMN_NAME+" text not null, "
            +COLUMN_USERNAME+" text not null,"
            +COLUMN_PASSWORD+" text not null);";
    
    
    public MySQLiteHelper(Context context){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    
    @Override
    public void onCreate(SQLiteDatabase database){
        database.execSQL(DATABASE_CONTACTS_CREATE);
    }
    
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        Log.w(MySQLiteHelper.class.getName(),"Upgrading database from version "
                +oldVersion
                + " to"
                +newVersion
                +", which will destroy all old data");
    
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_CONTACTS);
    
        onCreate(db);
    }}
    

    然后是模型类

    public class ContactModel {
    private long id;
    private String name;
    private String username;
    private String password;
    ///////////
    public long getId(){
        return id;
    }
    public void setId(long id){
        this.id = id;
    }
    //////////
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setUsername(String username){
        this.username = username;
    }
    ////////////
    public String getPassword(){
        return password;
    }
    public void setPassword(String password){
        this.password = password;
    }    }
    

    然后是数据源

    public class ContactsDataSource {
    
    private SQLiteDatabase database;
    private MySQLiteHelper dbHelper;
    private String[] allContactsColumns = {MySQLiteHelper.COLUMN_CONTACTS_ID,MySQLiteHelper.COLUMN_NAME,MySQLiteHelper.COLUMN_USERNAME,
            MySQLiteHelper.COLUMN_PASSWORD};
    
    public ContactsDataSource(Context context){
        dbHelper = new MySQLiteHelper(context);
    }
    
    public void open() throws SQLException {
        database = dbHelper.getWritableDatabase();
    }
    
    public void close(){
        dbHelper.close();
    }
    
    
    public ContactModel createContact(String name, String username, String password){
        ContentValues values = new ContentValues();
        values.put(MySQLiteHelper.COLUMN_NAME, name);
        values.put(MySQLiteHelper.COLUMN_EMAIL,username);
        values.put(MySQLiteHelper.COLUMN_PHONE,password);
        long insertContactsId = database.insert(MySQLiteHelper.TABLE_CONTACTS, null, values);
        Cursor cursor = database.query(MySQLiteHelper.TABLE_CONTACTS,allContactsColumns,MySQLiteHelper.COLUMN_CONTACTS_ID+" = "
                +insertContactsId, null, null, null, null);
        cursor.moveToFirst();
        ContactModel newContact = cursorToContact(cursor);
        cursor.close();
        Log.d("written", "Info was written");
        return newContact;
    }
    
    
    public void deleteContact(ContactModel contact){
        long id = contact.getId();
        System.out.println("Comment deleted with id: "+id);
        database.delete(MySQLiteHelper.TABLE_CONTACTS,MySQLiteHelper.COLUMN_CONTACTS_ID
                +" = "+id,null);
    }
    
    
    public ArrayList<ContactModel> getAllContacts(){
        ArrayList<ContactModel> contacts = new ArrayList<>();
        Cursor cursor = database.query(MySQLiteHelper.TABLE_CONTACTS, allContactsColumns, null, null, null, null, null);
    
        cursor.moveToFirst();
        while (!cursor.isAfterLast()){
            ContactModel contact = cursorToContact(cursor);
            contacts.add(contact);
            cursor.moveToNext();
        }
        cursor.close();
        return contacts;
    }
    
    private ContactModel cursorToContact(Cursor cursor){
        ContactModel contact = new ContactModel();
        contact.setId(cursor.getLong(0));
        contact.setName(cursor.getString(1));
        contact.setUsername(cursor.getString(2));
        contact.setPassword(cursor.getString(3));
        return contact;
    }}
    

    您按如下方式访问数据源:

        //Open the database
        dataSource = new ContactsDataSource(this);
        dataSource.open();
        //use datasource functions like create and delete
        datasource.close();
    

    您可以通过调用 ContactsDataSource.getAllContacts() 在列表视图中显示信息,并使用自定义 listAdapter 显示结果。这个想法是您将使用数据源的函数来获取您想要的数据,并将其提供给模型类。从那里您可以提取列表视图所需的内容。如果您需要更多帮助,请告诉我。

    您还提到想要在数据库中创建多个表,这就像使用上面的代码一样简单,只需添加另一个变量,例如 TABLE_CONTACTS2 = "contacts2",并复制该表的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 2016-11-16
      • 2018-04-12
      • 2014-09-16
      相关资源
      最近更新 更多