Revision 43629 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/JDBCSQLBuilderBase.java

View differences:

JDBCSQLBuilderBase.java
1 1
package org.gvsig.fmap.dal.store.jdbc2.spi;
2 2

  
3 3
import java.sql.PreparedStatement;
4
import java.sql.SQLException;
4 5
import java.util.ArrayList;
5 6
import java.util.List;
6 7
import org.gvsig.fmap.dal.feature.FeatureReference;
7 8
import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
8 9
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
9 10
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
10
import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
11
import org.gvsig.tools.service.spi.ProviderServices;
11
import org.gvsig.fmap.geom.Geometry;
12
import org.gvsig.tools.dispose.Disposable;
12 13

  
13 14
public class JDBCSQLBuilderBase extends SQLBuilderBase {
14 15

  
......
33 34
        }
34 35
    }
35 36

  
36
    public void setParameters(PreparedStatement st, FeatureProvider feature) {
37
    public Disposable setParameters(PreparedStatement st, FeatureProvider feature) {
37 38
        try {
38 39
            List<Object> values = new ArrayList<>();
39 40
            for (Parameter parameter : this.getParameters()) {
......
44 45
                    values.add(feature.get(name));
45 46
                }
46 47
            }
47
            JDBCUtils.setObjects(st, values, this.geometry_support_type());
48
            return this.setStatementParameters(st, values, this.geometry_support_type());
48 49
        } catch (Exception ex) {
49 50
            String f = "unknow";
50 51
            try {
......
56 57
        }
57 58
    }
58 59

  
59
    public void setParameters(PreparedStatement st, FeatureReference reference) {
60
    public Disposable setParameters(PreparedStatement st, FeatureReference reference) {
60 61
        try {
61 62
            
62 63
            List<Object> values = new ArrayList<>();
......
68 69
                    values.add(((FeatureReferenceProviderServices)reference).getKeyValue(name));
69 70
                }
70 71
            }
71
            JDBCUtils.setObjects(st, values, this.geometry_support_type());
72
            return this.setStatementParameters(st, values, this.geometry_support_type());
72 73
        } catch (Exception ex) {
73 74
            String f = "unknow";
74 75
            try {
......
80 81
        }
81 82
    }
82 83

  
84
    public Disposable setStatementParameters(
85
        PreparedStatement st, 
86
        List values, 
87
        GeometrySupportType geometrySupportType) throws SQLException {
88
        
89
        if (values == null) {
90
            return new Disposable() {
91
                @Override
92
                public void dispose() {
93
                }
94
            };
95
        }
96
        try {
97
            byte[] bytes;
98
            int columnIndex = 1;
99
            for (Object value : values) {
100
                if (value instanceof Geometry) {
101
                    switch(geometrySupportType) {
102
                        case WKT:
103
                            value = ((Geometry) value).convertToWKT();
104
                            st.setObject(columnIndex, value);
105
                            break;
106
                        case NATIVE:
107
                        case WKB: 
108
                            bytes = ((Geometry) value).convertToWKB();
109
                            st.setBytes(columnIndex, bytes);
110
                            break;
111
                        case EWKB:
112
                            bytes = ((Geometry) value).convertToEWKB();
113
                            st.setBytes(columnIndex, bytes);
114
                            break;
115
                    }
116
                } else {
117
                    st.setObject(columnIndex, value);
118
                }
119
                columnIndex++;
120
            }
121
            return new Disposable() {
122
                @Override
123
                public void dispose() {
124
                }
125
            };
126
        } catch(Exception ex) {
127
            throw new SQLException("Can't set values for the prepared statement.", ex);
128
        }        
129
    }
83 130
}

Also available in: Unified diff