Как я могу узнать, что произошло с каждым оператором SQL, заданным в execute ()? [Дубликат]

Внешняя и внутренняя память не относятся к местоположению памяти, а относятся к политике конфиденциальности. Внутреннее хранилище означает, что только приложения или процессы системы / суперпользователя могут получить доступ к содержимому.

Внешнее хранилище может быть прочитано каждым приложением, это то, что появляется при подключении телефона к компьютеру, поэтому вы можете думать о нем как о том, что показано всем остальным, следовательно, «внешнему».

У меня, например, Samsung S5, и он помещает как внутреннее, так и внешнее хранилище в одну и ту же «внутреннюю» флеш-память, они фактически являются отдельными разделами на одной и той же палочке.

Когда я добавляю SD-карту, он добавляет другое (вторичное) место хранения.

Каждое устройство Android должно поставляться с внутренним и внешним хранилищем, поэтому устройства, которые отправляют без SD-карты например, гарантируют, что для внутренней и внешней памяти будет разбита «внутренняя» память.

Что касается отношения External_Content_URI, она вернет изображения, которые находятся во внешнем хранилище, - более внимательно прочитав документы, он говорит, что он возвращает только для «первичного» объема внешней памяти. Я просто заметил, что последняя часть в кавычках сама, так что я буду тестировать в ближайшие несколько дней, если вторичное внешнее хранилище также индексируется или извлекается медиастаром, если кто-то еще не поможет ответить на это первым.

http://developer.android.com/reference/android/provider/MediaStore.Images.Media.html

5
задан Gord Thompson 25 January 2016 в 17:15
поделиться

3 ответа

Я хочу выполнить запрос sql следующим образом:

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

Обратитесь к:

8
ответ дан Community 22 August 2018 в 04:33
поделиться

Использование ; в запросе для большинства баз данных не работает, поскольку оно обычно не является частью самого синтаксиса оператора, а терминатором для ввода командной строки или скрипта отдельным операциям. Командная строка или процессор сценариев воспринимают полуколону как сигнал, который завершает оператор, и могут быть отправлены на сервер.

Также в JDBC один оператор готовит (или выполняет) только один фактический что несколько операторов не разрешены, и поэтому также нет необходимости иметь полуточку, а для некоторых (большинство?) баз данных полуколония не является частью синтаксиса оператора, это просто синтаксическая ошибка для есть один включенный.

Если вы хотите выполнить несколько операторов, вам нужно использовать отдельные исполнения. Технически MySQL имеет возможность поддерживать несколько исполнений, которые могут быть активированы с помощью свойства соединения. Такое поведение не соответствует спецификации JDBC / API и делает ваш код менее переносимым. См. allowMultiQueries в Имена классов драйвера / источника данных, Синтаксис URL-адресов и Свойства конфигурации для соединителя / J

9
ответ дан Lukas Eder 22 August 2018 в 04:33
поделиться

Нет, вы не можете. Что вы ожидаете получить, вызвав statement.execute (...)? Он возвращает один ResultSet (... который означает одну таблицу).

Вы можете просто вызвать «select fullName от пользователя, где user_id в (1, 2)», чтобы вернуть оба результата.

. Точки с запятой в операторах JDBC очень подвержены ошибкам в целом. Некоторые драйверы JDBC этого не поддерживают (например, драйвер JDBC IBM для DB2 10.x генерирует исключение, если вы закрываете инструкцию SQL с помощью;;).

1
ответ дан roehrijn 22 August 2018 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: