Как получить массив столбцов таблиц на Android? - PullRequest
8 голосов
/ 04 марта 2010

Я за кодом, чтобы получить доступные имена столбцов таблицы в Android?

Я оглянулся и ничего не нашел.

Ответы [ 7 ]

21 голосов
/ 05 марта 2010

Это более простой способ:

Cursor ti = db.rawQuery("PRAGMA table_info(mytable)", null);
if ( ti.moveToFirst() ) {
    do {
        System.out.println("col: " + ti.getString(1));
    } while (ti.moveToNext());
}
14 голосов
/ 30 марта 2012

Самый простой способ, который я реализовал.

Cursor cursor = db.rawQuery("SELECT * FROM " + tableName + " LIMIT 1", null);
String[] colNames = cursor.getColumnNames();

Любые лучшие предложения приветствуются.

2 голосов
/ 11 октября 2013
public class Database_demo extends Activity {
private String jsonResult;
public static final int DIALOG_DOWNLOAD_JSON_PROGRESS = 0;
private String url = "http://192.168.43.2/brother/song.php";
String urll = url;
private ListView listView;
private static final String HTTP_REQUEST_FAILED = null;
int[] flags;
String strImageName;
int n = 10000;
String[] mySecondStringArray = new String[n];
String[] strArray;
private ProgressDialog mProgressDialog;
HashMap<String, String> hm;
List<HashMap<String, String>> aList;

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

    listView = (ListView) findViewById(R.id.listview);
    try {
        accessWebService();
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(),
                "Check ur network connection", 10000).show();
    }
}

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DIALOG_DOWNLOAD_JSON_PROGRESS:
        mProgressDialog = new ProgressDialog(this);
        mProgressDialog.setMessage("Please wait.....");
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        mProgressDialog.setCancelable(true);
        mProgressDialog.show();
        return mProgressDialog;

    default:
        return null;
    }
}

// Async Task to access the web
private class JsonReadTask extends AsyncTask<String, Void, String> {
    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(DIALOG_DOWNLOAD_JSON_PROGRESS);
    }

    @Override
    protected String doInBackground(String... params) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(params[0]);
        try {
            HttpResponse response = httpclient.execute(httppost);
            jsonResult = inputStreamToString(
                    response.getEntity().getContent()).toString();
        }

        catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    private StringBuilder inputStreamToString(InputStream is) {
        String rLine = "";
        StringBuilder answer = new StringBuilder();
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));

        try {
            while ((rLine = rd.readLine()) != null) {
                answer.append(rLine);
            }
        }

        catch (IOException e) {
            // e.printStackTrace();
            Toast.makeText(getApplicationContext(),
                    "Error..." + e.toString(), Toast.LENGTH_LONG).show();
        }
        return answer;
    }

    @Override
    protected void onPostExecute(String result) {

        ListDrwaer();

        dismissDialog(DIALOG_DOWNLOAD_JSON_PROGRESS);

    }
}

public void accessWebService() {
    JsonReadTask task = new JsonReadTask();
    // passes values for the urls string array
    task.execute(new String[] { url });
}

public void ListDrwaer() {

    try {
        JSONObject jsonResponse = new JSONObject(jsonResult);
        JSONArray jsonMainNode = jsonResponse.optJSONArray("products");

        aList = new ArrayList<HashMap<String, String>>();
        for (int i = 0; i < jsonMainNode.length(); i++) {
            JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
            String name = jsonChildNode.optString("field");


            hm = new HashMap<String, String>();
            hm.put("txt", name);
            //hm.put("cur", number);

            aList.add(hm);

        }
    } catch (JSONException e) {
        Toast.makeText(getApplicationContext(), "Error" + e.toString(),
                Toast.LENGTH_SHORT).show();
    }
    String[] from = { "flag", "txt" };
    int[] to = { R.id.flag, R.id.txt };
    SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), aList,
            R.layout.news, from, to);
    listView.setAdapter(adapter);


}

}

2 голосов
/ 05 марта 2010
    try {
        Cursor c = db.query(tableName, null, null, null, null, null, null);
        if (c != null) {
            int num = c.getColumnCount();
            for (int i = 0; i < num; ++i) {
                String colname = c.getColumnName(i);

            }
        }

    } catch (Exception e) {
        Log.v(tableName, e.getMessage(), e);
        e.printStackTrace();
    }
1 голос
/ 08 мая 2014

Альтернативой методу Зула является использование columnCount с его простым примером и пределом 0.

Cursor cursor = db.rawQuery("SELECT * FROM " + tableName + " LIMIT 0", null);
int colCount = cursor.getColumnNames().length();
0 голосов
/ 19 июля 2016

попробуйте это:

Лучше всего, если вы используете SQLiteDatabase и используете метод запроса

SQLiteDatabase mDataBase;
(some code here...)
mDataBase = getReadableDatabase();
Cursor dbCursor = mDataBase.query(TABLE_NAME, null, null, null, null, null, null);
String[] columnNames = dbCursor.getColumnNames();
0 голосов
/ 24 июня 2015

Карта базы данных

 private HashMap<String, String[]> getDataBaseMap(SQLiteDatabase db){

    HashMap<String, String[]> DBMap = new HashMap<>();
    ArrayList<String> tableNames = new ArrayList<>();
    String[] columns ;

    Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);

    if (c.moveToFirst()) {
        while ( !c.isAfterLast() ) {
            tableNames.add(c.getString(0));
            c.moveToNext();
        }
    }
    c.close();

    for ( int i = 0 ; i < tableNames.size() ; i++){
        Cursor  cursor = db.rawQuery("select * from " + tableNames.get(i),null);
        columns = cursor.getColumnNames();
        cursor.moveToNext();

        DBMap.put(tableNames.get(i),columns);
        cursor.close();

    }

    return DBMap;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...