Многопоточный JDBC

Можно сослаться на имя, а не значение при помощи ToString ()

Console.WriteLine("Auth method: {0}", AuthenticationMethod.Forms.ToString());

, документация здесь:

http://msdn.microsoft.com/en-us/library/16c1xs4z.aspx

... и если Вы называете свои перечисления в Pascal-регистре (как я делаю - такие как ThisIsMyEnumValue = 1 и т.д.) тогда Вы могли использовать очень простой regex для печати дружественной формы:

static string ToFriendlyCase(this string EnumString)
{
    return Regex.Replace(EnumString, "(?!^)([A-Z])", " $1");
}

, который можно легко назвать от любой строки:

Console.WriteLine("ConvertMyCrazyPascalCaseSentenceToFriendlyCase".ToFriendlyCase());

Выводы:

Преобразовывают Мое Сумасшедшее Предложение Pascal-регистра В Дружественный Случай

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

мне действительно нравится Ваше исходное решение хотя за более сложные сценарии все же. Вы могли взять свое решение один шаг вперед и сделать Ваш GetStringValue дополнительным методом Вашего перечисления, и затем Вы не должны будете ссылаться на него как StringEnum. GetStringValue...

public static string GetStringValue(this AuthenticationMethod value)
{
  string output = null;
  Type type = value.GetType();
  FieldInfo fi = type.GetField(value.ToString());
  StringValue[] attrs = fi.GetCustomAttributes(typeof(StringValue), false) as StringValue[];
  if (attrs.Length > 0)
    output = attrs[0].Value;
  return output;
}

Вы могли тогда получить доступ к нему легко прямо от Вашего перечислимого экземпляра:

Console.WriteLine(AuthenticationMethod.SSO.GetStringValue());

5
задан deltanovember 25 July 2009 в 14:16
поделиться

2 ответа

Вы должны использовать одно соединение для каждой задачи. Если вы используете пул соединений, вы не можете использовать подготовленные операторы, подготовленные каким-либо другим соединением. Все объекты, созданные при соединении (ResultSet, PreparedStatements), недопустимы для использования после возврата соединения в пул.

Итак, это похоже

public void getSomeData() {
  Connection conn = datasource.getConnection();
  PreparedStatement st;
  try {
    st = conn.prepareStatement(...);
    st.execute();
  } finally {
    close(st);
    close(conn);
  }
}

Итак, в этом случае все ваши объекты DAO принимают не соединение, а объект DataSource (java.sql. DataSource), который действительно является фабрикой соединений с пулом. И в каждом методе вы в первую очередь получаете связь, выполняете всю свою работу и тесную связь. Вы должны как можно быстрее вернуть соединение с пулом. После возврата соединения оно может быть не закрыто физически, а повторно инициализировано (все активные транзакции закрыты, все переменные сеанса уничтожены и т. Д.)

4
ответ дан 14 December 2019 в 19:21
поделиться

Да, использовать несколько соединений с пулом соединений. Откройте соединение на время, достаточное для того, чтобы делать то, что вам нужно, а затем закройте его, как только закончите. Пусть пул соединений позаботится об "физическом" управлении соединениями для повышения эффективности.

1
ответ дан 14 December 2019 в 19:21
поделиться
Другие вопросы по тегам:

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