Я обращаюсь к общедоступной базе данных MySQL, используя JDBC и MySQL Java-коннектор . 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
Это неправильно. Длина векторов во 2-м и 3-м столбцах должна соответствовать числам в 1-м столбце.
1-й блоб, например, должен быть [21992901; 21998673]
. Как я могу преобразовать это?
Обновление:
Сразу после отправки этого вопроса я подумал, что это может быть шестнадцатеричное представление строки.
И это было подтверждено:
>> char(result{1,2}')
ans =
21992901,21998673,
Так что теперь мне нужно преобразовать все шестнадцатеричные данные больших двоичных объектов в числовые векторы. Все еще думаю сделать это векторизованным способом, так как количество строк может быть большим.