Я использую ORACLE9i и Oracle8 в течение длительного времени. Здесь я записал проблемы, на которые следует обратить внимание при использовании JSP, только для справки.
1. Как работать с большими типами Clob и BLOB
можно использовать для хранения больших текстовых данных и хранить до 4 ГБ данных. Это относительно распространено в разработке приложений. Класс sql.Clob, предоставляемый Java, соответствует. it. Он предоставляет два метода для чтения данных Clob:
метод getCharacterStream() возвращает входной поток в кодировке Unicode (объект java.io.Reader).
Метод getAsciiStream() возвращает входной поток в кодировке ASCII (java. io.InputStream).
Итак, если вы можете хранить китайские символы, вы должны использовать предыдущий метод.
Теперь приведите практический пример и позвольте мне шаг за шагом научиться использовать CLOB.
Сначала создайте таблицу с полями CLOB:
создаем тест таблицы (id INTEGER, content clob);
Далее мы вставляем запись в эту таблицу через JSP, а затем получаем и отображаем ее.
Следует
отметить следующие моменты:
1) данные типа Clob не могут быть вставлены напрямую. и должен быть задан сначала с помощью метода пустой_clob(). Он выделяет локатор (точно так же используйте функцию пустой_blob() для выделения локатора для больших двоичных объектов. Затем выберите его (конечно, в данный момент у него нет данных). но набор результатов не пуст), получите объект Clob и измените содержимое объекта, чтобы оно соответствовало нашим потребностям, а затем запись строки обновляется с помощью метода обновления.
2) При изменении записи, содержащей тип lob, с помощью select. строка должна быть заблокирована (реализовано через ключевое слово for update), иначе Oracle сообщит об ошибке.
3) Просто если вставленная запись выбрана для обновления, возникнет ошибка «нарушение порядка чтения». Решение — установить автоматическое. функции отправки в значение false, то есть автоматическая отправка не разрешена, затем зафиксируйте ее, а затем выберите ее. Это функция строк //* в этом коде.
Далее мы прочитаем вновь вставленную запись из. базу данных и отобразить ее:
2. Проблема с кодировкой
. Поскольку разработчики JAVA - иностранцы, их поддержка китайского языка не очень хороша. Ладно, это вызвало у многих из нас много головной боли, и именно об этом мы говорим о китайских иероглифах. Я не буду вдаваться в подробности некоторых спецификаций кодировки китайских символов, я в основном расскажу о том, как подключиться к базе данных Oracle. Некоторые небольшие проблемы, но эти небольшие проблемы очень неприятны.
1. Китайский вопрос, вставленный в базу данных, необходимо преобразовать в кодировку.
2. Китайский вопрос, прочитанный из базы данных, необходимо преобразовать в кодировку.
Посмотрим на закодированный код JAVA:
//ECov.java
import java.io.UnsupportedEncodingException
public
;класс ECov
{
общественная статическая строка asc2gb (String asc) {
String ret;
if (asc ==null
)
return
asc
;
е ) {
ret = asc;
}
return ret;
}
public static String gb2asc (String gb) {
String ret;
if (gb == null) return gb;
try {
ret = new String (gb.getBytes ("GB2312"),
"ISO8859_1
");
}
catch(UnsupportedEncodingException e) {
ret=gb;
}
return ret;
}
public static int byte2int(byte b) {
return ((-1)>>>>24)&
b
;
смысл этого кода. То есть два метода объединяются в один.
ECov.gb2asc(arg) следует использовать при вставке в базу данных, а ECov.asc2gb(arg) — при чтении. Наиболее важным моментом является то, что Oracle, похоже, распознает только кодировку формата ISO8859_1 (это просто моя идея).
3. Некоторые мелкие детали
1. Это setAutoCommit(true или false), часто используемая функция commit() в sqlPlus. Если вы используете true, не используйте commit(), иначе вы все равно будете использовать метод commit(). .
2. Обработка типов даты на самом деле не так проста, как setDate() и getDate(), как предполагалось. В середине есть большие лазейки. Вы найдете массу удовольствия, если отладите его самостоятельно.
3. Лучше всего использовать в базе данных технологию пула соединений. Это хороший способ использовать стандартную среду J2EE и простую технологию JNDI.