无法从包含意外字符的 sqlite3 文件中检索数据
Can't retrieve data from sqlite3 file with unexpected characters
我有 sqlite3 数据库文件,我正在尝试从中获取数据。当我尝试在 sqliteBrowser 中打开它时,它会生成表格,但它会忽略文件中的数据,因此我得到空表格。这是文件:localData.sqlite
我不知道文件格式是否错误,或者我是否缺少某些功能,我必须 运行 修改它。
该文件是由第三方应用程序在 windows 上使用以下代码创建的。
文件创建
{
try
{
if (!File.Exists("queueData.sqlite"))
{
SQLiteConnection.CreateFile("queueData.sqlite");
}
using (SQLiteConnection c = new SQLiteConnection(connection))
{
c.Open();
using (SQLiteCommand cmd = new SQLiteCommand("create table if not exists vehicles (data TEXT)", c))
{
cmd.ExecuteNonQuery();
}
using (SQLiteCommand cmd = new SQLiteCommand("create table if not exists vehiclesMQTT (data TEXT)", c))
{
cmd.ExecuteNonQuery();
}
using (SQLiteCommand cmd = new SQLiteCommand("create table if not exists faces (data TEXT)", c))
{
cmd.ExecuteNonQuery();
}
using (SQLiteCommand cmd = new SQLiteCommand("create table if not exists facesMQTT (data TEXT)", c))
{
cmd.ExecuteNonQuery();
}
c.Close();
}
}
catch (Exception ex)
{
AdLogsManager.instance.writeErrorMessage("Creating DB and Table: " + ex.Message,"", "", 7001);
}
}
数据插入
{
try
{
var tableName = getTableNameByType(type);
string sql = "insert into " + tableName + " (data) values (\'" + data + "\')";
using (SQLiteConnection c = new SQLiteConnection(connection))
{
c.Open();
using (SQLiteCommand cmd = new SQLiteCommand(sql, c))
{
cmd.ExecuteNonQuery();
}
c.Close();
}
return true;
}
catch (Exception ex)
{
AdLogsManager.instance.writeErrorMessage("Saving data: " + ex.Message,"", "", 7002);
return false;
}
}
如果有人能帮我解决问题或找到获取数据的方法,我将不胜感激。
谢谢。
完全没有任何保证!
您的数据库已损坏,或者以某种方式删除了记录。
但是,您仍然可以在文本编辑器中打开文件并看到很多记录,例如:
...{"channel":"app-emit","payload":{"type":"vehicle","deviceId":"d4f9bb04b6d5","time":1595510864502,"appName":"vehicle","appVersion":"1.0.1","data":{"count":1,"speed":0.0,"zoneId":"inbound","time":1595510864502}}}
...
我不知道它们属于哪个table,也不知道它们是真实的还是过时的,甚至不知道丢失了多少。
使用此方法,可恢复4087条记录:https://justpaste.it/38j03
进一步了解您的应用程序应该有助于您评估它们是否有用。
编辑:使用的方法:
我使用 hexadecimal/text 编辑器 (MadEdit) 来:
- 在
{"channel":
之前打断(将十六进制 7B226368616E6E656C223A 替换为 0A7B226368616E6E656C223A)
- 在
}}}
之后换行(将十六进制 7D7D7D 替换为 7D7D7D0A)
- 删除了所有出现的空值(用空值替换十六进制 00)
然后将所有内容复制并粘贴到电子表格应用程序 (Excel) 中,因此可以进行一些排序和过滤。
更好的方法:在 Word 中打开,进行相同的替换({"channel":
到 ^p"channel":
和 }}}
到 }}}^p
),然后粘贴到 Excel。
我有 sqlite3 数据库文件,我正在尝试从中获取数据。当我尝试在 sqliteBrowser 中打开它时,它会生成表格,但它会忽略文件中的数据,因此我得到空表格。这是文件:localData.sqlite
我不知道文件格式是否错误,或者我是否缺少某些功能,我必须 运行 修改它。
该文件是由第三方应用程序在 windows 上使用以下代码创建的。
文件创建
{
try
{
if (!File.Exists("queueData.sqlite"))
{
SQLiteConnection.CreateFile("queueData.sqlite");
}
using (SQLiteConnection c = new SQLiteConnection(connection))
{
c.Open();
using (SQLiteCommand cmd = new SQLiteCommand("create table if not exists vehicles (data TEXT)", c))
{
cmd.ExecuteNonQuery();
}
using (SQLiteCommand cmd = new SQLiteCommand("create table if not exists vehiclesMQTT (data TEXT)", c))
{
cmd.ExecuteNonQuery();
}
using (SQLiteCommand cmd = new SQLiteCommand("create table if not exists faces (data TEXT)", c))
{
cmd.ExecuteNonQuery();
}
using (SQLiteCommand cmd = new SQLiteCommand("create table if not exists facesMQTT (data TEXT)", c))
{
cmd.ExecuteNonQuery();
}
c.Close();
}
}
catch (Exception ex)
{
AdLogsManager.instance.writeErrorMessage("Creating DB and Table: " + ex.Message,"", "", 7001);
}
}
数据插入
{
try
{
var tableName = getTableNameByType(type);
string sql = "insert into " + tableName + " (data) values (\'" + data + "\')";
using (SQLiteConnection c = new SQLiteConnection(connection))
{
c.Open();
using (SQLiteCommand cmd = new SQLiteCommand(sql, c))
{
cmd.ExecuteNonQuery();
}
c.Close();
}
return true;
}
catch (Exception ex)
{
AdLogsManager.instance.writeErrorMessage("Saving data: " + ex.Message,"", "", 7002);
return false;
}
}
如果有人能帮我解决问题或找到获取数据的方法,我将不胜感激。
谢谢。
完全没有任何保证!
您的数据库已损坏,或者以某种方式删除了记录。
但是,您仍然可以在文本编辑器中打开文件并看到很多记录,例如:
...
{"channel":"app-emit","payload":{"type":"vehicle","deviceId":"d4f9bb04b6d5","time":1595510864502,"appName":"vehicle","appVersion":"1.0.1","data":{"count":1,"speed":0.0,"zoneId":"inbound","time":1595510864502}}}
...
我不知道它们属于哪个table,也不知道它们是真实的还是过时的,甚至不知道丢失了多少。
使用此方法,可恢复4087条记录:https://justpaste.it/38j03
进一步了解您的应用程序应该有助于您评估它们是否有用。
编辑:使用的方法:
我使用 hexadecimal/text 编辑器 (MadEdit) 来:
- 在
{"channel":
之前打断(将十六进制 7B226368616E6E656C223A 替换为 0A7B226368616E6E656C223A) - 在
}}}
之后换行(将十六进制 7D7D7D 替换为 7D7D7D0A) - 删除了所有出现的空值(用空值替换十六进制 00)
然后将所有内容复制并粘贴到电子表格应用程序 (Excel) 中,因此可以进行一些排序和过滤。
更好的方法:在 Word 中打开,进行相同的替换({"channel":
到 ^p"channel":
和 }}}
到 }}}^p
),然后粘贴到 Excel。