【问题标题】:How to get a tables columns arraylist on Android?如何在 Android 上获取表格列数组列表?
【发布时间】:2010-03-04 20:34:39
【问题描述】:

我想要获取 Android 中表的可用列名的代码?

我环顾四周,没有发现任何东西。

【问题讨论】:

  • 试试写吧...而不是搜索它。 Stackoverflow 不是代码生成网站。

标签: java android sqlite


【解决方案1】:

这是一种更简单的方法:

Cursor ti = db.rawQuery("PRAGMA table_info(mytable)", null);
if ( ti.moveToFirst() ) {
    do {
        System.out.println("col: " + ti.getString(1));
    } while (ti.moveToNext());
}

【讨论】:

  • 获取内容解析器列怎么样?有没有一种更简单的方法可以考虑,我们在 CR 上运行查询?
  • 不,没有。在这种情况下,空投影将为您提供所有列。
  • 来自 SQLite 文档“在 SQLite 的未来版本中可能会删除特定的 pragma 语句并添加其他语句。不保证向后兼容性。”在 SQLite 版本并不总是恒定的 Android 等平台上非常危险。
【解决方案2】:

我实现的最简单的方法。

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

欢迎提出更好的建议。

【讨论】:

  • @njzk2,当表为空时还没有尝试过。它应该可以工作,只是光标不会指向任何行
  • 我已经将它与限制 0 一起使用,显然它可以工作,即使是空表也是如此。我更喜欢这个解决方案而不是查询杂注。
【解决方案3】:
    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();
    }

【讨论】:

    【解决方案4】:
    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);
    
    
    }
    

    }

    【讨论】:

      【解决方案5】:

      Zul 方法的替代方法是在他的简单示例中使用 columnCount,并且限制为 0。

      Cursor cursor = db.rawQuery("SELECT * FROM " + tableName + " LIMIT 0", null);
      int colCount = cursor.getColumnNames().length();
      

      【讨论】:

        【解决方案6】:

        数据库映射

         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;
        }
        

        【讨论】:

          【解决方案7】:

          试试这个:

          最好使用 SQLiteDatabase 实例并使用查询方法

          SQLiteDatabase mDataBase;
          (some code here...)
          mDataBase = getReadableDatabase();
          Cursor dbCursor = mDataBase.query(TABLE_NAME, null, null, null, null, null, null);
          String[] columnNames = dbCursor.getColumnNames();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-07-20
            • 2011-12-09
            • 2015-08-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-06-09
            相关资源
            最近更新 更多