Statistics
| Revision:

svn-gvsig-desktop / tags / v1_0_2_Build_903+3D / libraries / libFMap / src / com / iver / cit / gvsig / fmap / edition / writers / JdbcWriter.java @ 10722

History | View | Annotate | Download (4.11 KB)

1 5634 fjp
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.XTypes;
11
import com.iver.cit.gvsig.fmap.edition.EditionException;
12
import com.iver.cit.gvsig.fmap.edition.IRowEdited;
13
14
public class JdbcWriter extends AbstractWriter {
15
        Connection conn;
16
        ResultSet rs;
17
        Value[] record;
18
        int numRecord;
19
20
        private boolean bCreateTable;
21
22
        private ResultSetMetaData metaData = null;
23
24
        public JdbcWriter(){
25
        }
26
        public void initialize(Connection conn, ResultSet rs) throws SQLException{
27
                this.conn = conn;
28
                this.rs = rs;
29
                metaData = rs.getMetaData();
30 5690 fjp
                System.out.println("INICIO CONEXI?N DE ESCRITURA");
31 5634 fjp
        }
32
        public void preProcess() throws EditionException {
33
                        numRecord = 0;
34
                        try {
35
                                conn.setAutoCommit(false);
36
                        } catch (SQLException e) {
37
                                e.printStackTrace();
38
                                throw new EditionException(e);
39
                        }
40
                        /* Statement st = conn.createStatement();
41

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

49
                                String sqlCreate = PostGIS.getSqlCreateSpatialTable(lyrDef,
50
                                                lyrDef.getFieldsDesc(), true);
51
                                System.out.println("sqlCreate =" + sqlCreate);
52
                                st.execute(sqlCreate);
53
                        } */
54
55
        }
56
57
        public void process(IRowEdited editedRow) throws EditionException {
58
                IRow row = (IRow) editedRow.getLinkedRow();
59
60
                try {
61
                        System.out.println("Intento escribir el registro " +
62
                                        numRecord + " de la capa " + metaData.getTableName(1));
63
                        switch (editedRow.getStatus())
64
                        {
65
                    case IRowEdited.STATUS_ADDED:
66
                            record=row.getAttributes();
67
                            rs.moveToInsertRow();
68
                            for (int i=0; i < record.length; i++)
69
                                    XTypes.updateValue(rs, i, record[i]);
70
                            rs.insertRow();
71
                            break;
72
                    case IRowEdited.STATUS_MODIFIED:
73
                            record=row.getAttributes();
74
                            rs.absolute(editedRow.getIndex()+1);
75
                            for (int i=0; i < record.length; i++)
76
                                    XTypes.updateValue(rs, i, record[i]);
77
                            rs.updateRow();
78
                            break;
79
                    case IRowEdited.STATUS_ORIGINAL:
80 5690 fjp
                            if (bWriteAll)
81
                            {
82
                                record=row.getAttributes();
83
                                rs.moveToInsertRow();
84
                                for (int i=0; i < record.length; i++)
85
                                        XTypes.updateValue(rs, i, record[i]);
86
                                rs.insertRow();
87
                            }
88 5634 fjp
                            break;
89
                    case IRowEdited.STATUS_DELETED:
90
                            rs.absolute(editedRow.getIndex()+1);
91
                        rs.deleteRow();
92
                            break;
93
                        }
94
                        numRecord++;
95
                        rs.next();
96
97
                } catch (SQLException e) {
98 5663 fjp
                        System.out.println(e.getSQLState() + " " + e.getMessage());
99 5668 fjp
                        try {
100
                                conn.rollback();
101
                        } catch (SQLException e1) {
102
                                e1.printStackTrace();
103
                                throw new EditionException(e);
104
                        }
105
106 5634 fjp
                        throw new EditionException(e.getMessage(),e);
107
                }
108
109
        }
110
111
        public void postProcess() throws EditionException {
112 5690 fjp
                try {
113 5634 fjp
                        conn.commit();
114
                } catch (SQLException e) {
115 5668 fjp
                        try {
116
                                conn.rollback();
117
                        } catch (SQLException e1) {
118
                                e1.printStackTrace();
119
                                throw new EditionException(e);
120
                        }
121 5634 fjp
                        e.printStackTrace();
122
                        throw new EditionException(e);
123
                }
124
        }
125
126
        public boolean canWriteAttribute(int sqlType) {
127
                return true;
128
        }
129
130
        public String getName() {
131
                return "JDBC Writer";
132
        }
133
        /**
134
         * @return Returns the bCreateTable.
135
         */
136
        public boolean isCreateTable() {
137
                return bCreateTable;
138
        }
139
140
        /**
141
         * @param createTable
142
         *            The bCreateTable to set.
143
         */
144
        public void setCreateTable(boolean createTable) {
145
                bCreateTable = createTable;
146
        }
147
148
        /**
149
         * @param writeAll
150
         *            The bWriteAll to set.
151
         */
152
        public void setWriteAll(boolean writeAll) {
153
                bWriteAll = writeAll;
154
        }
155
156 5690 fjp
        public void close() throws SQLException
157
        {
158
                rs.close();
159
                // conn.close();
160
                System.out.println("CIERRO CONEXI?N DE ESCRITURA");
161
        }
162 6621 fjp
        public boolean canAlterTable() {
163
                // TODO Auto-generated method stub
164
                return false;
165
        }
166 6856 fjp
        public boolean canSaveEdits() {
167
                try {
168
                        return (rs.getConcurrency() == ResultSet.CONCUR_UPDATABLE);
169
                } catch (SQLException e) {
170
                        e.printStackTrace();
171
                        return false;
172
                }
173
        }
174 5634 fjp
}