Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有JDBC setArray()方法的替代方法吗?_Java_Oracle_Jdbc - Fatal编程技术网

Java 有JDBC setArray()方法的替代方法吗?

Java 有JDBC setArray()方法的替代方法吗?,java,oracle,jdbc,Java,Oracle,Jdbc,我正在使用这段代码,但我的JDBC驱动程序不支持setArray()方法。还有别的办法吗 Class.forName(DRIVER); conn = DriverManager.getConnection(URL,USER,PSW); String[] serviceIdarray = new String[serviceIdList.size()]; for(int i=0;i<serviceIdList.size();i++){

我正在使用这段代码,但我的JDBC驱动程序不支持
setArray()
方法。还有别的办法吗

Class.forName(DRIVER);
    conn = DriverManager.getConnection(URL,USER,PSW); 
    String[] serviceIdarray = new String[serviceIdList.size()];
        for(int i=0;i<serviceIdList.size();i++){
            serviceIdarray[i]=serviceIdList.get(i);
        }
    Array serviceId  =conn.createArrayOf("VARCHAR",serviceIdarray );

    if(UsmConstants.CURRENT_RUN_VALUE.equalsIgnoreCase(runType)){
        if(userRole!=null && UsmConstants.ADMIN_UPPERCASE.equalsIgnoreCase(userRole)){
        if(businessID.equalsIgnoreCase("IT")){
            queryString = "SELECT DISTINCT avc.AV_CMPLNC_TRXN_ID as avCompId, decode(avc.AV_COMPLIANCE_FLG,'Y','Yes','N','No') as avComplianceFlag, decode(avc.AV_INSTALLED_FLG,'Y','Yes','N','No') as avInstalledFlag, avc.SCAN_DATE as scanDate, avc.RESOLVED_DATE as resolvedDate, decode(avc.OTC_STATUS,'OOT','Open On Time','CLT','Close Late','OLT','Open Late','COT','Close On Time') as otcStatus, AVC.FIRST_DETECTED_DATE as reportedDate,avc.COMMENTS as comments, sm.SERVICE_NAME as serviceName, hm.HOST_NAME as hostName, hm.HOST_IP_ADDRESS as hostIPAddress " +
                "from T_USM_SERVICE_OFFERING_MASTER som,T_USM_APPL_SRVC_OFFRNG_MAP asom,T_USM_HOST_APPL_MAP ham,T_USM_HOST_MASTER hm,T_USM_AV_COMPLIANCE_TRXN avc,T_USM_SERVICE_MASTER sm " +
                "where avc.host_id = hm.host_id " +
                "AND avc.host_id = ham.host_id " +
                "AND HAM.APPLICATION_ID = ASOM.APPLICATION_ID " +
                "AND ASOM.SERVICE_OFFERING_ID = SOM.SERVICE_OFFERING_ID " +
                "AND ASOM.END_DATE IS NULL " +
                "AND HAM.END_DATE IS NULL " +
                "AND som.service_id = sm.service_id " +
                "AND " +itCase+
                "AND sm.service_id IN(?) " +
                "AND trunc(avc.SCAN_DATE) = to_date(?) " +
                "AND sm.STATUS = 'O' AND sm.RETIRED_DATE IS NULL " +
                "AND som.STATUS = 'O' AND som.RETIRED_DATE IS NULL " +
                "AND hm.RETIRED_DATE IS NULL " +
                "order by sm.SERVICE_NAME";
        stmt = (OraclePreparedStatement)conn.prepareStatement(queryString);

        if(serviceId != null){
            stmt.setArray(1, serviceId);
        } 
        stmt.setString(1, null);
        stmt.setString(2, calendarDate); 
        rs = stmt.executeQuery();
Class.forName(驱动程序);
conn=DriverManager.getConnection(URL、用户、PSW);
String[]serviceIdarray=新字符串[serviceIdList.size()];

for(int i=0;i仅适用于oracle db。 在DB中创建类型。
创建类型l_varchar2是varchar2(100)的表;

试试这个

public class Array {
    public static void main(String[] args) throws SQLException, Exception {
        Connection conn = ConnectionDefinition.getOracleConnection();
        conn.getTypeMap().put("L_VARCHAR2", String[].class);
        PreparedStatement  createStatement = conn.prepareCall("select * from table(?)");
        createStatement.setArray(1, ((OracleConnection) conn).createARRAY("L_VARCHAR2", new Object[]{"AA","BB","CC"}));
        ResultSet  rs = createStatement.executeQuery();
        while (rs.next()) {               
            System.err.println(rs.getString(1));
        }
        conn.close();
    }
}

解决方案
IN(?,,…)
setString
s以编程方式,查看JDBC驱动程序是否应该允许IN(?)设置一个数组值。您发布了大量代码,但没有真正解释它。此外,您还留下了一些注释掉的代码行,这会使事情变得混乱。请尝试提供一个简单明了的示例,以便其他人能够理解您的目标。