Statistics
| Revision:

root / branches / piloto3d / libraries / libFMap / src / com / iver / cit / gvsig / fmap / edition / writers / JdbcWriter.java @ 9524

History | View | Annotate | Download (4.27 KB)

1
package com.iver.cit.gvsig.fmap.edition.writers;
2

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

    
8
import com.hardcode.gdbms.engine.values.Value;
9
import com.iver.cit.gvsig.fmap.core.IRow;
10
import com.iver.cit.gvsig.fmap.drivers.ITableDefinition;
11
import com.iver.cit.gvsig.fmap.drivers.XTypes;
12
import com.iver.cit.gvsig.fmap.edition.EditionException;
13
import com.iver.cit.gvsig.fmap.edition.IRowEdited;
14

    
15
public class JdbcWriter extends AbstractWriter {
16
        Connection conn;
17
        ResultSet rs;
18
        Value[] record;
19
        int numRecord;
20
        
21
        private boolean bCreateTable;
22
        
23
        private ResultSetMetaData metaData = null;
24

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

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

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

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

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

    
98
                } catch (SQLException e) {
99
                        System.out.println(e.getSQLState() + " " + e.getMessage());
100
                        try {
101
                                conn.rollback();
102
                        } catch (SQLException e1) {
103
                                e1.printStackTrace();
104
                                throw new EditionException(e);                                
105
                        }
106
                        
107
                        throw new EditionException(e.getMessage(),e);
108
                } 
109

    
110
        }
111

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

    
127
        public boolean canWriteAttribute(int sqlType) {
128
                return true;
129
        }
130

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

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

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

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

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