Внешняя и внутренняя память не относятся к местоположению памяти, а относятся к политике конфиденциальности. Внутреннее хранилище означает, что только приложения или процессы системы / суперпользователя могут получить доступ к содержимому.
Внешнее хранилище может быть прочитано каждым приложением, это то, что появляется при подключении телефона к компьютеру, поэтому вы можете думать о нем как о том, что показано всем остальным, следовательно, «внешнему».
У меня, например, Samsung S5, и он помещает как внутреннее, так и внешнее хранилище в одну и ту же «внутреннюю» флеш-память, они фактически являются отдельными разделами на одной и той же палочке.
Когда я добавляю SD-карту, он добавляет другое (вторичное) место хранения.
Каждое устройство Android должно поставляться с внутренним и внешним хранилищем, поэтому устройства, которые отправляют без SD-карты например, гарантируют, что для внутренней и внешней памяти будет разбита «внутренняя» память.
Что касается отношения External_Content_URI, она вернет изображения, которые находятся во внешнем хранилище, - более внимательно прочитав документы, он говорит, что он возвращает только для «первичного» объема внешней памяти. Я просто заметил, что последняя часть в кавычках сама, так что я буду тестировать в ближайшие несколько дней, если вторичное внешнее хранилище также индексируется или извлекается медиастаром, если кто-то еще не поможет ответить на это первым.
http://developer.android.com/reference/android/provider/MediaStore.Images.Media.html
Я хочу выполнить запрос sql следующим образом:
blockquote>
statement.execute("select fullName from user where user_id=1; select fullName from user where user_id=2");
Это возможно только тогда, когда вы установили одно свойство подключения к базе данных, чтобы разрешить одновременное выполнение нескольких запросов. И имя свойства
allowMultiQueries=true
. Это свойство должно быть установлено и отправлено вместе с запросом на соединение с базой данных на сервере. Общий синтаксис выглядит следующим образом:String dbUrl = "jdbc:mysql:///test?allowMultiQueries=true";
Это дополнительное свойство соединения для тех, которые уже существуют, например,
autoReConnect=true
и т. Д.Допустимые значения для свойства
allowMultiQueries
true
,false
,yes
иno
. Любое другое значение отклоняется во время выполнения с помощьюSQLException
.Вы должны использовать
execute( String sql )
или другие его варианты для получения результатов выполнения запроса.multiQuerySqlString = "select fullName from user where user_id=1; "; multiQuerySqlString += "select fullName from user where user_id=2; "; // you can multiple types of result sets multiQuerySqlString += "select last_login from user_logs where user_id=1; "; boolean hasMoreResultSets = stmt.execute( multiQuerySqlString );
Для повторения и обработки результатов вам требуются следующие шаги:
int rsNumber = 0; while ( hasMoreResultSets ) { rsNumber += 1; Resultset rs = stmt.getResultSet(); // based on the structure of the result set, // you can handle column values. if ( rsNumber == 1 ) { while( rs.next() ) { // handle your rs here } // while rs } // if rs is 1 else if ( rsNumber == 2 ) { // call a method using this rs. processMyResultSet( rs ); // example } // if rs is 2 // ... etc // check whether there exist more result sets hasMoreResultSets = stmt.getMoreResults(); } // while results
Обратитесь к:
- Выполнено несколько запросов в java в одном заявлении Одна из подобных сообщений на SO, для которой я дал ответ.
Использование ;
в запросе для большинства баз данных не работает, поскольку оно обычно не является частью самого синтаксиса оператора, а терминатором для ввода командной строки или скрипта отдельным операциям. Командная строка или процессор сценариев воспринимают полуколону как сигнал, который завершает оператор, и могут быть отправлены на сервер.
Также в JDBC один оператор готовит (или выполняет) только один фактический что несколько операторов не разрешены, и поэтому также нет необходимости иметь полуточку, а для некоторых (большинство?) баз данных полуколония не является частью синтаксиса оператора, это просто синтаксическая ошибка для есть один включенный.
Если вы хотите выполнить несколько операторов, вам нужно использовать отдельные исполнения. Технически MySQL имеет возможность поддерживать несколько исполнений, которые могут быть активированы с помощью свойства соединения. Такое поведение не соответствует спецификации JDBC / API и делает ваш код менее переносимым. См. allowMultiQueries
в Имена классов драйвера / источника данных, Синтаксис URL-адресов и Свойства конфигурации для соединителя / J
Нет, вы не можете. Что вы ожидаете получить, вызвав statement.execute (...)? Он возвращает один ResultSet (... который означает одну таблицу).
Вы можете просто вызвать «select fullName от пользователя, где user_id в (1, 2)», чтобы вернуть оба результата.
. Точки с запятой в операторах JDBC очень подвержены ошибкам в целом. Некоторые драйверы JDBC этого не поддерживают (например, драйвер JDBC IBM для DB2 10.x генерирует исключение, если вы закрываете инструкцию SQL с помощью;;).