我有一个Oracle函数,它接受一个POINTS%ROWTYPE表.我想使用CriteriaBuilder类从JPA调用此函数,该类具有数据库函数的功能.当我尝试构建查询时,它会死于抱怨ArrayLists不是函数的有效查询参数.
如何将ArrayList中的ArrayList传入Oracle函数?
Oracle函数签名:
CREATE OR REPLACE FUNCTION LOCATION_CONTAINS
(
LATITUDE_IN IN DOUBLE PRECISION,
LONGITUDE_IN IN DOUBLE PRECISION,
points IN types_pkg.point_array,
numPoints IN INTEGER
)
Run Code Online (Sandbox Code Playgroud)
Oracle类型:
create or replace package types_pkg
as
type point_array is table of FILTERPOINT%ROWTYPE;
end types_pkg;
Run Code Online (Sandbox Code Playgroud)
JPA Criteria Builder调用
List<FilterPoint> points = getPoints(location_name);
int numPoints = points.size();
Expression ex =
cb.function( "LOCATION_CONTAINS",
Integer.class,
entity.get( "latitude" ),
entity.get( "longitude" ),
cb.literal( points ),
cb.literal( numPoints ) );
Run Code Online (Sandbox Code Playgroud)
例外:
org.apache.openjpa.persistence.ArgumentException:
The specified parameter of type "class middle.ware.FilterPoint" is not …Run Code Online (Sandbox Code Playgroud) 我在我的prepare语句中遇到错误java.sql.SQLFeatureNotSupportedException.我正在使用Mysql数据库.
以下是我的代码.
class tmp {
public static void main(String arg[]) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost/sample", "root", "root");
PreparedStatement pst = conn
.prepareStatement("select * from userinfo where firstname in(?)");
String[] Parameter = { "user1", "Administrator" };
Array sqlArray = conn.createArrayOf("VARCHAR", Parameter);
pst.setArray(1, sqlArray);
ResultSet rs = pst.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)