[已解决] matlab连接sql server数据库,把数据读取到fetch时出错

[复制链接]
掷地有声 发表于 2021-4-5 21:42:22
本帖最后由 掷地有声 于 2021-4-5 22:31 编辑

这个是站内找到的类似问题,不同的是他是MySQL数据库,我是sql server
准备工作:
1、  下载sqljdbc驱动包 sqljdbc42.jar,将其拷贝到matlab根目录\java\jar\toolbox
2、  找到matlab根目录\toolbox\locl目录下的classpath.txt文件,在文件里添加用来加载mysqljdbc驱动:
$matlabroot/java/jar/toolbox/sqljdbc42.jar
         (不知道这个驱动包对不对)
重启matlab

#建立链接对象——database:
  1. conn=database('AIRPORT','sa','123456')
复制代码
  1. conn =

  2.   database (具有属性):

  3.        Instance: 'AIRPORT'
  4.        UserName: 'sa'
  5.          Driver: []
  6.             URL: []
  7.     Constructor: [1x1 com.mathworks.toolbox.database.databaseConnect]
  8.         Message: []
  9.          Handle: [1x1 sun.jdbc.odbc.JdbcOdbcConnection]
  10.         TimeOut: 0
  11.      AutoCommit: 'on'
  12.            Type: 'Database Object'
复制代码
#建立并打开游标——exec:
  1. curs=exec(conn,'select * from try  where len(FLGT_NO)=6')
复制代码
  1. curs =

  2.   cursor (具有属性):

  3.         Attributes: []
  4.               Data: 0
  5.     DatabaseObject: [1x1 database]
  6.           RowLimit: 0
  7.           SQLQuery: 'select * from try  where len(FLGT_NO)=6'
  8.            Message: []
  9.               Type: 'Database Cursor Object'
  10.          ResultSet: [1x1 sun.jdbc.odbc.JdbcOdbcResultSet]
  11.             Cursor: [1x1 com.mathworks.toolbox.database.sqlExec]
  12.          Statement: [1x1 sun.jdbc.odbc.JdbcOdbcStatement]
  13.              Fetch: 0
复制代码

前面应该都没问题,下面出问题了
#把数据库中的数据读取到Matlab中——fetch:
  1. curs = fetch(curs)
  2. 错误使用 cursor/fetch (line 363)
  3. Java exception occurred:
  4. java.lang.OutOfMemoryError: GC overhead limit exceeded

  5.         at java.util.Arrays.copyOfRange(Unknown Source)

  6.         at java.lang.String.<init>(Unknown Source)

  7.         at java.nio.HeapCharBuffer.toString(Unknown Source)

  8.         at java.nio.CharBuffer.toString(Unknown Source)

  9.         at sun.jdbc.odbc.JdbcOdbcObject.BytesToChars(Unknown Source)

  10.         at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)

  11.         at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)

  12.         at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)

  13.         at sun.jdbc.odbc.JdbcOdbcResultSet.getObject(Unknown Source)

  14.         at com.mathworks.toolbox.database.fetchTheData.dataFetch(fetchTheData.java:831)
复制代码
可能是数据量过大的原因?一共300w条数据




最佳答案


TCCMATLAB 发表于 2021-4-6 09:07:50
从OutOfMemoryError这个exception来看应该是数据太多了,楼主是否可以先试一下分段读取。 在where后面多添加几个条件,先实现一条数据的提取,成功后,再尝试大数据分段读取。
回复此楼

2 条回复


TCCMATLAB 发表于 2021-4-6 09:07:50
从OutOfMemoryError这个exception来看应该是数据太多了,楼主是否可以先试一下分段读取。 在where后面多添加几个条件,先实现一条数据的提取,成功后,再尝试大数据分段读取。
回复此楼

掷地有声 发表于 2021-4-6 11:39:21
TCCMATLAB 发表于 2021-4-6 09:07
从OutOfMemoryError这个exception来看应该是数据太多了,楼主是否可以先试一下分段读取。 在where后面多添 ...

修改了下设置里的java堆内存,跑起来了,但是昨晚太晚了,没出结果就关了。不过你说的这个我试一下,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表