Skip to content

Commit 8ffdd40

Browse files
committed
Base: JDBC Prepared Statement,
* Added EXPERIMENTAL Support for HSQLDB (Need definition on Liquidbase) * generic Sequence Table
1 parent 9a8c9cf commit 8ffdd40

File tree

4 files changed

+122
-34
lines changed

4 files changed

+122
-34
lines changed

kriolos-opos-base/src/main/java/com/openbravo/data/loader/PreparedSentence.java

+10-6
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@
1818
/**
1919
*
2020
* @author adrianromero
21+
* @param <W>
22+
* @param <T>
2123
*/
22-
public class PreparedSentence<W, T> extends StaticSentence<W, T> {
24+
public class PreparedSentence<W, T> extends PreparedSentenceExec<W, T> {
2325

26+
/*
2427
public PreparedSentence(Session s, ISQLBuilderStatic sentence, SerializerWrite<W> serwrite, SerializerRead<T> serread) {
2528
super(s, sentence, serwrite, serread);
2629
}
@@ -32,6 +35,7 @@ public PreparedSentence(Session s, ISQLBuilderStatic sentence) {
3235
public PreparedSentence(Session s, ISQLBuilderStatic sentence, SerializerWrite<W> serwrite) {
3336
this(s, sentence, serwrite, null);
3437
}
38+
3539
3640
public PreparedSentence(Session s, String sentence, SerializerWrite<W> serwrite, SerializerRead<T> serread) {
3741
this(s, new NormalBuilder(sentence), serwrite, serread);
@@ -44,10 +48,10 @@ public PreparedSentence(Session s, String sentence, SerializerWrite<W> serwrite)
4448
public PreparedSentence(Session s, String sentence) {
4549
this(s, new NormalBuilder(sentence), null, null);
4650
}
47-
48-
/*
49-
public PreparedSentence(Session s, String sentence) {
50-
super(s, sentence);
51+
*/
52+
/* */
53+
public PreparedSentence(Session session, String sqlSentence, Datas[] param, int[] index) {
54+
super( session, sqlSentence, param, index);
5155
}
5256

5357
public PreparedSentence(Session s, String sentence, SerializerWrite<W> serwrite) {
@@ -57,5 +61,5 @@ public PreparedSentence(Session s, String sentence, SerializerWrite<W> serwrite)
5761
public PreparedSentence(Session s, String sentence, SerializerWrite<W> serwrite, SerializerRead<T> serread) {
5862
super(s, sentence, serwrite, serread);
5963
}
60-
*/
64+
6165
}

kriolos-opos-base/src/main/java/com/openbravo/data/loader/PreparedSentenceExec.java

+96-14
Original file line numberDiff line numberDiff line change
@@ -29,35 +29,52 @@
2929
*
3030
* @author pauloborges
3131
*/
32-
public final class PreparedSentenceExec implements SentenceExec {
32+
public class PreparedSentenceExec<W extends Object, T> extends JDBCBaseSentence<T> {
3333

3434
protected final static System.Logger LOGGER = System.getLogger(PreparedSentenceExec.class.getName());
3535

36-
private final Session session;
3736
private final String sql;
3837
//private PrepareStatementWriter preBuilder;
3938
private final SerializerWrite serwrite;
39+
private final SerializerRead<T> serread;
40+
private PreparedStatement preparedStatement;
4041

4142
public PreparedSentenceExec(Session session, String sqlSentence, Datas[] param, int[] index) {
42-
this.session = session;
43+
super(session);
4344
this.sql = sqlSentence;
44-
//this.preBuilder = new PrepareStatementWriter(param, index);
4545
serwrite = new SerializerWriteBasicExt(param, index);
46+
serread = null;
4647
}
47-
48+
4849
public PreparedSentenceExec(Session session, String sqlSentence, SerializerWrite serwrite) {
49-
this.session = session;
50+
super(session);
5051
this.sql = sqlSentence;
5152
//this.preBuilder = new PrepareStatementWriter(param, index);
5253
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;
5371
}
5472

5573
/**
5674
*
5775
* @return @throws BasicException
5876
*/
59-
@Override
60-
public int exec() throws BasicException {
77+
private int exec1() throws BasicException {
6178
int rowsAffected = 0;
6279
try (PreparedStatement preparedStatement = session.getConnection().prepareStatement(sql)) {
6380
rowsAffected = preparedStatement.executeUpdate();
@@ -78,17 +95,17 @@ public int exec() throws BasicException {
7895
* @return
7996
* @throws BasicException
8097
*/
81-
@Override
82-
public int exec(Object param) throws BasicException {
98+
private int exec2(Object param) throws BasicException {
8399
int rowsAffected = 0;
84100

85101
if (param instanceof Object[]) {
86102
rowsAffected = exec((Object[]) param);
87103
} else {
88104
try (PreparedStatement preparedStatement = session.getConnection().prepareStatement(sql)) {
89105
//preBuilder.prepare(preparedStatement, param);
90-
91-
serwrite.writeValues(new PreparedSentenceDataWrite(preparedStatement), param);
106+
if (serwrite != null) {
107+
serwrite.writeValues(new PreparedSentenceDataWrite(preparedStatement), param);
108+
}
92109

93110
rowsAffected = preparedStatement.executeUpdate();
94111
} catch (SQLException sqlex) {
@@ -111,8 +128,9 @@ private int exec(Object[] params) throws BasicException {
111128

112129
LOGGER.log(System.Logger.Level.INFO, "SQL: " + sql);
113130
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+
}
116134
rowsAffected = preparedStatement.executeUpdate();
117135
} catch (SQLException sqlex) {
118136
LOGGER.log(System.Logger.Level.WARNING, "Exception while execute SQL: " + sql, sqlex);
@@ -122,6 +140,70 @@ private int exec(Object[] params) throws BasicException {
122140
return rowsAffected;
123141
}
124142

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+
125207
private final static class PrepareStatementWriter {
126208

127209
private final Datas[] paramsDataType;

kriolos-opos-base/src/main/java/com/openbravo/data/loader/SequenceForGeneric.java

+11-12
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public SequenceForGeneric(Session session, String tableName) {
4444
session,
4545
"UPDATE seqnumber SET seqnum = ? WHERE tablename = ?",
4646
new SerializerWriteBasicExt(
47-
new Datas[]{Datas.STRING, Datas.STRING},
47+
new Datas[]{Datas.INT, Datas.STRING},
4848
new int[]{0, 1}));
4949
}
5050

@@ -55,23 +55,23 @@ public SequenceForGeneric(Session session, String tableName) {
5555
* @throws BasicException
5656
*/
5757
@Override
58-
public DataResultSet openExec(Object params) throws BasicException {
58+
public DataResultSet<Integer> openExec(Object params) throws BasicException {
5959

6060
Integer dt = (Integer) selectSetence.find(new Object[]{this.tableName});
6161

62-
Logger.getLogger(SequenceForGeneric.class.getName()).log(Level.INFO, "FOUND SEQUENCE: ", dt);
62+
LOGGER.log(Level.INFO, "FOUND SEQUENCE: "+this.tableName +"; seq: "+ dt);
6363

6464
if (dt == null) {
6565
dt = insert(1);
6666
}
6767

68-
Logger.getLogger(SequenceForGeneric.class.getName()).log(Level.INFO, "CURRENT SEQUENCE: ", dt);
68+
LOGGER.log(Level.INFO, "CURRENT SEQUENCE: "+this.tableName +"; seq: "+ dt);
69+
dt +=1;
6970

70-
updateSentence.exec(new Object[]{this.tableName});
71+
updateSentence.exec(new Object[]{dt+1, this.tableName});
7172

72-
DataResultSet drs = selectSetence.openExec(new Object[]{this.tableName});
73-
74-
Logger.getLogger(SequenceForGeneric.class.getName()).log(Level.INFO, "RESULT SEQUENCE: ", drs);
73+
DataResultSet<Integer> drs = selectSetence.openExec(new Object[]{this.tableName});
74+
LOGGER.log(Level.INFO, "RESULT SEQUENCE: "+this.tableName +"; seq: "+ dt);
7575

7676
return drs;
7777
}
@@ -91,18 +91,17 @@ public SentenceExec reset() {
9191

9292
try {
9393
openExec(null);
94-
//Force to Insert Sequence (0) for a tableName
95-
94+
return selectSetence;
9695
} catch (Exception ex) {
97-
Logger.getLogger(SequenceForGeneric.class.getName()).log(Level.SEVERE, null, ex);
96+
LOGGER.log(Level.SEVERE, "Exception execute reset", ex);
9897
}
9998

10099
return null;
101100
}
102101

103102
private int insert(int num) throws BasicException {
104103

105-
Logger.getLogger(SequenceForGeneric.class.getName()).log(Level.INFO, "INSERT SEQUENCE: ", num);
104+
LOGGER.log(Level.INFO, "INSERT SEQUENCE: "+this.tableName +"; seq: "+ num);
106105
var ins = new PreparedSentence(session, "INSERT INTO seqnumber (tablename, seqnum) VALUES(?, ?)", new SerializerWriteBasicExt(
107106
new Datas[]{Datas.STRING, Datas.INT},
108107
new int[]{0, 1}));

kriolos-opos-base/src/main/java/com/openbravo/data/loader/SessionDBHSQLDB.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ public String getName() {
7575
*/
7676
@Override
7777
public SentenceFind getSequenceSentence(Session s, String sequence) {
78-
return new StaticSentence(s, "CALL NEXT VALUE FOR " + sequence, null, SerializerReadInteger.INSTANCE);
78+
return new SequenceForGeneric(s, sequence);
79+
//return new StaticSentence(s, "CALL NEXT VALUE FOR " + sequence, null, SerializerReadInteger.INSTANCE);
7980
}
8081

8182
/**
@@ -86,6 +87,8 @@ public SentenceFind getSequenceSentence(Session s, String sequence) {
8687
*/
8788
@Override
8889
public SentenceExec resetSequenceSentence(Session s, String sequence) {
89-
return new StaticSentence(s, "CALL NEXT VALUE FOR " + sequence, null, SerializerReadInteger.INSTANCE);
90+
SequenceForGeneric seqGeneric = new SequenceForGeneric(s, sequence);
91+
return seqGeneric.reset();
92+
//return new StaticSentence(s, "CALL NEXT VALUE FOR " + sequence, null, SerializerReadInteger.INSTANCE);
9093
}
9194
}

0 commit comments

Comments
 (0)