Oracle import and call Java JAR package

Oracle met a demand, which has a look at this data format

121.41139320800005,31.29436885000007,121.41206283000008,31.29457611400005,121.41286000000002,31.293082750000053,121.411515441,31.292933945000073,121.41139320800005,31.29436885000007

现在需要把其转换为json格式 :
[{"lat":"121.41139320800005","lng":"31.29436885000007"},{"lat":"121.41206283000008","lng":"31.29457611400005"},{"lat":"121.41286000000002","lng":"31.293082750000053"},{"lat":"121.411515441","lng":"31.292933945000073"},{"lat":"121.41139320800005","lng":"31.29436885000007"}]

And the need to find each longitude maximum and minimum.


If you do it will be very troublesome according to the general sql or stored procedures, then think of it is if you can write like a hive as a function of udf form, write a function to get the value.

 

Sure enough, also can be used in Oracle java custom function.

 

At first import the raw data into an object, and then use the Ali fastjson, but being given loadjava when the Internet to find some of the main reasons for Oracle's jvm version is relatively low, only support jdk1.4 version, all now java grammar or high version jdk compiled version of the high, all will complain. So now use other jar package, most of which are now used in the 1.4 version of the above, it is generally error. So I can only use the syntax native version of jdk1.4 to write a compiler.

java code written as follows:

package com.eastcom.one.oracle;
 
import java.util.ArrayList;
import java.util.List;
 
public class TransformUtils {
 
    private final static String LAT_LNG_JSON = "json";
    private final static String MAX_LAT = "max_lat";
    private final static String MIN_LAT = "min_lat";
    private final static String MAX_LNG = "max_lng";
    private final static String MIN_LNG = "min_lng";
 
    public static String toJSONString(String line) {
 
        List datas = new ArrayList(100);
 
        String[] ltems = line.split(",");
 
        for (int i = 0; i < ltems.length; i++) {
 
            datas.add(Pair.of(ltems[i], ltems[++i]));
 
        }
 
        // String jsonString = JSON.toJSONString(datas);
 
        // System.out.println(jsonString);
 
        return null;
 
    }
 
    public static String toJSONString2(String line) {
 
        List datas = new ArrayList(100);
 
        String[] ltems = line.split(",");
 
        for (int i = 0; i < ltems.length; i++) {
 
            datas.add(Pair.of(ltems[i], ltems[++i]));
 
        }
 
        String jsonString = makeString(datas);
 
        String maxLat = getMaxLat(datas);
 
        getMinLat(datas);
 
        getMinLng(datas);
 
        getMaxLng(datas);
 
        return jsonString;
 
    }
 
    public static String getLatAndLngValue(String line, String value) {
 
        List datas = new ArrayList(100);
 
        String[] ltems = line.split(",");
 
        for (int i = 0; i < ltems.length; i++) {
 
            datas.add(Pair.of(ltems[i], ltems[++i]));
 
        }
 
        if (LAT_LNG_JSON.equals(value)) {
 
            return makeString(datas);
        }
 
        if (MAX_LAT.equals(value)) {
 
            return getMaxLat(datas);
        }
 
        if (MIN_LAT.equals(value)) {
 
            return getMinLat(datas);
        }
 
        if (MAX_LNG.equals(value)) {
 
            return getMaxLng(datas);
        }
 
        if (MIN_LNG.equals(value)) {
 
            return getMinLng(datas);
        }
 
        return null;
 
    }
 
    private static String makeString(List datas) {
 
        StringBuffer sb = new StringBuffer();
 
        sb.append("[");
 
        Pair pair = (Pair) datas.get(0);
 
        String lat = pair.getLat();
        String lng = pair.getLng();
 
        String latString = "{\"lat\":" + "\"" + lat + "\",";
        String lngString = "\"lng\":" + "\"" + lng + "\"}";
 
        sb.append(latString).append(lngString);
 
        for (int i = 1; i < datas.size(); i++) {
 
            pair = (Pair) datas.get(i);
            lat = pair.getLat();
            lng = pair.getLng();
 
            latString = ",{\"lat\":" + "\"" + lat + "\",";
            lngString = "\"lng\":" + "\"" + lng + "\"}";
 
            String tempPair = latString + lngString;
 
            sb.append(tempPair);
        }
 
        sb.append("]");
        System.out.println(sb.toString());
 
        return sb.toString();
 
    }
 
    public static String getMaxLat(List datas) {
 
        Pair pair = (Pair) datas.get(0);
 
        double maxLat = Double.valueOf(pair.getLat()).doubleValue();
 
        for (int i = 1; i < datas.size(); i++) {
 
            pair = (Pair) datas.get(i);
 
            double latTemp = Double.valueOf(pair.getLat()).doubleValue();
 
            if (latTemp > maxLat) {
                maxLat = latTemp;
            }
 
        }
 
        // System.out.println("maxLat: " + String.valueOf(maxLat));
 
        return String.valueOf(maxLat);
 
    }
 
    public static String getMinLat(List datas) {
 
        Pair pair = (Pair) datas.get(0);
 
        double minLat = Double.valueOf(pair.getLat()).doubleValue();
 
        for (int i = 1; i < datas.size(); i++) {
 
            pair = (Pair) datas.get(i);
 
            double latTemp = Double.valueOf(pair.getLat()).doubleValue();
 
            if (latTemp < minLat) {
                minLat = latTemp;
            }
 
        }
 
        // System.out.println("minLat: " + String.valueOf(minLat));
 
        return String.valueOf(minLat);
 
    }
 
    public static String getMaxLng(List datas) {
 
        Pair pair = (Pair) datas.get(0);
 
        double maxLng = Double.valueOf(pair.getLng()).doubleValue();
 
        for (int i = 1; i < datas.size(); i++) {
 
            pair = (Pair) datas.get(i);
 
            double lngTemp = Double.valueOf(pair.getLng()).doubleValue();
 
            if (lngTemp > maxLng) {
                maxLng = lngTemp;
            }
 
        }
 
        // System.out.println("maxLng: " + String.valueOf(maxLng));
 
        return String.valueOf(maxLng);
 
    }
 
    public static String getMinLng(List datas) {
 
        Pair pair = (Pair) datas.get(0);
 
        double minLng = Double.valueOf(pair.getLng()).doubleValue();
 
        for (int i = 1; i < datas.size(); i++) {
 
            pair = (Pair) datas.get(i);
 
            double lngTemp = Double.valueOf(pair.getLng()).doubleValue();
 
            if (lngTemp < minLng) {
                minLng = lngTemp;
            }
 
        }
 
        // System.out.println("minLng: " + String.valueOf(minLng));
 
        return String.valueOf(minLng);
 
    }
 
    public static void main(String[] args) {
 
        String line = "121.41139320800005,31.29436885000007,121.41206283000008,31.29457611400005,121.41286000000002,31.293082750000053,121.411515441,31.292933945000073,121.41139320800005,31.29436885000007";
 
        toJSONString(line);
        toJSONString2(line);
 
        System.out.println(getLatAndLngValue(line, "max_lat"));
        System.out.println(getLatAndLngValue(line, "min_lat"));
        System.out.println(getLatAndLngValue(line, "max_lng"));
        System.out.println(getLatAndLngValue(line, "min_lng"));
 
    }
 
}

 

Mainly the getLatAndLngValue (String line, String value) method. Among other main pack can be commented out in time.
After uploading using jdk1.4 compiler package maven go to the Oracle machine.

Use the command:

loadjava -r -f -verbose -resolve -user dbUserName/'dbPassWord' my-one-oracle-0.0.1-SNAPSHOT-jar-with-dependencies.jar

导入成功之后
creating : resource META-INF/MANIFEST.MF
loading : resource META-INF/MANIFEST.MF
creating : class com/eastcom/one/oracle/Pair
loading : class com/eastcom/one/oracle/Pair
creating : class com/eastcom/one/oracle/TransformUtils
loading : class com/eastcom/one/oracle/TransformUtils
creating : resource META-INF/maven/my-one-oracle/my-one-oracle/pom.properties
loading : resource META-INF/maven/my-one-oracle/my-one-oracle/pom.properties
creating : resource META-INF/maven/my-one-oracle/my-one-oracle/pom.xml
loading : resource META-INF/maven/my-one-oracle/my-one-oracle/pom.xml
skipping : resource META-INF/MANIFEST.MF
resolving: class com/eastcom/one/oracle/Pair
resolving: class com/eastcom/one/oracle/TransformUtils
skipping : resource META-INF/maven/my-one-oracle/my-one-oracle/pom.properties
skipping : resource META-INF/maven/my-one-oracle/my-one-oracle/pom.xml
Classes Loaded: 2
Resources Loaded: 3
Sources Loaded: 0
Published Interfaces: 0
Classes generated: 0
Classes skipped: 0
Synonyms Created: 0
Errors: 0

After the parameters can be introduced into the case plsql
select * from user_java_classes;

Show results:


If you need to drop off can be ordered by

dropjava -r -f -verbose -resolve -user dbUserName/'dbPassWord' my-one-oracle-0.0.1-SNAPSHOT-jar-with-dependencies.jar

User_java_classes query again when, no longer exists.
After the return to the topic, the jar package into Oracle, after creating the function.

create or replace function getLatAndLngValue(ins_1 varchar2,ins_2 varchar2) return varchar2 as
LANGUAGE JAVA NAME 'com/eastcom/one/oracle/TransformUtils.getLatAndLngValue(java.lang.String,java.lang.String) return java.lang.String';


If you drop off function, you can use the
drop function getLatAndLngValue;


After the function is created, then you can use a custom function

select getLatAndLngValue(t.contourcoordinates,'json') from ipmsdw.O_CO_BA_COMMUNITY_ZZ_D t

select getLatAndLngValue(t.contourcoordinates,'max_lat') from ipmsdw.O_CO_BA_COMMUNITY_ZZ_D t

select getLatAndLngValue(t.contourcoordinates,'min_lat') from ipmsdw.O_CO_BA_COMMUNITY_ZZ_D t

select getLatAndLngValue(t.contourcoordinates,'max_lng') from ipmsdw.O_CO_BA_COMMUNITY_ZZ_D t

select getLatAndLngValue(t.contourcoordinates,'min_lng') from ipmsdw.O_CO_BA_COMMUNITY_ZZ_D t

To achieve the effect. OK

----------------
Disclaimer: This article is CSDN blogger "liuxiangke0210 'original article, follow the CC 4.0 BY-SA copyright agreement, reproduced, please attach the original source link and this statement. .
Original link: https: //blog.csdn.net/liuxiangke0210/article/details/78326901

Guess you like

Origin www.cnblogs.com/imok-blog/p/11586184.html