GVKun编程网logo

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

11

对于将存储在SQLite数据库中的经度和纬度数据导出到文件中以便可以通过网站将其导入GoogleMapAPI的最简单方法?感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于Android–将

对于将存储在SQLite数据库中的经度和纬度数据导出到文件中以便可以通过网站将其导入Google Map API的最简单方法?感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于Android – 将敏感数据存储在sqlite数据库中、android – 搜索存储在sqlite数据库中的字符串的最快方法、android – 解析日期并将其存储在SQLite数据库中、c# – SQLite – 从SQLite数据库中读取数据的最快方法?的宝贵知识。

本文目录一览:

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

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

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

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

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

非常感谢。

Android – 将敏感数据存储在sqlite数据库中

Android – 将敏感数据存储在sqlite数据库中

我需要在 Android应用程序的sqlite数据库中存储敏感数据.

我如何确保这些数据是非常安全的?
我知道我可以使用密钥加密数据,但是我在哪里存储该密钥?我不想要求用户填写一个密钥,我只是想让它自己工作.
因为我怕逆向工程,我也不想在代码中加一个加密密钥.

我发现大约有SQLCipher.它说这是一种非常安全的方式来加密数据库中的数据,但为什么会这样呢?我还需要保留一个钥匙来解锁这些信息吗?或者这真的是确保数据安全的完美方式吗?

如果不是,在sqlite数据库中存储敏感数据的(几乎)失败的方法是什么?

解决方法

对称加密需要一个密钥加密和相同的密钥进行解密.没有办法.

不要将密钥存储在代码中,因为它可以被反编译(就像你所说的).

请求用户首次使用密码,并使用PBKDF2导出加密中使用的密码安全密钥.

用户必须输入密码,或者您需要将其存储在内存中.我要做的是,请用户指定密钥缓存在内存中用于解密的持续时间.

如果持续时间过期,用户将不得不再次输入密码.

我没有彻底检查sqlCipher,但它说它使用AES-256. AES是一种对称加密算法,它需要一个密钥加密和相同的密钥来解密.

android – 搜索存储在sqlite数据库中的字符串的最快方法

android – 搜索存储在sqlite数据库中的字符串的最快方法

我有大量的字符串,大约15,000,我使用以下代码存储在sqlite数据库中:

 void addKey(String key, String value, String table) {
        sqliteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_KEY, key); // Contact Name
        values.put(KEY_VALUE, value); // Contact Phone

        // Inserting Row
        db.insert(table, null, values);
        db.close(); // Closing database connection

    }

然后我使用以下方法搜索该数据库,以便挑选出与我正在寻找的密钥相匹配的任何字符串:

public String searchKeyString(String key, String table){
        String rtn = "";
        Log.d("searchKeyString",table);

            // Select All Query
            String selectQuery = "SELECT  * FROM " + table;

            sqliteDatabase db = this.getWritableDatabase();
            Cursor cursor = db.rawQuery(selectQuery, null);

            // looping through all rows and adding to list
            if (cursor.movetoFirst()) {
                do {
                    Log.d("searchKeyString","searching");

                    if(cursor.getString(1).equals(key)) 
                        rtn = rtn + "," + cursor.getString(2);
                } while (cursor.movetoNext());
            }
            cursor.close();
            db.close();
            Log.d("searchKeyString","finish search");

        return rtn;
    }

目标是在用户在保留板上键入时实时执行此操作,因此响应时间是关键,现在它的方式需要一秒钟才能完成搜索.

我考虑最初将所有项目读入数组列表并对可能更快的内容进行排序,但我认为该大小的数组列表可能会导致内存问题.在我的数据库中搜索这些条目的最佳方法是什么?

解决方法:

你可以做几件事……

>将返回值更改为StringBuilder直到结束.
>只使用数据库的可读版本(尽管可能没有太大的区别)
>每次都不要获取数据库的新实例,保持打开直到不再需要它为止
>仅使用SQL查询中的“WHERE”参数查询所需内容.

请参阅以下代码并进行一些更改:

// move this somewhere else in your Activity or such
sqliteDatabase db = this.getReadableDatabase();

public String searchKeyString(String key, String table){
    StringBuilder rtn = new StringBuilder();
    Log.d("searchKeyString",table);

        // Select All Query
        String selectQuery = "SELECT  * FROM " + table + " WHERE KEY_KEY=?";

        Cursor cursor = db.rawQuery(selectQuery,  new String[] {key});
        // you can change it to
        // db.rawQuery("SELECT * FROM "+table+" WHERE KEY_KEY LIKE ?", new String[] {key+"%"});
        // if you want to get everything starting with that key value

        // looping through all rows and adding to list
        if (cursor.movetoFirst()) {
            do {
                Log.d("searchKeyString","searching");

                rtn.append(",").append(cursor.getString(2));
            } while (cursor.movetoNext());
        }
        cursor.close();
        Log.d("searchKeyString","finish search");

    return rtn.toString();
}

请注意,即使您希望“实时”为用户执行此操作,您仍然需要将其移动到单独的Thread或ASyncTask中,否则您将遇到问题….

android – 解析日期并将其存储在SQLite数据库中

android – 解析日期并将其存储在SQLite数据库中

我正在使用SAXParser解析一个xml文件,并在处理程序内部我正在创建一个对象,其中一个数据库是日期.

我的XML文件上的日期采用以下格式:2010-12-28.

我找不到如何将这样的字符串转换为Date对象.我也不明白如何将它存储在sqlite数据库中,因为似乎有很多格式(有小时/分钟/等).

我需要它存储在一个对象中,这样我就可以计算时间跨度等.

有人可以帮我弄这个吗?

解决方法:

您可以使用Java的简单日期格式将日期格式化为可用于进行计算的Date对象,如下所示:

http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

你想要的解析字符串是“yyyy” – “MM” – “dd”

至于将其存储到sqlite数据库中,您有几个选择:

>将其存储为字符串,并在出现时将其转换回日期对象
>(首选)将其存储为unix时间戳(Date.getTime()为您提供自1970年以来的毫秒数,并且您可以将该值存储在数据库中.)这种方式是首选,因为您不必这么做(相对昂贵的)转换.您可以对长时间戳值进行简单的基本操作.

使用sqlite的内置日期函数还有其他一些选项(如here所述),但最终如果您想将其拉入Android / Java代码并将其作为Date对象进行操作,则您将不得不进行转换.

c# – SQLite – 从SQLite数据库中读取数据的最快方法?

c# – SQLite – 从SQLite数据库中读取数据的最快方法?

我有一个本地sqlite数据库

表详细信息

-- Describe PREFIX_LIST
CREATE TABLE PREFIX_LIST(ITEM VARCHAR(25) PRIMARY KEY)

-- Describe SUFFIX_LIST
CREATE TABLE SUFFIX_LIST(ITEM VARCHAR(25) PRIMARY KEY)

-- Describe VALID_LIST
CREATE TABLE VALID_LIST (
    "PART1" TEXT,"PART2" TEXT,PRIMARY KEY(PART1,PART2)
)

现在这个列表非常庞大,我需要从中保存数据.

这是我的实施.

sqliteConnection con = null;
sqliteCommand cmd = null;
Connect(DbPath,ref con,ref cmd);

cmd.CommandText =
    "SELECT PART1 || '@' || PART2 FROM VALID_LIST 
 WHERE NOT EXISTS 
   (SELECT * FROM PREFIX_LIST WHERE VALID_LIST.PART1 LIKE '%' || ITEM || '%') 
   AND NOT EXISTS
   (SELECT * FROM SUFFIX_LIST WHERE VALID_LIST.PART2 LIKE '%' || ITEM || '%')";

var reader = cmd.ExecuteReader();

if (reader.HasRows)
{
    string savePath;

    if (SaveTextFile(out savePath) == DialogResult.OK)
    {
        TextWriter writer = new StreamWriter(savePath);
        while (reader.Read())
        {
            writer.WriteLine(reader.GetString(0));
        }
        writer.Close();
        writer.dispose();
    }

}

reader.Close();
reader.dispose();
cmd.dispose();
con.Close();
con.dispose();

MessageBox.Show("List Saved!.",Application.ProductName,MessageBoxButtons.OK,MessageBoxIcon.information);

我需要一些更好的方法,我可以更快地保存列表.
VALID_LIST中的总条目是2639117

并且花了15分钟为上面的sql QUERY保存它!

请lmk如果可以优化SQL查询!

提前致谢

解决方法

除非将通配符附加到后缀,否则LIKE的查询通常会非常慢. LIKE’%foo’之类的谓词无法通过典型的字符串索引编制索引.

但是,您可以使用其full text search(FTS)功能替换sqlite中的重LIKE用法.

The FTS3 and FTS4 extension modules allows users to create special
tables with a built-in full-text index (hereafter “FTS tables”). The
full-text index allows the user to efficiently query the database for
all rows that contain one or more words (hereafter “tokens”),even if
the table contains many large documents.

他们的an example在您的用例性能方面看起来很有前途.

CREATE VIRTUAL TABLE enrondata1 USING fts3(content TEXT);     /* FTS3 table */
CREATE TABLE enrondata2(content TEXT);                        /* Ordinary table *

SELECT count(*) FROM enrondata1 WHERE content MATCH 'linux';  /* 0.03 seconds */
SELECT count(*) FROM enrondata2 WHERE content LIKE '%linux%'; /* 22.5 seconds */

今天的关于将存储在SQLite数据库中的经度和纬度数据导出到文件中以便可以通过网站将其导入Google Map API的最简单方法?的分享已经结束,谢谢您的关注,如果想了解更多关于Android – 将敏感数据存储在sqlite数据库中、android – 搜索存储在sqlite数据库中的字符串的最快方法、android – 解析日期并将其存储在SQLite数据库中、c# – SQLite – 从SQLite数据库中读取数据的最快方法?的相关知识,请在本站进行查询。

本文标签: