29
29
*
30
30
* @author pauloborges
31
31
*/
32
- public final class PreparedSentenceExec implements SentenceExec {
32
+ public class PreparedSentenceExec < W extends Object , T > extends JDBCBaseSentence < T > {
33
33
34
34
protected final static System .Logger LOGGER = System .getLogger (PreparedSentenceExec .class .getName ());
35
35
36
- private final Session session ;
37
36
private final String sql ;
38
37
//private PrepareStatementWriter preBuilder;
39
38
private final SerializerWrite serwrite ;
39
+ private final SerializerRead <T > serread ;
40
+ private PreparedStatement preparedStatement ;
40
41
41
42
public PreparedSentenceExec (Session session , String sqlSentence , Datas [] param , int [] index ) {
42
- this . session = session ;
43
+ super ( session ) ;
43
44
this .sql = sqlSentence ;
44
- //this.preBuilder = new PrepareStatementWriter(param, index);
45
45
serwrite = new SerializerWriteBasicExt (param , index );
46
+ serread = null ;
46
47
}
47
-
48
+
48
49
public PreparedSentenceExec (Session session , String sqlSentence , SerializerWrite serwrite ) {
49
- this . session = session ;
50
+ super ( session ) ;
50
51
this .sql = sqlSentence ;
51
52
//this.preBuilder = new PrepareStatementWriter(param, index);
52
53
this .serwrite = serwrite ;
54
+ serread = null ;
55
+ }
56
+
57
+ public PreparedSentenceExec (Session session , String sqlSentence , SerializerWrite serwrite , SerializerRead <T > serread ) {
58
+ super (session );
59
+ this .sql = sqlSentence ;
60
+ //this.preBuilder = new PrepareStatementWriter(param, index);
61
+ this .serwrite = serwrite ;
62
+ this .serread = serread ;
63
+ }
64
+
65
+ public PreparedSentenceExec (Session session , String sqlSentence ,SerializerRead <T > serread ) {
66
+ super (session );
67
+ this .sql = sqlSentence ;
68
+ //this.preBuilder = new PrepareStatementWriter(param, index);
69
+ this .serwrite = null ;
70
+ this .serread = serread ;
53
71
}
54
72
55
73
/**
56
74
*
57
75
* @return @throws BasicException
58
76
*/
59
- @ Override
60
- public int exec () throws BasicException {
77
+ private int exec1 () throws BasicException {
61
78
int rowsAffected = 0 ;
62
79
try (PreparedStatement preparedStatement = session .getConnection ().prepareStatement (sql )) {
63
80
rowsAffected = preparedStatement .executeUpdate ();
@@ -78,17 +95,17 @@ public int exec() throws BasicException {
78
95
* @return
79
96
* @throws BasicException
80
97
*/
81
- @ Override
82
- public int exec (Object param ) throws BasicException {
98
+ private int exec2 (Object param ) throws BasicException {
83
99
int rowsAffected = 0 ;
84
100
85
101
if (param instanceof Object []) {
86
102
rowsAffected = exec ((Object []) param );
87
103
} else {
88
104
try (PreparedStatement preparedStatement = session .getConnection ().prepareStatement (sql )) {
89
105
//preBuilder.prepare(preparedStatement, param);
90
-
91
- serwrite .writeValues (new PreparedSentenceDataWrite (preparedStatement ), param );
106
+ if (serwrite != null ) {
107
+ serwrite .writeValues (new PreparedSentenceDataWrite (preparedStatement ), param );
108
+ }
92
109
93
110
rowsAffected = preparedStatement .executeUpdate ();
94
111
} catch (SQLException sqlex ) {
@@ -111,8 +128,9 @@ private int exec(Object[] params) throws BasicException {
111
128
112
129
LOGGER .log (System .Logger .Level .INFO , "SQL: " + sql );
113
130
try (PreparedStatement preparedStatement = session .getConnection ().prepareStatement (sql )) {
114
- //preBuilder.prepare(preparedStatement, params);
115
- serwrite .writeValues (new PreparedSentenceDataWrite (preparedStatement ), params );
131
+ if (serwrite != null ) {
132
+ serwrite .writeValues (new PreparedSentenceDataWrite (preparedStatement ), params );
133
+ }
116
134
rowsAffected = preparedStatement .executeUpdate ();
117
135
} catch (SQLException sqlex ) {
118
136
LOGGER .log (System .Logger .Level .WARNING , "Exception while execute SQL: " + sql , sqlex );
@@ -122,6 +140,70 @@ private int exec(Object[] params) throws BasicException {
122
140
return rowsAffected ;
123
141
}
124
142
143
+ @ Override
144
+ public DataResultSet <T > moreResults () throws BasicException {
145
+ DataResultSet <T > result = null ;
146
+ try {
147
+ if (preparedStatement != null ) {
148
+ if (preparedStatement .getMoreResults ()) {
149
+ result = new JDBCDataResultSet <>(preparedStatement .getResultSet (), serread );
150
+ } else {
151
+ int resCount = preparedStatement .getUpdateCount ();
152
+ if (resCount < 0 ) {
153
+ result = null ;
154
+ } else {
155
+ result = new UpdateDataResultSet <>(resCount );
156
+ }
157
+ }
158
+ }
159
+ } catch (SQLException ex ) {
160
+ LOGGER .log (System .Logger .Level .ERROR , "Exception while execute moreResult: " , ex );
161
+ throw new BasicException (ex );
162
+ }
163
+
164
+ return result ;
165
+ }
166
+
167
+ @ Override
168
+ public void closeExec () throws BasicException {
169
+ if (preparedStatement != null ) {
170
+ try {
171
+ preparedStatement .close ();
172
+ } catch (SQLException ex ) {
173
+ throw new BasicException (ex );
174
+ } finally {
175
+ preparedStatement = null ;
176
+ }
177
+ }
178
+ }
179
+
180
+ @ Override
181
+ public DataResultSet <T > openExec (Object params ) throws BasicException {
182
+ DataResultSet <T > result ;
183
+ LOGGER .log (System .Logger .Level .INFO , "SQL: " + sql );
184
+ try {
185
+ preparedStatement = session .getConnection ().prepareStatement (sql );
186
+ if (serwrite != null ) {
187
+ serwrite .writeValues (new PreparedSentenceDataWrite (preparedStatement ), params );
188
+ }
189
+ if (preparedStatement .execute ()) {
190
+ result = new JDBCDataResultSet <>(preparedStatement .getResultSet (), serread );
191
+ } else {
192
+ int resCount = preparedStatement .getUpdateCount ();
193
+ if (resCount < 0 ) {
194
+ result = null ;
195
+ } else {
196
+ result = new UpdateDataResultSet <>(resCount );
197
+ }
198
+ }
199
+ } catch (SQLException sqlex ) {
200
+ LOGGER .log (System .Logger .Level .WARNING , "Exception while execute openExec with SQL: " + sql , sqlex );
201
+ throw new BasicException (sqlex );
202
+ }
203
+
204
+ return result ;
205
+ }
206
+
125
207
private final static class PrepareStatementWriter {
126
208
127
209
private final Datas [] paramsDataType ;
0 commit comments