Я пишу фрагмент кода, чтобы применить кодировку с конкретным клиентом к XML-данным. Сначала я попытался сделать это, используя только PL-SQL, но столкнулся с очень низкой производительностью (1 час для 160 записей). После этого я попробовал его только с java, который дал отличную производительность (400 000 записей за 1 минуту)Пропустить Oracle clobs от и до Java
Теперь я хочу посмотреть, как работает производительность, когда я создаю код на Java и загружаю его в базу данных.
Для этого у меня есть следующий код:
create or replace and compile java source named XmlNumericEncoder as
public class XmlNumericEncoder {
public static String encode(String xmlstring) {
String xmlstring_out = "";
for (int i = 0; i < xmlstring.length(); i++){
char ch = xmlstring.charAt(i);
if ((int)ch >= 192 && (int)ch <= 255){
xmlstring_out += "&#" + (int)ch + ";";
} else {
xmlstring_out += ch;
}
}
return xmlstring_out;
}
}
CREATE OR REPLACE FUNCTION XmlNumericEncoder(xmlstring varchar2)
RETURN String
AS LANGUAGE JAVA
NAME 'XmlNumericEncoder.encode(java.lang.String) return java.lang.String';
Этот код может быть выполнен следующим образом:
select XmlNumericEncoder('Böhmer') from dual;
Проблема Я сейчас облицовкой, что мне нужно, чтобы выполнить функцию на больших частях данных, хранящихся в клобах. Я знаю, что есть класс java.sql.Clob, и я могу заставить его работать как входной параметр, но я не могу заставить его работать как выходной параметр, я продолжаю работать с исключениями nullpointer.
Это код, который я работал с:
import java.sql.Clob;
import java.sql.SQLException;
public class XmlNumericEncoder {
public static Clob encode(Clob xmlclob) throws SQLException {
String xmlstring_out = "";
Clob xmlclob_out = null;
for (int i = 0; i < xmlclob.length(); i++){
char ch = xmlclob.getSubString(i,1).charAt(1);
if ((int)ch >= 192 && (int)ch <= 255){
xmlstring_out += "&#" + (int)ch + ";";
} else {
xmlstring_out += ch;
}
}
int setString = xmlclob_out.setString(0, xmlstring_out);
return xmlclob_out;
}
Любые идеи, где я неправильно?
Где вы получаете нулевые исключения указателя? Не могли бы вы разместить трассировку стека? –
Кажется очевидным, что вы получаете исключение nullpointer: 'Clob xmlclob_out = null;', вы никогда не создаете экземпляр объекта Clob в своем коде. –
Я знаю, но как это должно быть сделано? «java.sql.Clob - абстрактный, не может быть экземпляр», должен ли я посылать входной и выходной clob из oracle? – ErikL