当前位置: 首页 > 面试题库 >

将存储在SQLite数据库中的经度和纬度数据导出到文件中以便可以通过网站将其导入Google Map API的最简单方法?

戚令秋
2023-03-14
问题内容

我创建了一个应用程序,该应用程序在SQLite数据库中记录一系列经度和纬度值,并将其在MapActivity上显示为彩色轨道。

现在,我希望能够以某种方式导出此数据(最好是导出到文件),以便用户可以将这些值上载到显示Google Map API的网站。

我的问题是:将数据(以及文件格式:GPX,XML和CSV)导出到Android设备上的SD卡的最快方法是什么。

非常感谢。


问题答案:

确定,只需在您的Android项目中添加此类(并进行相应的修改)

public class DatabaseAssistant
{
    private static final String EXPORT_FILE_NAME = "/sdcard/datanaexport.xml";

    private Context _ctx;
    private SQLiteDatabase _db;
    private Exporter _exporter;

    public DatabaseAssistant( Context ctx, SQLiteDatabase db )
    {
        _ctx = ctx;
        _db = db;

        try
        {
            // create a file on the sdcard to export the
            // database contents to
            File myFile = new File( EXPORT_FILE_NAME );
                        myFile.createNewFile();

                        FileOutputStream fOut =  new FileOutputStream(myFile);
                        BufferedOutputStream bos = new BufferedOutputStream( fOut );

            _exporter = new Exporter( bos );
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    public void exportData( )
    {
        log( "Exporting Data" );

        try
        {
            _exporter.startDbExport( _db.getPath() );

            // get the tables out of the given sqlite database
                    String sql = "SELECT * FROM sqlite_master";

                    Cursor cur = _db.rawQuery( sql, new String[0] );
                    Log.d("db", "show tables, cur size " + cur.getCount() );
                    cur.moveToFirst();

                    String tableName;
                    while ( cur.getPosition() < cur.getCount() )
                    {
                        tableName = cur.getString( cur.getColumnIndex( "name" ) );
                        log( "table name " + tableName );

                        // don't process these two tables since they are used
                        // for metadata
                        if ( ! tableName.equals( "android_metadata" ) &&
                        ! tableName.equals( "sqlite_sequence" ) )
                        {
                            exportTable( tableName );
                        }

                        cur.moveToNext();
                    }
                _exporter.endDbExport();
            _exporter.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    private void exportTable( String tableName ) throws IOException
    {
        _exporter.startTable(tableName);

        // get everything from the table
        String sql = "select * from " + tableName;
        Cursor cur = _db.rawQuery( sql, new String[0] );
        int numcols = cur.getColumnCount();

        log( "Start exporting table " + tableName );

//      // logging
//      for( int idx = 0; idx < numcols; idx++ )
//      {
//          log( "column " + cur.getColumnName(idx) );
//      }

        cur.moveToFirst();

        // move through the table, creating rows
        // and adding each column with name and value
        // to the row
        while( cur.getPosition() < cur.getCount() )
        {
            _exporter.startRow();
            String name;
            String val;
            for( int idx = 0; idx < numcols; idx++ )
            {
                name = cur.getColumnName(idx);
                val = cur.getString( idx );
                log( "col '" + name + "' -- val '" + val + "'" );

                _exporter.addColumn( name, val );
            }

            _exporter.endRow();
            cur.moveToNext();
        }

        cur.close();

        _exporter.endTable();
    }

    private void log( String msg )
    {
        Log.d( "DatabaseAssistant", msg );
    }

    class Exporter
    {
        private static final String CLOSING_WITH_TICK = "'>";
        private static final String START_DB = "<export-database name='";
        private static final String END_DB = "</export-database>";
        private static final String START_TABLE = "<table name='";
        private static final String END_TABLE = "</table>";
        private static final String START_ROW = "<row>";
        private static final String END_ROW = "</row>";
        private static final String START_COL = "<col name='";
        private static final String END_COL = "</col>";

        private BufferedOutputStream _bos;

        public Exporter() throws FileNotFoundException
        {
            this( new BufferedOutputStream(
                    _ctx.openFileOutput( EXPORT_FILE_NAME,
                    Context.MODE_WORLD_READABLE ) ) );
        }

        public Exporter( BufferedOutputStream bos )
        {
            _bos = bos;
        }

        public void close() throws IOException
        {
            if ( _bos != null )
            {
                _bos.close();
            }
        }

        public void startDbExport( String dbName ) throws IOException
        {
            String stg = START_DB + dbName + CLOSING_WITH_TICK;
            _bos.write( stg.getBytes() );
        }

        public void endDbExport() throws IOException
        {
            _bos.write( END_DB.getBytes() );
        }

        public void startTable( String tableName ) throws IOException
        {
            String stg = START_TABLE + tableName + CLOSING_WITH_TICK;
            _bos.write( stg.getBytes() );
        }

        public void endTable() throws IOException
        {
            _bos.write( END_TABLE.getBytes() );
        }

        public void startRow() throws IOException
        {
            _bos.write( START_ROW.getBytes() );
        }

        public void endRow() throws IOException
        {
            _bos.write( END_ROW.getBytes() );
        }

        public void addColumn( String name, String val ) throws IOException
        {
            String stg = START_COL + name + CLOSING_WITH_TICK + val + END_COL;
            _bos.write( stg.getBytes() );
        }
    }

    class Importer
    {

    }

}

不可靠的DatabaseAssistant类

DatabaseAssistant DA = new DatabaseAssistant(myContext, mySQLiteDatabase);

您要导出数据吗???所以…

DA.exportData();

;)希望有帮助!

豪尔赫西斯



 类似资料:
  • 问题内容: 我想通过可手动运行以更新数据的PHP脚本将表格从CSV文件导入SQLite DB。 以下是我要实现的目标的列表: 将旧表(称为“ produkte”)重命名为product-currentdate(或删除表) 然后从CSV文件导入文件(分隔并使用ISO 8859-1字符集/ CSV文件的第一行包含表标题) 将日期保存在表“产品”中 我发现了一个由于某种原因无法运行的脚本: 我希望有人知

  • 问题内容: 我知道这是可能的,但我不确定从哪里开始。有人能做到吗? 谢谢。 问题答案: 本文中描述的类会将SQL lite DB导出到XML文件。 http://www.screaming-penguin.com/node/7749 完整的示例在此SVN存储库中可用。在类调用出口。 http://totsp.com/svn/repo/AndroidExamples/trunk/ 您将需要创建一个暴

  • 问题内容: 也许我缺少了一些东西,但是我需要一个预先填充了数据负载的客户端数据库。 为了测试客户端数据库是否能够胜任该任务,我使用该方法创建了一些带有伪数据的伪表。但是据我所知,它需要为每个单个CREATE TABLE和INSERT INTO查询执行executeSQL调用。我很懒,这对我来说似乎太多了。 我想知道…:我可以使用SQLite GUI很快创建一个SQLite表。我尝试导出一个SQL文

  • 问题内容: 我想从PHPMyAdmin(或MySQl Workbench)导出数据库,然后将其导入SQLite数据库,这样我就可以进行本地编辑和测试而不会破坏实时版本。我对SQL非常陌生,因此所有导出选项等在这一点上对我来说都很密集。我尝试通过命令使用默认的导出设置PHPMyAdmin 也 但是这些引发了很多语法错误和“没有这样的表”错误。 我还尝试了在此处找到的经常被引用的脚本脚本,但是当我尝试

  • 本文向大家介绍php将csv文件导入到mysql数据库的方法,包括了php将csv文件导入到mysql数据库的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php将csv文件导入到mysql数据库的方法。分享给大家供大家参考。具体分析如下: 本程序实现数据导入原理是先把csv文件上传到服务器,然后再通过php的fopen与fgetcsv文件把数据保存到数组,然后再用while把数据一

  • 问题内容: 请记住,我将在经/纬对上执行计算,哪种数据类型最适合与MySQL数据库一起使用? 问题答案: 在GIS中使用MySQL的空间扩展。