poster
2019-12-10, 20:30
我正在使用JDBC和mySQL Java连接器 (http://www.mysql.com/downloads/connector/j/)访问公共mySQL数据库。 exonCount是int(10),exonStarts和exonEnds是longblob字段。
javaaddpath('mysql-connector-java-5.1.12-bin.jar') host = 'genome-mysql.cse.ucsc.edu'; user = 'genome'; password = ''; dbName = 'hg18'; jdbcString = sprintf('jdbc:mysql://%s/%s', host, dbName); jdbcDriver = 'com.mysql.jdbc.Driver'; dbConn = database(dbName, user , password, jdbcDriver, jdbcString); gene.Symb = 'CDKN2B'; % Check to make sure that we successfully connected if isconnection(dbConn) qry = sprintf('SELECT exonCount, exonStarts, exonEnds FROM refFlat WHERE geneName=''%s''',gene.Symb); result = get(fetch(exec(dbConn, qry)), 'Data'); fprintf('Connection failed: %s\n', dbConn.Message); end 结果如下:
result = [2] [18x1 int8] [18x1 int8] [2] [18x1 int8] [18x1 int8] result{1,2}' ans = 50 49 57 57 50 57 48 49 44 50 49 57 57 56 54 55 51 44 错了第二列和第三列中向量的长度应与第一列中的数字匹配。
例如,第一个Blob应该为[21992901; 21998673] 。我该如何转换?
更新:
提交此问题后,我认为它可能是字符串的十六进制表示形式。并确认:
>> char(result{1,2}') ans = 21992901,21998673, 因此,现在我需要将所有Blob十六进制数据转换为数值向量。由于行数可能很大,因此仍在考虑以向量化的方式进行操作。
回答:
这会将result数据的第一列以外的所有字符数据转换为数值向量,并将结果放回适当的单元格中:
result(:,2:end) = cellfun(@(x) str2num(char(x'))',... %# Apply fcn to each cell result(:,2:end),... %# Input cells 'UniformOutput',false); %# Output as a cell array
更多&回答... (https://stackoverflow.com/questions/2647621)
javaaddpath('mysql-connector-java-5.1.12-bin.jar') host = 'genome-mysql.cse.ucsc.edu'; user = 'genome'; password = ''; dbName = 'hg18'; jdbcString = sprintf('jdbc:mysql://%s/%s', host, dbName); jdbcDriver = 'com.mysql.jdbc.Driver'; dbConn = database(dbName, user , password, jdbcDriver, jdbcString); gene.Symb = 'CDKN2B'; % Check to make sure that we successfully connected if isconnection(dbConn) qry = sprintf('SELECT exonCount, exonStarts, exonEnds FROM refFlat WHERE geneName=''%s''',gene.Symb); result = get(fetch(exec(dbConn, qry)), 'Data'); fprintf('Connection failed: %s\n', dbConn.Message); end 结果如下:
result = [2] [18x1 int8] [18x1 int8] [2] [18x1 int8] [18x1 int8] result{1,2}' ans = 50 49 57 57 50 57 48 49 44 50 49 57 57 56 54 55 51 44 错了第二列和第三列中向量的长度应与第一列中的数字匹配。
例如,第一个Blob应该为[21992901; 21998673] 。我该如何转换?
更新:
提交此问题后,我认为它可能是字符串的十六进制表示形式。并确认:
>> char(result{1,2}') ans = 21992901,21998673, 因此,现在我需要将所有Blob十六进制数据转换为数值向量。由于行数可能很大,因此仍在考虑以向量化的方式进行操作。
回答:
这会将result数据的第一列以外的所有字符数据转换为数值向量,并将结果放回适当的单元格中:
result(:,2:end) = cellfun(@(x) str2num(char(x'))',... %# Apply fcn to each cell result(:,2:end),... %# Input cells 'UniformOutput',false); %# Output as a cell array
更多&回答... (https://stackoverflow.com/questions/2647621)