Функция принимает один строковый параметр - шаблон имени таблицы - и возвращает количество таблиц, имена которых соответствуют этому шаблону.
package ru.spb.whitepages.udr;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Resint {
public static Integer getIntResult(String argument) {
Integer result = null;
try {
Class.forName("com.informix.jdbc.IfxDriver");
Connection connection = DriverManager.getConnection("jdbc:informix-direct:");
PreparedStatement statement =
connection.prepareStatement("select count(*) from systables where tabname like ?");
statement.setString(1, argument);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
result = resultSet.getInt(1);
}
resultSet.close();
return result;
} catch (ClassNotFoundException | SQLException ex) {
System.out.println("Error: " + ex.getMessage());
}
return -1;
}
}
cd $MYROOT rm -r *.class *.jar javac -source 1.7 -target 1.7 \ -cp $INFORMIXDIR/extend/krakatoa/krakatoa.jar:$INFORMIXDIR/extend/krakatoa/jdbc.jar \ ru/spb/whitepages/udr/Resint.java jar cvf iudr2.jar ru
cd $MYROOT
PWD=`pwd`
dbaccess имя-базы <<EOF
EXECUTE PROCEDURE sqlj.install_jar("file:$PWD/iudr2.jar", "lib2", 0);
create function getIntResult(varchar(255)) returns int
external name 'lib2:ru.spb.whitepages.udr.Resint.getIntResult(java.lang.String)'
language java;
grant execute on function getIntResult(varchar) to public as informix;
EOF
В данном случае имя метода в классе Java и имя функции в базе данных совпадают.
При задании внешнего имени функции и использовании строковых параметров функции необходимо указывать полное имя класса String - java.lang.String
dbaccess имя-базы <<EOF
EXECUTE FUNCTION getIntResult('sys%');
EOF
68
В базе найдено 68 таблиц, имена которых начинаются с текста 'sys'.
dbaccess имя-базы <<EOF
drop function getIntResult(varchar);
EXECUTE PROCEDURE sqlj.remove_jar("lib2", 0);
EOF