如何从sqlite数据库中获取数据

时间:2017-05-26 10:56:31

标签: java android sqlite

我将我的应用数据存储在sqlite数据库中但是当我尝试获取它时,它没有显示数据。在插入时显示新的xxxxx插入sqlite:1。

但是当我试图在其他活动中获取数据时,为什么它不向我显示数据?

 public class SQLiteHandler extends SQLiteOpenHelper {

    private static final String TAG = SQLiteHandler.class.getSimpleName();

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "ttp";

    // Login table name
    private static final String USER = "user";
    private static final String PROFILE = "profile";
    private static final String CONTRIBUTOR = "contributor";
    private static final String MYBOOKINGS = "mybookings";
    private static final String CATEGORIES = "categories";
    private static final String TABLEOFCONTENTS = "tableofcontents";
    private static final String BOOKINGSTATS = "bookingstats";
    private static final String SAVEBOOKINGS = "savebookings";
    private static final String PAGES = "pages";



    private static final String user_id = "id";
    private static final String user_email = "email";
    private static final String user_password = "password";
    private static final String user_status = "status";
    private static final String user_verified = "verified";
    private static final String user_created = "created";
    private static final String user_modified = "modified";
    private static final String user_token = "token";


    // Login Table Columns names
    private static final String profile_id = "p_id";
    private static final String first_name = "firstname";
    private static final String last_name = "lastname";
    private static final String p_bio = "bio";
    private static final String address = "addrs";
    private static final String profile_img = "profile_pic";
    private static final String user_Id = "user_id";

    // Profile Table Columns names

    private static final String contributor_id = "c_id";
    private static final String profile_Id = "p_id";
    private static final String secret_token = "secretToken";
    private static final String c_statement = "statmnt";
    private static final String c_status = "status";
    private static final String c_time = "time";
    private static final String c_uploaded_on = "uploaded_on";
    private static final String vs_cdn_id = "vs_id";
    private static final String created = "create";
    private static final String modified = "modifi";
//    long id;

//    private static final String created = "p_id";
    private static final String description = "desc";
    private static final String id = "cat_id";
    private static final String image = "cat_image";
    private static final String language_id = "lang_id";
//    private static final String modified = "profile_pic";
    private static final String name = "cat_name";
    private static final String parent_id = "prnt_id";

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

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_USER_TABLE = "CREATE TABLE " + USER + "("+user_id + " TEXT," +user_email + " TEXT," +user_password + " TEXT," + user_status + " TEXT,"+ user_verified + " TEXT,"+ user_created + " TEXT," +user_modified + " TEXT,"+user_token + " TEXT"+")";
        db.execSQL(CREATE_USER_TABLE);

        String CREATE_PROFILE_TABLE = "CREATE TABLE " + PROFILE + "("+profile_id + " TEXT," +first_name + " TEXT," +last_name + " TEXT," + p_bio + " TEXT,"+ address + " TEXT,"+ profile_img + " TEXT," +user_Id + " TEXT"+")";
        db.execSQL(CREATE_PROFILE_TABLE);

        String CREATE_CONTRIBUTOR_TABLE = "CREATE TABLE " + CONTRIBUTOR + "("+contributor_id + " TEXT," +profile_Id + " TEXT," +secret_token + " TEXT," + c_statement + " TEXT,"+ c_status + " TEXT,"+ c_time + " TEXT," +c_uploaded_on + " TEXT"+vs_cdn_id + " TEXT"+created + " TEXT"+modified + " TEXT"+")";
        db.execSQL(CREATE_CONTRIBUTOR_TABLE);

        String CREATE_CATEGORIES_TABLE = "CREATE TABLE " + CATEGORIES + "("+description + " TEXT," +id + " TEXT," +image + " TEXT," + language_id + " TEXT,"+ name + " TEXT,"+ parent_id + " TEXT"+")";
        db.execSQL(CREATE_CATEGORIES_TABLE);

        Log.d(TAG, "Database tables created");

    }


    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + USER);
        db.execSQL("DROP TABLE IF EXISTS " + PROFILE);
        db.execSQL("DROP TABLE IF EXISTS " + CONTRIBUTOR);
        // Create tables again
        onCreate(db);
    }

    /**
     * Storing user details in database
     * */
    public void addUser(String id, String email, String password, String status,String verified, String created, String modified, String token) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(user_Id, id); // profileid
        values.put(user_email, email); // firstname
        values.put(user_password,password ); // lastname
        values.put(user_status, status); // bio
        values.put(user_verified, verified); // address
        values.put(user_created, created);//profilepic
        values.put(user_modified, modified);//profilepic
        values.put(user_token, token);//userid
        // Inserting Row
        long user = db.insert(USER, null, values);
        db.close(); // Closing database connection

        Log.d(TAG, "New user inserted into sqlite: " + user);
    }
    public void addProfile(String p_id, String firstname, String lastname, String bio,String addrs, String profile_pic, String user_id) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(profile_id, p_id); // profileid
        values.put(first_name, firstname); // firstname
        values.put(last_name, lastname); // lastname
        values.put(p_bio, bio); // bio
        values.put(address, addrs); // address
        values.put(profile_img, profile_pic);//profilepic
        values.put(user_Id, user_id);//userid
        // Inserting Row
        long profile = db.insert(PROFILE, null, values);
        db.close(); // Closing database connection

        Log.d(TAG, "New profile inserted into sqlite: " + profile);
    }
    public void addContributor(String c_id, String p_id, String secretToken, String statmnt,String status, String time, String uploaded_on,String vs_id,String create,String modifi) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();

        values.put(contributor_id, c_id); // profileid
        values.put(profile_Id, p_id); // firstname
        values.put(secret_token, secretToken); // lastname
        values.put(c_statement, statmnt); // bio
        values.put(c_status, status); // address
        values.put(c_time, time);//profilepic
        values.put(c_uploaded_on, uploaded_on);//userid
        values.put(vs_cdn_id, vs_id);//userid
        values.put(created, create);//userid
        values.put(modified, modifi);//userid
        // Inserting Row
        long Id = db.insert(CONTRIBUTOR, null, values);
        db.close(); // Closing database connection

        Log.d(TAG, "New contributor inserted into sqlite: " + Id);
    }
    public void addCategories(String desc, String cat_id, String cat_image, String lang_id,String cat_name, String prnt_id) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(description, desc); // profileid
        values.put(id, cat_id); // firstname
        values.put(image, cat_image); // lastname
        values.put(language_id , lang_id); // bio
        values.put(name, cat_name); // address
        values.put(parent_id, prnt_id);//profilepic
         // Inserting Row
        long categories = db.insert(CATEGORIES, null, values);
        db.close(); // Closing database connection

        Log.d(TAG, "New Categories inserted into sqlite: " + categories);
    }

     /**
     * Getting user data from database
     * */
    public HashMap<String, String> getUserDetails() {
        HashMap<String, String> user = new HashMap<String, String>();
        String selectQuery = "SELECT  * FROM " + USER;

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        // Move to first row
        cursor.moveToFirst();
        if (cursor.getCount() > 0) {
            user.put("user", cursor.getString(1));
            user.put("first_name", cursor.getString(2));
            user.put("last_name", cursor.getString(3));
            user.put("p_bio", cursor.getString(4));
            user.put("address", cursor.getString(5));
            user.put("profile_pic", cursor.getString(6));
            user.put("user_id", cursor.getString(7));
        }
        cursor.close();
        db.close();
        // return user
        Log.d(TAG, "Fetching user from Sqlite: " + user.toString());

        return user;
    }
    public HashMap<String, String> getProfileDetails() {
        HashMap<String, String> profile = new HashMap<String, String>();
        String selectQuery = "SELECT  * FROM " + PROFILE;

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        // Move to first row
        cursor.moveToFirst();
        if (cursor.getCount() > 0) {
            profile.put("profile_id", cursor.getString(1));
            profile.put("first_name", cursor.getString(2));
            profile.put("last_name", cursor.getString(3));
            profile.put("bio", cursor.getString(4));
            profile.put("address", cursor.getString(5));
            profile.put("profile_pic", cursor.getString(6));
            profile.put("user_id", cursor.getString(7));
        }
        Log.d(TAG, "Fetching user from Sqlite: " + profile.toString());
        cursor.close();
        db.close();
        // return user


        return profile;
    }
    public HashMap<String, String> getContributorDetails() {
        HashMap<String, String> contributor = new HashMap<String, String>();
        String selectQuery = "SELECT  * FROM " + CONTRIBUTOR;

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        // Move to first row
        cursor.moveToFirst();
        if (cursor.getCount() > 0) {
            contributor.put("contributor_id", cursor.getString(1));
            contributor.put("profile_Id", cursor.getString(2));
            contributor.put("secret_token", cursor.getString(3));
            contributor.put("c_statement", cursor.getString(4));
            contributor.put("c_status", cursor.getString(5));
            contributor.put("c_time", cursor.getString(6));
            contributor.put("c_uploaded_on", cursor.getString(7));
            contributor.put("vs_cdn_id", cursor.getString(8));
            contributor.put("created", cursor.getString(9));
            contributor.put("modified", cursor.getString(10));
        }
        cursor.close();
        db.close();
        // return user
        Log.d(TAG, "Fetching user from Sqlite: " + contributor.toString());

        return contributor;
    }

Saving Profile:

     if (String.valueOf(code).equals("200")) {

                                    JSONObject Profile = json.getJSONObject("profile").getJSONObject("Profile");
                                    p_id = Profile.getString("id");
                                    firstname = Profile.getString("first_name");
                                    String lastname = Profile.getString("last_name");
                                    String bio = Profile.getString("bio");
                                    String addrs = Profile.getString("address");
                                    String profile_pic = Profile.getString("profile_pic");
                                    String user_id = Profile.getString("user_id");
                                    session.createLoginSession(user_email,user_Id);
                                    session.addProfileSession(p_id,firstname);
                                    HashMap<String, String> user = session.getUserDetails();
                                    user_email = user.get(SessionManager.KEY_EMAIL);
                                    Log.d(TAG,"email Check :"+user_email);

                                    db.addProfile(p_id, firstname, lastname, bio, addrs, profile_pic, user_id);

                                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
                                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                                    byteArray = stream.toByteArray();
                                    Intent i = new Intent(UserProfile.this, ContributorProfile.class);
                                    Bundle bundle = new Bundle();
                                    bundle.putString("FIRST_NAME", firstname);
                                    bundle.putString("P_ID",p_id);
                                    bundle.putByteArray("image",byteArray);
                                    i.putExtras(bundle);
                                    startActivity(i);
                                    finish();

Saving contributor:

      public void onResponse(String response) {
                            Log.d(TAG, "Audio Upload Response Check :" + response);

                            Log.d(TAG,"Object Check :"+response);
                            try {
                                JSONObject json = new JSONObject(response).getJSONObject("contributor").getJSONObject("Contributor");
                                contributor_id = json.getString("id");
                                String profile_id = json.getString("profile_id");
                                String secret_token = json.getString("secret_token");
                                String statement = json.getString("statement");
                                String status = json.getString("status");
                                String time = json.getString("time");
                                String uploaded_on = json.getString("uploaded_on");
                                String vs_cdn_id = json.getString("vs_cdn_id");
                                String created = json.getString("created");
                                String modified = json.getString("modified");
                                contributor_id = json.getString("id");
                                session.addContributorSession(contributor_id);
                                db.addContributor(contributor_id, profile_id, secret_token, statement, status, time, uploaded_on, vs_cdn_id, created, modified);


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

保存类别:

final ProgressDialog loading = ProgressDialog.show(this,"Loading Data", "Please wait...",false,false);
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Config.DATA_URL, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                loading.dismiss();
                if (response != null) {
                    ObjectMapper mapper = new ObjectMapper();
                    try {
                        String categoriesJsonString = response.getJSONArray("categories").toString();
                        categorys = mapper.readValue(categoriesJsonString, TypeFactory.defaultInstance().constructCollectionType(List.class,
                                Categorys.class));
                        Log.d(TAG,"Reponse Check :"+categorys.toString());

                        for(Categorys category : categorys) {
                            listCategories.add(category.getCategory());
                            db.addCategories(category.getCategory().getDescription(),category.getCategory().getId(),category.getCategory().getImage(),category.getCategory().getLanguage_id(),category.getCategory().getName(),category.getCategory().getParent_id());
                        }
                        Log.d(TAG,"Reponse Check2 :"+listCategories.toString());
                        adapter = new CardAdapter(listCategories, that);
                        recyclerView.setAdapter(adapter);

log cat:

 Database tables created
05-26 16:06:54.036 8743-8743/com.showhow2.www.thetagoreproject D/SQLiteHandler: Fetching profile from Sqlite: {}
05-26 16:06:54.086 8743-8821/com.showhow2.www.thetagoreproject I/MaliEGL: [Mali]window_type=1, is_framebuffer=0, errnum = 0
05-26 16:06:54.086 8743-8821/com.showhow2.www.thetagoreproject I/MaliEGL: [Mali]surface->num_buffers=4, surface->num_frames=3, win_min_undequeued=1
05-26 16:06:54.086 8743-8821/com.showhow2.www.thetagoreproject I/MaliEGL: [Mali]max_allowed_dequeued_buffers=3

这就是我试图获取个人资料数据的方式:

db = new SQLiteHandler(getApplicationContext());
        HashMap<String, String> profile=db.getProfileDetails();
        for(int i=0; i<profile.size();i++){
            String f_name = profile.get("first_name").toString();
            String l_name = profile.get("last_name");
            String desc = profile.get("bio");
            String adrs = profile.get("address");
            String phn = profile.get("profile_pic");
            Log.d(TAG,"f_name :"+ f_name);
            Log.d(TAG,"f_name :"+ l_name);
            Log.d(TAG,"f_name :"+ desc);
            firstName.setText(f_name);
            lastName.setText(l_name);
            description.setText(desc);
            address.setText(adrs);
            phone.setText(phn);
        }

2 个答案:

答案 0 :(得分:2)

您可以使用content resolver将内容移至数据库。 这是示例

`

package com.example.MyApplication;
  import java.util.HashMap;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;

import android.net.Uri;
import android.text.TextUtils;

public class StudentsProvider extends ContentProvider {
   static final String PROVIDER_NAME = "com.example.MyApplication.StudentsProvider";
   static final String URL = "content://" + PROVIDER_NAME + "/students";
   static final Uri CONTENT_URI = Uri.parse(URL);

   static final String _ID = "_id";
   static final String NAME = "name";
   static final String GRADE = "grade";

   private static HashMap<String, String> STUDENTS_PROJECTION_MAP;

   static final int STUDENTS = 1;
   static final int STUDENT_ID = 2;

   static final UriMatcher uriMatcher;
   static{
      uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
      uriMatcher.addURI(PROVIDER_NAME, "students", STUDENTS);
      uriMatcher.addURI(PROVIDER_NAME, "students/#", STUDENT_ID);
   }

   /**
      * Database specific constant declarations
   */

   private SQLiteDatabase db;
   static final String DATABASE_NAME = "College";
   static final String STUDENTS_TABLE_NAME = "students";
   static final int DATABASE_VERSION = 1;
   static final String CREATE_DB_TABLE =
      " CREATE TABLE " + STUDENTS_TABLE_NAME +
         " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
         " name TEXT NOT NULL, " +
         " grade TEXT NOT NULL);";

   /**
      * Helper class that actually creates and manages
      * the provider's underlying data repository.
   */

   private static class DatabaseHelper extends SQLiteOpenHelper {
      DatabaseHelper(Context context){
         super(context, DATABASE_NAME, null, DATABASE_VERSION);
      }

      @Override
      public void onCreate(SQLiteDatabase db) {
         db.execSQL(CREATE_DB_TABLE);
      }

      @Override
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         db.execSQL("DROP TABLE IF EXISTS " +  STUDENTS_TABLE_NAME);
         onCreate(db);
      }
   }

   @Override
   public boolean onCreate() {
      Context context = getContext();
      DatabaseHelper dbHelper = new DatabaseHelper(context);

      /**
         * Create a write able database which will trigger its
         * creation if it doesn't already exist.
      */

      db = dbHelper.getWritableDatabase();
      return (db == null)? false:true;
   }

   @Override
   public Uri insert(Uri uri, ContentValues values) {
      /**
         * Add a new student record
      */
      long rowID = db.insert(   STUDENTS_TABLE_NAME, "", values);

      /**
         * If record is added successfully
      */
      if (rowID > 0) {
         Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID);
         getContext().getContentResolver().notifyChange(_uri, null);
         return _uri;
      }

      throw new SQLException("Failed to add a record into " + uri);
   }

   @Override
   public Cursor query(Uri uri, String[] projection, 
      String selection,String[] selectionArgs, String sortOrder) {
      SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
      qb.setTables(STUDENTS_TABLE_NAME);

      switch (uriMatcher.match(uri)) {
         case STUDENTS:
            qb.setProjectionMap(STUDENTS_PROJECTION_MAP);
         break;

         case STUDENT_ID:
            qb.appendWhere( _ID + "=" + uri.getPathSegments().get(1));
         break;

         default:   
      }

      if (sortOrder == null || sortOrder == ""){
         /**
            * By default sort on student names
         */
         sortOrder = NAME;
      }

      Cursor c = qb.query(db,   projection, selection, 
         selectionArgs,null, null, sortOrder);
      /**
         * register to watch a content URI for changes
      */
      c.setNotificationUri(getContext().getContentResolver(), uri);
      return c;
   }

   @Override
   public int delete(Uri uri, String selection, String[] selectionArgs) {
      int count = 0;
      switch (uriMatcher.match(uri)){
         case STUDENTS:
            count = db.delete(STUDENTS_TABLE_NAME, selection, selectionArgs);
         break;

         case STUDENT_ID:
            String id = uri.getPathSegments().get(1);
            count = db.delete( STUDENTS_TABLE_NAME, _ID +  " = " + id +
               (!TextUtils.isEmpty(selection) ? " 
               AND (" + selection + ')' : ""), selectionArgs);
            break;
         default:
            throw new IllegalArgumentException("Unknown URI " + uri);
      }

      getContext().getContentResolver().notifyChange(uri, null);
      return count;
   }

   @Override
   public int update(Uri uri, ContentValues values, 
      String selection, String[] selectionArgs) {
      int count = 0;
      switch (uriMatcher.match(uri)) {
         case STUDENTS:
            count = db.update(STUDENTS_TABLE_NAME, values, selection, selectionArgs);
         break;

         case STUDENT_ID:
            count = db.update(STUDENTS_TABLE_NAME, values, 
               _ID + " = " + uri.getPathSegments().get(1) +
               (!TextUtils.isEmpty(selection) ? " 
               AND (" +selection + ')' : ""), selectionArgs);
            break;
         default:
            throw new IllegalArgumentException("Unknown URI " + uri );
      }

      getContext().getContentResolver().notifyChange(uri, null);
      return count;
   }

   @Override
   public String getType(Uri uri) {
      switch (uriMatcher.match(uri)){
         /**
            * Get all student records
         */
         case STUDENTS:
            return "vnd.android.cursor.dir/vnd.example.students";
         /**
            * Get a particular student
         */
         case STUDENT_ID:
            return "vnd.android.cursor.item/vnd.example.students";
         default:
            throw new IllegalArgumentException("Unsupported URI: " + uri);
      }
   }

`

public class MainActivity extends Activity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }
   public void onClickAddName(View view) {
      // Add a new student record
      ContentValues values = new ContentValues();
      values.put(StudentsProvider.NAME,
         ((EditText)findViewById(R.id.editText2)).getText().toString());

      values.put(StudentsProvider.GRADE,
         ((EditText)findViewById(R.id.editText3)).getText().toString());

      Uri uri = getContentResolver().insert(
         StudentsProvider.CONTENT_URI, values);

      Toast.makeText(getBaseContext(),
         uri.toString(), Toast.LENGTH_LONG).show();
   }
   public void onClickRetrieveStudents(View view) {
      // Retrieve student records
      String URL = "content://com.example.MyApplication.StudentsProvider";

      Uri students = Uri.parse(URL);
      Cursor c = managedQuery(students, null, null, null, "name");

      if (c.moveToFirst()) {
         do{
            Toast.makeText(this,
               c.getString(c.getColumnIndex(StudentsProvider._ID)) +
                  ", " +  c.getString(c.getColumnIndex( StudentsProvider.NAME)) +
                     ", " + c.getString(c.getColumnIndex( StudentsProvider.GRADE)),
            Toast.LENGTH_SHORT).show();
         } while (c.moveToNext());
      }
   }

}

答案 1 :(得分:0)

试试这个......希望得到它的帮助 FileName是我用自定义适配器填充的模型

    public List<FileName> getItemFromDatabase(SQLiteDatabase sqLiteDatabase) {
    List<FileName> result = new ArrayList<>();
    Cursor c = sqLiteDatabase.rawQuery("SELECT * FROM "+Coloumn.NewInfo.TABLE_NAME,null);
    while (c.moveToNext()) {
        result.add(
                new FileName(
                        c.getString(c.getColumnIndex("Name")),
                        c.getString(c.getColumnIndex("Note"))
                )
        );
    }
    c.close();
    return result;
}