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

如何使用R从SQL数据库检索非常长的XML字符串?

许奇
2023-03-14
问题内容

我有一个脚本,可以从SQL数据库获取XML文件。这是我的操作方法:

library(RODBC)
library(XML)

myconn <- odbcConnect("mydsn")

query.text <- "SELECT xmlfield FROM db WHERE id = 12345"
doc <- sqlQuery(myconn, query.text, stringsAsFactors=FALSE)
doc <- iconv(doc[1,1], from="latin1", to="UTF-8")
doc <- xmlInternalTreeParse(doc, encoding="UTF-8")

但是,解析不适用于特定的数据库行,尽管当我将该字段的内容复制到单独的文件中并从文件中进行解析时,解析仍然有效。经过两天的“反复试验”,我确定了主要问题。似乎以这种方式查询短的XML文件不会引起任何问题,但是当我查询较大的文件时,该字符串在65534个字符后被砍掉。因此,XML文件的末尾丢失了,并且该文件无法解析。

我认为这可能是html" target="_blank">计算机上ODBC连接的总体限制。但是,另一个也使用ODBC从同一数据库中获取相同XML字段的程序可以做到这一点,而不会出现任何问题。所以我想这是一个R特定的问题。

任何想法如何解决?


问题答案:

我已写信给包作者,终于收到以下答复:

您无法阅读不是我的问题,也不是合理的借口。

手册说

’\ item [字符类型]可以通过三种方式将字符类型分类:固定长度或可变长度,最大大小和所使用的字符
集。最常用的类型\脚注{它们的SQL名称为
\ code {CHARACTER VARYING}和\ code {CHARACTER},但
对于常规使用而言,它们太麻烦了。}对于
可变长度的短字符串,\ code {varchar} (上限),并使用\ code {char}
固定长度的短字符串(通常用空格右填充)。
“短”的值因DBMS的不同而不同,至少为254,通常为
几千,通常其他类型也可用于较长的
字符串。有一个健全性检查,它允许
在读取时最多允许65535个字节的字符串:可以通过以下方式删除该字符串:
重新编译\ pkg {RODBC}。”


该手册可docRODBC软件包目录中找到。该信息未包含在参考手册中。

在此期间,我找到了一个无需使用即可检索我的数据的好方法,但RODBC我没有尝试重新编译此程序包。但我希望此答案对遇到相同问题的人有所帮助。



 类似资料:
  • 我试图检索xml值从一列数据存储在xml格式使用下面的查询在OracleSQLDeveloper.但是得到这个错误: ORA-00932:不一致的数据类型:应为-got-00932。00000-“不一致的数据类型:应为%s获得%s”*原因: 列的数据类型为CLOB 如:

  • 问题内容: 我正在尝试使用pyodbc从SQL Server检索数据,并使用Python将其打印在表中。但是,我似乎只能检索列名和数据类型之类的东西,而不能检索列每一行中的实际数据值。 基本上,我试图复制一个检索服务器数据并将其显示在表格中的Excel工作表。我连接到服务器没有任何问题,只是我似乎无法找到表中的实际数据。 这是我的代码的示例: 但是,这样做的结果只是给我一些诸如表名,列名以及一些整

  • 问题内容: 假设我已经在Android资源中存储了一个二维数组,如下所示。如何在Arraylist这样的Java集合中获取它们? 例如,在一维数组的情况下,我们可以使用 当countries_array像 问题答案: 资源文件的元素只能用于一维数组。换句话说,介于和之间的所有内容都被视为单个字符串。 如果你想存储你所描述的方式(有效伪XML)的数据,你需要获得项目作为一个单一的使用和解析和元素自己

  • 我试图创建一个简单的程序,从用户的名字,手机号码和电子邮件地址,然后把数据在Firebase实时数据库。 有3个输入框和一个按钮,按一下就可以完成上面的操作。代码如下: 我这样设置了消防基地:

  • 我有一个Spring批处理程序,它从数据库中读取数据并处理它,并将(使用ItemWriter)插入到数据库中的其他表中。在这里,我使用了一系列针对ItemReader、Item处理机和ItemWriter的SQL查询。 我的要求是将所有这些查询存储在一个具有参数和值格式的表中,并通过一个数据库调用来检索它,然后将其传递给ItemReader或Item处理机或ItemrWriter。因此,如果将来查

  • 问题内容: 有没有办法列出所有SQL Server CE数据库表索引,或者至少列出单个表? 问题答案: -检索有关数据库中包含的索引的信息。选择*从INFORMATION_SCHEMA.INDEXES -检索数据库中的所有表,包括系统表。选择*从INFORMATION_SCHEMA.TABLES Arjuna Chiththananda-检索SQL CE数据库的架构信息