Функция принимает один строковый параметр - шаблон имени таблицы - и возвращает количество таблиц, имена которых соответствуют этому шаблону.
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