Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libFMap / src / org / gvsig / fmap / drivers / writing / JdbcWriter.java @ 20989

History | View | Annotate | Download (4.34 KB)

1
package org.gvsig.fmap.drivers.writing;
2

    
3
import java.sql.Connection;
4
import java.sql.ResultSet;
5
import java.sql.ResultSetMetaData;
6
import java.sql.SQLException;
7

    
8
import org.gvsig.fmap.core.features.IRow;
9
import org.gvsig.fmap.core.features.IRowEdited;
10
import org.gvsig.fmap.drivers.exceptions.ProcessWriterVisitorException;
11
import org.gvsig.fmap.drivers.exceptions.StartWriterVisitorException;
12
import org.gvsig.fmap.drivers.exceptions.StopWriterVisitorException;
13
import org.gvsig.fmap.drivers.reading.XTypes;
14

    
15
import com.hardcode.gdbms.engine.values.Value;
16

    
17
public class JdbcWriter extends AbstractWriter {
18
        Connection conn;
19
        ResultSet rs;
20
        Value[] record;
21
        int numRecord;
22

    
23
        private boolean bCreateTable;
24

    
25
        private ResultSetMetaData metaData = null;
26

    
27
        public JdbcWriter(){
28
        }
29
        public void initialize(Connection conn, ResultSet rs) throws SQLException{
30
                this.conn = conn;
31
                this.rs = rs;
32
                metaData = rs.getMetaData();
33
                System.out.println("INICIO CONEXI?N DE ESCRITURA");
34
        }
35
        public void preProcess() throws StartWriterVisitorException {
36
                        numRecord = 0;
37
                        try {
38
                                conn.setAutoCommit(false);
39
                        } catch (SQLException e) {
40
                                throw new StartWriterVisitorException(getName(),e);
41
                        }
42
                        /* Statement st = conn.createStatement();
43

44
                        if (bCreateTable) {
45
                                try {
46
                                        st.execute("DROP TABLE " + lyrDef.getTableName() + ";");
47
                                } catch (SQLException e1) {
48
                                        // Si no existe la tabla, no hay que borrarla.
49
                                }
50

51
                                String sqlCreate = PostGIS.getSqlCreateSpatialTable(lyrDef,
52
                                                lyrDef.getFieldsDesc(), true);
53
                                System.out.println("sqlCreate =" + sqlCreate);
54
                                st.execute(sqlCreate);
55
                        } */
56

    
57
        }
58

    
59
        public void process(IRowEdited editedRow) throws ProcessWriterVisitorException {
60
                IRow row = editedRow.getLinkedRow();
61

    
62
                try {
63
                        System.out.println("Intento escribir el registro " +
64
                                        numRecord + " de la capa " + metaData.getTableName(1));
65
                        switch (editedRow.getStatus())
66
                        {
67
                    case IRowEdited.STATUS_ADDED:
68
                            record=row.getAttributes();
69
                            rs.moveToInsertRow();
70
                            for (int i=0; i < record.length; i++)
71
                                    XTypes.updateValue(rs, i, record[i]);
72
                            rs.insertRow();
73
                            break;
74
                    case IRowEdited.STATUS_MODIFIED:
75
                            record=row.getAttributes();
76
                            rs.absolute(editedRow.getIndex()+1);
77
                            for (int i=0; i < record.length; i++)
78
                                    XTypes.updateValue(rs, i, record[i]);
79
                            rs.updateRow();
80
                            break;
81
                    case IRowEdited.STATUS_ORIGINAL:
82
                            if (bWriteAll)
83
                            {
84
                                record=row.getAttributes();
85
                                rs.moveToInsertRow();
86
                                for (int i=0; i < record.length; i++)
87
                                        XTypes.updateValue(rs, i, record[i]);
88
                                rs.insertRow();
89
                            }
90
                            break;
91
                    case IRowEdited.STATUS_DELETED:
92
                            rs.absolute(editedRow.getIndex()+1);
93
                        rs.deleteRow();
94
                            break;
95
                        }
96
                        numRecord++;
97
                        rs.next();
98

    
99
                } catch (SQLException e) {
100
                        System.out.println(e.getSQLState() + " " + e.getMessage());
101
                        try {
102
                                conn.rollback();
103
                        } catch (SQLException e1) {
104
                                throw new ProcessWriterVisitorException(getName(),e1);
105
                        }
106

    
107
                        throw new ProcessWriterVisitorException(getName(),e);
108
                }
109

    
110
        }
111

    
112
        public void postProcess() throws StopWriterVisitorException {
113
                try {
114
                        conn.commit();
115
                } catch (SQLException e) {
116
                        try {
117
                                conn.rollback();
118
                        } catch (SQLException e1) {
119
                                throw new StopWriterVisitorException(getName(),e1);
120
                        }
121
                        throw new StopWriterVisitorException(getName(),e);
122
                }
123
        }
124

    
125
        public boolean canWriteAttribute(int sqlType) {
126
                return true;
127
        }
128

    
129
        public String getName() {
130
                return "JDBC Writer";
131
        }
132
        /**
133
         * @return Returns the bCreateTable.
134
         */
135
        public boolean isCreateTable() {
136
                return bCreateTable;
137
        }
138

    
139
        /**
140
         * @param createTable
141
         *            The bCreateTable to set.
142
         */
143
        public void setCreateTable(boolean createTable) {
144
                bCreateTable = createTable;
145
        }
146

    
147
        /**
148
         * @return Returns the bWriteAll.
149
         */
150
        public boolean isWriteAll() {
151
                return bWriteAll;
152
        }
153

    
154
        /**
155
         * @param writeAll
156
         *            The bWriteAll to set.
157
         */
158
        public void setWriteAll(boolean writeAll) {
159
                bWriteAll = writeAll;
160
        }
161

    
162
        public void close() throws SQLException
163
        {
164
                rs.close();
165
                // conn.close();
166
                System.out.println("CIERRO CONEXI?N DE ESCRITURA");
167
        }
168
        public boolean canAlterTable() {
169
                // TODO Auto-generated method stub
170
                return false;
171
        }
172
        public boolean canSaveEdits() {
173
                try {
174
                        return (rs.getConcurrency() == ResultSet.CONCUR_UPDATABLE);
175
                } catch (SQLException e) {
176
                        e.printStackTrace();
177
                        return false;
178
                }
179
        }
180
}