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 | } |