Android 为组创建脱机SQLite数据库

Android 为组创建脱机SQLite数据库,android,sqlite,Android,Sqlite,我正在尝试在应用程序中创建“组的数据库”页面。但我不知道如何创造这个。 此页面包括两个文本组。那是我的小组和我的第二小组。这两个组中的每个组都包含用于选择电子邮件id的微调器。通过选择特定的电子邮件id,有两个按钮是“添加”和“删除”。 当我选择一个Id并单击“添加”按钮时,它将保存在服务器端。单击微调器下方有另一个文本视图,我可以看到该Id已添加。如果我要添加的选定Id已存在,则会显示消息。对于“删除”按钮也是如此。我的第二组也是这样。现在我只想知道如何为这个页面创建和存储SQLite数据库,

我正在尝试在应用程序中创建“组的数据库”页面。但我不知道如何创造这个。 此页面包括两个文本组。那是我的小组和我的第二小组。这两个组中的每个组都包含用于选择电子邮件id的微调器。通过选择特定的电子邮件id,有两个按钮是“添加”和“删除”。 当我选择一个Id并单击“添加”按钮时,它将保存在服务器端。单击微调器下方有另一个文本视图,我可以看到该Id已添加。如果我要添加的选定Id已存在,则会显示消息。对于“删除”按钮也是如此。我的第二组也是这样。现在我只想知道如何为这个页面创建和存储SQLite数据库,以便它从SQLite而不是web服务器获取数据

**Fragmentgroups.java**



    public class FragmentGroups extends Fragment {

         private SharedPreferences pref;
         Cursor cursor;
         ArrayList<member> membr,membr2;
         ListView list1 ;
         ListView list2 ;
         Button add,delete,add2,delete2;
         TextView gp1,gp2;
         GroupAdapter groupadapter;
         private Typeface ftype;
         SendJobDataBase db;
         FragmentDialog dialog ;
         ArrayList<String> emailArray = new ArrayList<String>();
         String memail;
         private String login_token;
         ArrayAdapter<String> adapter ;
         Spinner e1,e2;
         String emails[];

         public FragmentGroups(){}

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.group_fragment, container, false);
            e1=(Spinner) rootView.findViewById(R.id.eemail);
            e2=(Spinner) rootView.findViewById(R.id.eemail2); 
                     new Members().execute();
             add =(Button) rootView.findViewById(R.id.add);
             add2 =(Button) rootView.findViewById(R.id.add2);
             delete =(Button) rootView.findViewById(R.id.delete);
             delete2 =(Button) rootView.findViewById(R.id.delete2);
             gp1  =(TextView) rootView.findViewById(R.id.viewm);
             gp2  =(TextView) rootView.findViewById(R.id.views);
             pref=this.getActivity().getSharedPreferences("Driver", getActivity().MODE_WORLD_READABLE);
             login_token = pref.getString("login_token","login_token"); 

            add.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                    new AddMembers().execute(); 
                    }           
                });

            add2.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                        new AddMembers2().execute();    
                        }           
                    });

            delete.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                        new DeleteMembers().execute();  
                        }           
                    });
            delete2.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                        new DeleteMembers2().execute(); 
                        }           
                    });

            gp1.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    Intent intent =new Intent(getActivity() ,viewgroup.class);
                    startActivity(intent);
                        }           
                    });

            gp2.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    Intent intent2 =new Intent(getActivity() ,viewsecgroup.class);
                    startActivity(intent2);
                        }           
                    });

             return rootView;
           }

        private class Members extends AsyncTask<String, String, String[]> {


            @Override
            protected String[] doInBackground(final String... params) 
            {
                ConnectivityManager conMgr = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
                if (conMgr.getActiveNetworkInfo() != null
                        && conMgr.getActiveNetworkInfo().isAvailable()
                        && conMgr.getActiveNetworkInfo().isConnected()) 
                {
                    HttpClient httpclient = new DefaultHttpClient();
                    try 
                    {
                        JSONObject job= new JSONObject();
                         job.put("status_key","2");
                         job.put("method","driver_emails");
                         job.put("login_token",login_token);
                         System.out.print(login_token);


                      StringEntity se = new StringEntity(job.toString());
                      HttpPost httppost = new HttpPost("http://suntechwebsolutions.com/clients/mobileapp_now/webservice.php");
                      httppost.setEntity(se);

                      HttpResponse response = httpclient.execute(httppost);
                      String data = EntityUtils.toString(response.getEntity());

                      JSONObject jo = new JSONObject(data);
                      Log.d("response", jo.toString(4));

                        JSONArray jArray = jo.getJSONArray("all_driver_email_Ids");  
                          for (int i=0; i < jArray.length(); i++)
                        {
                            System.out.println("please print my name...for....");
                            try {
                                JSONObject jsob = jArray.getJSONObject(i);
                                emailArray.add(jsob.getString("Email").toString());

                                 adapter = new ArrayAdapter<String>(getActivity(), R.layout.listrow, emailArray);           
                          } catch (JSONException e) {

                            } 
                        }

                        }
                catch (Exception e) 
                    {
                        e.printStackTrace();
                    }
                }

                return params;

            }             

            @SuppressLint("NewApi")
            @Override
            protected void onPostExecute(String[] result) 
            {

                super.onPostExecute(result);
                e1.setAdapter(adapter); 
                e2.setAdapter(adapter);
            }
            }   

        private class AddMembers extends AsyncTask<String, String, String[]> {
            ProgressDialog pDialog = new ProgressDialog(getActivity());
            @Override
            protected String[] doInBackground(final String... params) 
            {
                ConnectivityManager conMgr = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
                if (conMgr.getActiveNetworkInfo() != null
                        && conMgr.getActiveNetworkInfo().isAvailable()
                        && conMgr.getActiveNetworkInfo().isConnected()) 
                {
                    HttpClient httpclient = new DefaultHttpClient();
                    try 
                    {
                    JSONObject job= new JSONObject();

                        memail= e1.getSelectedItem().toString();
                        System.out.println(memail);
                        memail.replace("" ,"%20");
                         job.put("email",memail);

                         job.put("status_key","2");
                         job.put("method","add_emails");
                         job.put("login_token",login_token);

                        StringEntity se = new StringEntity(job.toString());
                        HttpPost httppost = new HttpPost("http://suntechwebsolutions.com/clients/mobileapp_now/webservice.php");
                        httppost.setEntity(se);
                        HttpResponse response = httpclient.execute(httppost);
                        String data = EntityUtils.toString(response.getEntity());
                           Log.i("response", data);

                            System.out.println("response "+data);
                                    String call;
                                    call = data;

                                    System.out.println("print me............."+call);

                                    JSONObject jo = new JSONObject(data);
                                    Log.d("response", jo.toString(4));

                                    if(jo.getString("err-code").equals("0"))
                                    {
                                        final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
                                        alert.setTitle("Alert!!!");
                                        alert.setMessage(jo.getString("message"));
                                        alert.setPositiveButton("Ok",
                                                new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog,
                                                    int whichButton) 
                                            {
                                                pDialog.dismiss();
                                    dialog.dismiss();


                                            }
                                        });
                                        getActivity().runOnUiThread(new Runnable() {
                                            public void run() {
                                                alert.show();
                                            }
                                        });
                                    }
                                    else
                                    {
                                final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
                                        alert.setTitle("Alert !");
                                        alert.setMessage(jo.getString("message"));
                                        alert.setPositiveButton("Ok",
                                                new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog,
                                                    int whichButton) {
                                                dialog.dismiss();

                                            }
                                        });
                                        getActivity().runOnUiThread(new Runnable() 
                                        {
                                            public void run() 
                                            {
                                                pDialog.dismiss();

                                                alert.show();
                                            }
                                        });
                                    }

                                }
                                catch (Exception e) 
                                {
                                    e.printStackTrace();
                                }
                            }
                            return params;
                        }
                        @Override
                        protected void onPostExecute(String[] result) 
                        {

                            super.onPostExecute(result);
                        }       
            }   


        private class DeleteMembers extends AsyncTask<String, String, String[]> {
            ProgressDialog pDialog = new ProgressDialog(getActivity());
            @Override
            protected String[] doInBackground(final String... params) 
            {
                ConnectivityManager conMgr = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
                if (conMgr.getActiveNetworkInfo() != null
                        && conMgr.getActiveNetworkInfo().isAvailable()
                        && conMgr.getActiveNetworkInfo().isConnected()) 
                {
                    HttpClient httpclient = new DefaultHttpClient();
                    try 
                    {
                    JSONObject job= new JSONObject();

                        memail= e1.getSelectedItem().toString();
                        System.out.println("email is " +memail);
                        memail.replace("" ,"%20");
                         job.put("email",memail);
                         job.put("status_key","2");
                         job.put("method","delete_groupemails");
                         job.put("login_token",login_token);

                        StringEntity se = new StringEntity(job.toString());
                        HttpPost httppost = new HttpPost("http://suntechwebsolutions.com/clients/mobileapp_now/webservice.php");
                        httppost.setEntity(se);
                        HttpResponse response = httpclient.execute(httppost);
                        String data = EntityUtils.toString(response.getEntity());
                           Log.i("response", data);

                            System.out.println("response "+data);
                                    String call;
                                    call = data;

                                    System.out.println("print me............."+call);

                                    JSONObject jo = new JSONObject(data);
                                    Log.d("response", jo.toString(4));

                                    if(jo.getString("err-code").equals("0"))
                                    {
                                        final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
                                        alert.setTitle("Alert!!!");
                                        alert.setMessage(jo.getString("message"));
                                        alert.setPositiveButton("Ok",
                                                new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog,
                                                    int whichButton) 
                                            {
                                                pDialog.dismiss();
                                    dialog.dismiss();


                                            }
                                        });
                                        getActivity().runOnUiThread(new Runnable() {
                                            public void run() {
                                                alert.show();
                                            }
                                        });
                                    }
                                    else
                                    {
                                final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
                                        alert.setTitle("Alert !");
                                        alert.setMessage(jo.getString("message"));
                                        alert.setPositiveButton("Ok",
                                                new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog,
                                                    int whichButton) {
                                                dialog.dismiss();

                                            }
                                        });
                                        getActivity().runOnUiThread(new Runnable() 
                                        {
                                            public void run() 
                                            {
                                                pDialog.dismiss();

                                                alert.show();
                                            }
                                        });
                                    }

                                }
                                catch (Exception e) 
                                {
                                    e.printStackTrace();
                                }
                            }
                            return params;
                        }
                        @Override
                        protected void onPostExecute(String[] result) 
                        {

                            super.onPostExecute(result);
                        }

        }   


        private class AddMembers2 extends AsyncTask<String, String, String[]> {
            ProgressDialog pDialog = new ProgressDialog(getActivity());
            @Override
            protected String[] doInBackground(final String... params) 
            {
                ConnectivityManager conMgr = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
                if (conMgr.getActiveNetworkInfo() != null
                        && conMgr.getActiveNetworkInfo().isAvailable()
                        && conMgr.getActiveNetworkInfo().isConnected()) 
                {
                    HttpClient httpclient = new DefaultHttpClient();
                    try 
                    {
                    JSONObject job= new JSONObject();

                        memail= e2.getSelectedItem().toString();
                        System.out.println(memail);
                        memail.replace("" ,"%20");
                         job.put("email",memail);
                         job.put("status_key","2");
                         job.put("method","add_myscndryemails");
                         job.put("login_token",login_token);

                        StringEntity se = new StringEntity(job.toString());
                        HttpPost httppost = new HttpPost("http://suntechwebsolutions.com/clients/mobileapp_now/webservice.php");
                        httppost.setEntity(se);
                        HttpResponse response = httpclient.execute(httppost);
                        String data = EntityUtils.toString(response.getEntity());
                           Log.i("response", data);

                            System.out.println("response "+data);
                                    String call;
                                    call = data;

                                    System.out.println("print me............."+call);

                                    JSONObject jo = new JSONObject(data);
                                    Log.d("response", jo.toString(4));

                                    if(jo.getString("err-code").equals("0"))
                                    {
                                        final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
                                        alert.setTitle("Alert!!!");
                                        alert.setMessage(jo.getString("message"));
                                        alert.setPositiveButton("Ok",
                                                new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog,
                                                    int whichButton) 
                                            {
                                                pDialog.dismiss();
                                    dialog.dismiss();


                                            }
                                        });
                                        getActivity().runOnUiThread(new Runnable() {
                                            public void run() {
                                                alert.show();
                                            }
                                        });
                                    }
                                    else
                                    {
                                final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
                                        alert.setTitle("Alert !");
                                        alert.setMessage(jo.getString("message"));
                                        alert.setPositiveButton("Ok",
                                                new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog,
                                                    int whichButton) {
                                                dialog.dismiss();

                                            }
                                        });
                                        getActivity().runOnUiThread(new Runnable() 
                                        {
                                            public void run() 
                                            {
                                                pDialog.dismiss();

                                                alert.show();
                                            }
                                        });
                                    }

                                }
                                catch (Exception e) 
                                {
                                    e.printStackTrace();
                                }
                            }
                            return params;
                        }
                        @Override
                        protected void onPostExecute(String[] result) 
                        {

                            super.onPostExecute(result);
                        }       
                   }    

        private class DeleteMembers2 extends AsyncTask<String, String, String[]> {
            ProgressDialog pDialog = new ProgressDialog(getActivity());
            @Override
            protected String[] doInBackground(final String... params) 
            {
                ConnectivityManager conMgr = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
                if (conMgr.getActiveNetworkInfo() != null
                        && conMgr.getActiveNetworkInfo().isAvailable()
                        && conMgr.getActiveNetworkInfo().isConnected()) 
                {
                    HttpClient httpclient = new DefaultHttpClient();
                    try 
                    {
                    JSONObject job= new JSONObject();

                        memail= e2.getSelectedItem().toString();
                        System.out.println("email is " +memail);
                        memail.replace("" ,"%20");
                         job.put("email",memail);

                         job.put("status_key","2");
                         job.put("method","delete_scndryemails");
                         job.put("login_token",login_token);

                        StringEntity se = new StringEntity(job.toString());
                        HttpPost httppost = new HttpPost("http://suntechwebsolutions.com/clients/mobileapp_now/webservice.php");
                        httppost.setEntity(se);
                        HttpResponse response = httpclient.execute(httppost);
                        String data = EntityUtils.toString(response.getEntity());
                           Log.i("response", data);

                            System.out.println("response "+data);
                                    String call;
                                    call = data;

                                    System.out.println("print me............."+call);

                                    JSONObject jo = new JSONObject(data);
                                    Log.d("response", jo.toString(4));

                                    if(jo.getString("err-code").equals("0"))
                                    {
                                        final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
                                        alert.setTitle("Alert!!!");
                                        alert.setMessage(jo.getString("message"));
                                        alert.setPositiveButton("Ok",
                                                new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog,
                                                    int whichButton) 
                                            {
                                                pDialog.dismiss();
                                    dialog.dismiss();
                                        }
                                        });
                                        getActivity().runOnUiThread(new Runnable() {
                                            public void run() {
                                                alert.show();
                                            }
                                        });
                                    }
                                    else
                                    {
                                final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
                                        alert.setTitle("Alert !");
                                        alert.setMessage(jo.getString("message"));
                                        alert.setPositiveButton("Ok",
                                                new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog,
                                                    int whichButton) {
                                                dialog.dismiss();

                                            }
                                        });
                                        getActivity().runOnUiThread(new Runnable() 
                                        {
                                            public void run() 
                                            {
                                                pDialog.dismiss();

                                                alert.show();
                                            }
                                        });
                                    }

                                }
                                catch (Exception e) 
                                {
                                    e.printStackTrace();
                                }
                            }
                            return params;
                        }
                        @Override
                        protected void onPostExecute(String[] result) 
                        {

                            super.onPostExecute(result);
                        }

        }   

    }




**GroupAdapter.java**



package com.sunmobile.navigationdrawer;

import java.util.ArrayList;
import com.sunmobileappnow.mobileappnow.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;



public class GroupAdapter extends ArrayAdapter<member> {


    GroupAdapter gdb;
    Activity activity;
    int layoutResourceId;
    member user;
    ArrayList<member> data = new ArrayList<member>();
    ListView l1;
    SendJobDataBase db;
   FragmentGroups fg;




public GroupAdapter(Activity act, int layoutResourceId,
            ArrayList<member> data) {
            super(act, layoutResourceId, data);
            this.layoutResourceId = layoutResourceId;
            this.activity = act;
            this.data = data;
            notifyDataSetChanged();
        }



    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        MemberHolder holder = null;

        if (row == null) {
        LayoutInflater inflater = LayoutInflater.from(activity);

        row = inflater.inflate(layoutResourceId, parent, false);
        holder = new MemberHolder();
        holder.name = (TextView) row.findViewById(R.id.user_name_txt);
        holder.delete = (Button) row.findViewById(R.id.btn_delete);
        row.setTag(holder);
       } else {
    holder = (MemberHolder) row.getTag();
        }
       user = data.get(position);

        holder.name.setText(user.getName());




      holder.delete.setOnClickListener(new OnClickListener() {

        public void onClick(final View v) {


            AlertDialog.Builder adb = new AlertDialog.Builder(activity);
            adb.setTitle("Delete?");
            adb.setMessage("Are you sure you want to delete ");
            final int user_id = Integer.parseInt(v.getTag().toString());
            adb.setNegativeButton("Cancel", null);
            adb.setPositiveButton("Ok",
                new AlertDialog.OnClickListener() {
                public void onClick(DialogInterface dialog,
                    int which) {
                    // MyDataObject.remove(positionToRemove);
                    SendJobDataBase dBHandler = new SendJobDataBase(
                        activity.getApplicationContext());
                   dBHandler.Delete_Contact(user_id);


                }
                });    


            adb.show();
        }

        });  
        return row;

    }

    class MemberHolder {
        TextView name;
       Button delete;
    }

    }
**Fragmentgroups.java**
公共类FragmentGroups扩展了Fragment{
私人共享参考优先;
光标;
ArrayList membr,membr2;
列表视图列表1;
列表视图列表2;
按钮添加、删除、添加2、删除2;
TextView gp1、gp2;
组适配器组适配器;
私人字体;
数据库数据库数据库;
碎片对话框;
ArrayList emailArray=新的ArrayList();
字符串memail;
私有字符串登录令牌;
阵列适配器;
旋转器e1,e2;
字符串电子邮件[];
公共碎片组(){}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.group_碎片,容器,false);
e1=(微调器)rootView.findviewbyd(R.id.eemail);
e2=(微调器)rootView.findviewbyd(R.id.eemail2);
新成员().execute();
add=(按钮)rootView.findviewbyd(R.id.add);
add2=(按钮)rootView.findViewById(R.id.add2);
delete=(按钮)rootView.findviewbyd(R.id.delete);
delete2=(按钮)rootView.findViewById(R.id.delete2);
gp1=(TextView)rootView.findViewById(R.id.viewm);
gp2=(TextView)rootView.findViewById(R.id.views);
pref=this.getActivity().getSharedReferences(“驱动程序”,getActivity().MODE\u WORLD\u可读);
login_token=pref.getString(“login_token”、“login_token”);
add.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
新建AddMembers().execute();
}           
});
add2.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
新建AddMembers2().execute();
}           
});
delete.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
新建DeleteMembers().execute();
}           
});
delete2.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
新建DeleteMembers2().execute();
}           
});
gp1.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
Intent Intent=新的Intent(getActivity(),viewgroup.class);
星触觉(意向);
}           
});
gp2.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
Intent intent2=新的Intent(getActivity(),viewsecgroup.class);
星触觉(intent2);
}           
});
返回rootView;
}
私有类成员扩展异步任务{
@凌驾
受保护字符串[]doInBackground(最终字符串…参数)
{
ConnectivityManager conMgr=(ConnectivityManager)getActivity().getSystemService(Context.CONNECTIVITY_服务);
如果(conMgr.getActiveNetworkInfo()!=null
&&conMgr.getActiveNetworkInfo().isAvailable()
&&conMgr.getActiveNetworkInfo().isConnected())
{
HttpClient HttpClient=新的DefaultHttpClient();
尝试
{
JSONObject作业=新建JSONObject();
作业。放置(“状态键”,“2”);
job.put(“方法”、“驱动程序电子邮件”);
作业.put(“登录令牌”,登录令牌);
系统输出打印(登录令牌);
StringEntity se=新的StringEntity(job.toString());
HttpPost HttpPost=新的HttpPost(“http://suntechwebsolutions.com/clients/mobileapp_now/webservice.php");
httppost.setEntity(se);
HttpResponse response=httpclient.execute(httppost);
字符串数据=EntityUtils.toString(response.getEntity());
JSONObject jo=新的JSONObject(数据);
Log.d(“响应”,jo.toString(4));
JSONArray jArray=jo.getJSONArray(“所有驱动程序和电子邮件ID”);
for(int i=0;ipublic class DatabaseHelper extends SQLiteOpenHelper
{
   private static final String DATABASE_NAME = "database.db";
   private static final int DATABASE_VERSION = 1;

   public DatabaseHelper(Context context)
   {
      super(context, DATABASE_NAME, null, DATABASE_VERSION);
   }

   @Override
   public void onCreate(SQLiteDatabase database)
   {
      Table1.onCreate(database);
      Table2.onCreate(database);
      Table3.onCreate(database);
   }

   @Override
   public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion)
   {
      Table1.onUpgrade(database, oldVersion, newVersion);
      Table2.onUpgrade(database, oldVersion, newVersion);
      Table3.onUpgrade(database, oldVersion, newVersion);
   }
}
public class Table1
{
    public static final String TABLE_TABLE1 = "table1";

    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_NAME = "name";
    public static final String COLUMN_PHONENUMBER = "phoneNumber";
    public static final String COLUMN_EMAIL = "email";

    private static final String DATABASE_CREATE = "create table " + TABLE_TABLE1 + "(" 
    + COLUMN_ID + " integer primary key autoincrement, " 
    + COLUMN_NAME + " text not null, "
    + COLUMN_PHONENUMBER + " text not null, "
    + COLUMN_EMAIL + " text not null, "
    + ");";

    public static void onCreate(SQLiteDatabase database)
    {
       database.execSQL(DATABASE_CREATE);
    }

    public static void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion)
    {
       Log.w(Table1.class.getName(), "Upgrading from version " + oldVersion + " to " + newVersion);
       database.execSQL("DROP TABLE IF EXISTS " + TABLE_TABLE1);
       onCreate(database);
    }
}
public class Table1DataSource
{
    // Database fields
    private SQLiteDatabase database;
    private DatabaseHelper dbHelper;
    private String[] allColumns = { Table1.COLUMN_ID, Table1.COLUMN_NAME,
            Table1.COLUMN_PHONENUMBER, Table1.COLUMN_EMAIL };

    public Table1DataSource(Context context)
    {
        dbHelper = new DatabaseHelper(context);
    }

    public void open() throws SQLException
    {
        database = dbHelper.getWritableDatabase();
    }

    public void close()
    {
        dbHelper.close();
    }

    private EmployeeDB cursorToEmployee(Cursor cursor)
    {
        EmployeeDB Employee = new EmployeeDB();
        Employee.setId(cursor.getLong(0));
        Employee.setName(cursor.getString(1));
        Employee.setPhoneNumber(cursor.getString(2));
        Employee.setEmail(cursor.getString(3));
        return Employee;
    }

    public EmployeeDB createEmployee(String name, String phoneNumber, String email)
    {
        ContentValues values = new ContentValues();new
        values.put(Table1.COLUMN_NAME, name);
        values.put(Table1.COLUMN_PHONENUMBER, phoneNumber);
        values.put(Table1.COLUMN_EMAIL, email);
        long insertId = database.insert(Table1.TABLE_TABLE1, null, values);
        Cursor cursor = database.query(Table1.TABLE_TABLE1, allColumns, Table1.COLUMN_ID
                + " = " + insertId, null, null, null, null);
        cursor.moveToFirst();
        EmployeeDB newEmployee = cursorToEmployee(cursor);
        cursor.close();
        return newEmployee;
    }

    public void updateEmployee(EmployeeDB employee)
    {
        ContentValues values = new ContentValues();
        values.put(Table1.COLUMN_NAME, name);
        values.put(Table1.COLUMN_PHONENUMBER, phoneNumber);
        values.put(Table1.COLUMN_EMAIL, email);
        database.update(Table1.TABLE_TABLE1, values, Table1.COLUMN_ID + " = ?", new String[]{""+employee.getId()});
    }

    public void deleteEmployee(EmployeeDB Employee)
    {
        long id = Employee.getId();
        database.delete(EmployeeTable.TABLE_EMPLOYEE, EmployeeTable.COLUMN_ID + " = " + id, null);
    }

    public Cursor getAllEmployees()
    {
        return database.query(EmployeeTable.TABLE_EMPLOYEE, allColumns, null, null, null, null, null);
    }

    public EmployeeDB findEmployeeById(long id)
    {
        EmployeeDB employee = null;
        Cursor cursor = database.query(EmployeeTable.TABLE_EMPLOYEE, allColumns, EmployeeTable.COLUMN_ID + " = ?", new String[] {""+id}, null, null, null);
        if(cursor.moveToFirst())
        {
            employee = cursorToEmployee(cursor);
        }
        return employee;
    }

    public List<EmployeeDB> getAllEmployeesList()
    {
        List<EmployeeDB> Employees = new ArrayList<EmployeeDB>();

        Cursor cursor = getAllEmployees();

        if (cursor.moveToFirst())
        {
            do
            {
                EmployeeDB Employee = cursorToEmployee(cursor);
                Employees.add(Employee);
            }
            while (cursor.moveToNext());
        }
        cursor.close();
        return Employees;
    } 
}
public class DatabaseManager
        extends SQLiteOpenHelper {
    public interface Table {
        String getTableName();

        Fields[] getFields();

        void onCreate(SQLiteDatabase database);

        void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion);
    }

    public interface Fields {
        String getFieldName();

        String getFieldType();

        String getFieldAdditional();
    }

    public interface QueryDefinition {
        Cursor query(SQLiteDatabase database, Table table, String[] allFields);
    }

    private static final String DATABASE_NAME = "database.db";

    private static final int DATABASE_VERSION = 1;

    private final List<Table> tables;

    private SQLiteDatabase database;

    public DatabaseManager(Context appContext, List<Table> tables) {
        super(appContext, DATABASE_NAME, null, DATABASE_VERSION);
        this.tables = tables;
        this.database = getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase database) {
        for(Table table : tables) {
            table.onCreate(database);
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
        for(Table table : tables) {
            table.onUpgrade(database, oldVersion, newVersion);
        }
    }

    public interface Transaction {
        void execute(SQLiteDatabase sqLiteDatabase);
    }

    public interface Mapper<T> {
        T from(Cursor cursor);

        ContentValues from(ContentValues contentValues, T t);
    }

    public void executeTransaction(Transaction transaction) {
        try {
            database.beginTransaction();
            transaction.execute(database);
            database.setTransactionSuccessful();
        } finally {
            if(database.inTransaction()) {
                database.endTransaction();
            }
        }
    }

    public <T> List<T> findAll(Table table, Mapper<T> mapper) {
        return findAll(table,
                mapper, (database, _table, allFields) -> database.query(_table.getTableName(), allFields, null, null, null, null, null));
    }

    public <T> List<T> findAll(Table table, Mapper<T> mapper, QueryDefinition queryDefinition) {
        String[] allFields = extractFieldsFromTable(table);
        Cursor cursor = queryDefinition.query(database, table, allFields);
        List<T> list = collectObjectFromCursor(mapper, cursor);
        cursor.close();
        return list;
    }

    private <T> List<T> collectObjectFromCursor(Mapper<T> mapper, Cursor cursor) {
        List<T> list = new LinkedList<>();
        if(cursor.moveToFirst()) {
            do {
                T object = mapper.from(cursor);
                list.add(object);
            } while(cursor.moveToNext());
        }
        return new ArrayList<>(list);
    }

    @NonNull
    private String[] extractFieldsFromTable(Table table) {
        Fields[] _fields = table.getFields();
        String[] fields = new String[_fields.length];
        int i = 0;
        for(Fields field : _fields) {
            fields[i++] = field.getFieldName();
        }
        return fields;
    }
}


public abstract class BaseTable
        implements DatabaseManager.Table {
    @Override
    public void onCreate(SQLiteDatabase database) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("CREATE TABLE ");
        stringBuilder.append(getTableName());
        stringBuilder.append("(");
        DatabaseManager.Fields[] fields = getFields();
        int size = fields.length;
        int i = 0;
        for(DatabaseManager.Fields field : fields) {
            stringBuilder.append(field.getFieldName());
            stringBuilder.append(" ");
            stringBuilder.append(field.getFieldType());
            stringBuilder.append(" ");
            if(field.getFieldAdditional() != null) {
                stringBuilder.append(field.getFieldAdditional());
            }
            if(i < size - 1) {
                stringBuilder.append(",");
            }
            i++;
        }
        stringBuilder.append(");");
        database.execSQL(stringBuilder.toString());
    }

    @Override // TODO: implement migration
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
        Log.w("Table[" + getTableName() + "]", "Upgrading from version " + oldVersion + " to " + newVersion);
        database.execSQL("DROP TABLE IF EXISTS " + getTableName());
        onCreate(database);
    }
}

public enum Tables {
    CAT(new CatTable());

    private DatabaseManager.Table table;

    Tables(DatabaseManager.Table table) {
        this.table = table;
    }

    public <T extends DatabaseManager.Table> T getTable() {
        //noinspection unchecked
        return (T) table;
    }

    public static List<DatabaseManager.Table> getTables() {
        Tables[] _tables = Tables.values();
        List<DatabaseManager.Table> tables = new ArrayList<>(_tables.length);
        for(Tables table : _tables) {
            tables.add(table.table);
        }
        return tables;
    }
}

public class CatTable
        extends BaseTable {
    public static final String NAME = "cat";

    public enum Fields
            implements DatabaseManager.Fields {
        ID("_id", "text", "primary key"), //"integer", "primary key autoincrement"),
        URL("url", "text", "not null"),
        SOURCE_URL("sourceUrl", "text", "not null");

        private String fieldName;
        private String fieldType;
        private String fieldAdditional;

        Fields(String fieldName, String fieldType, String fieldAdditional) {
            this.fieldName = fieldName;
            this.fieldType = fieldType;
            this.fieldAdditional = fieldAdditional;
        }

        public String getFieldName() {
            return fieldName;
        }

        public String getFieldType() {
            return fieldType;
        }

        public String getFieldAdditional() {
            return fieldAdditional;
        }
    }

    @Override
    public String getTableName() {
        return NAME;
    }

    @Override
    public DatabaseManager.Fields[] getFields() {
        return Fields.values();
    }
}

public class CatMapper
        implements DatabaseManager.Mapper<Cat> {
    @Override
    public Cat from(Cursor cursor) {
        return Cat.create(cursor.getString(0), cursor.getString(1), cursor.getString(2));
    }

    @Override
    public ContentValues from(ContentValues contentValues, Cat cat) {
        contentValues.put(CatTable.Fields.ID.getFieldName(), cat.id());
        contentValues.put(CatTable.Fields.URL.getFieldName(), cat.url());
        contentValues.put(CatTable.Fields.SOURCE_URL.getFieldName(), cat.sourceUrl());
    }
}

public class CatDao {
    CatTable catTable;

    CatMapper catMapper;

    DatabaseManager databaseManager;

    public CatDao(CatTable catTable, CatMapper catMapper, DatabaseManager databaseManager) {
        this.catTable = catTable;
        this.catMapper = catMapper;
        this.databaseManager = databaseManager;
    }

    public List<Cat> findAll() {
        return databaseManager.findAll(catTable, catMapper);
    }

    public void insert(List<Cat> cats) {
        databaseManager.executeTransaction(sqLiteDatabase -> {
            ContentValues contentValues = new ContentValues();
            for(Cat cat : cats) {
                contentValues = mapper.from(contentValues, cat);
                sqLiteDatabase.insertWithOnConflict(catTable.getTableName(), null, contentValues, SQLiteDatabase.CONFLICT_REPLACE);
            }
        });
    }
}

@AutoValue
public abstract class Cat {
    public abstract String id();

    public abstract String url();

    public abstract String sourceUrl();

    public static Cat create(String id, String url, String sourceUrl) {
        return new AutoValue_Cat.Builder().setId(id).setUrl(url).setSourceUrl(sourceUrl).build();
    }

    public Builder toBuilder() {
        return new AutoValue_Cat.Builder(this);
    }

    @AutoValue.Builder
    public abstract static class Builder {
        public abstract Builder setId(String id);

        public abstract Builder setUrl(String url);

        public abstract Builder setSourceUrl(String sourceUrl);

        public abstract Cat build();
    }
}