KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > h2 > test > jdbc > TestStatement


1 /*
2  * Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
3  * Initial Developer: H2 Group
4  */

5 package org.h2.test.jdbc;
6
7 import java.sql.Connection JavaDoc;
8 import java.sql.ResultSet JavaDoc;
9 import java.sql.SQLException JavaDoc;
10 import java.sql.Savepoint JavaDoc;
11 import java.sql.Statement JavaDoc;
12
13 import org.h2.test.TestBase;
14
15 public class TestStatement extends TestBase {
16     
17     Connection JavaDoc conn;
18
19     public void test() throws Exception JavaDoc {
20         deleteDb("statement");
21         conn = getConnection("statement");
22         if(config.jdk14) {
23             testSavepoint();
24         }
25         testStatement();
26         if(config.jdk14) {
27             testIdentity();
28         }
29         conn.close();
30     }
31
32     void testSavepoint() throws Exception JavaDoc {
33         Statement JavaDoc stat=conn.createStatement();
34         stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255))");
35         conn.setAutoCommit(false);
36         stat.execute("INSERT INTO TEST VALUES(0, 'Hi')");
37         Savepoint JavaDoc savepoint1 = conn.setSavepoint();
38         int id1 = savepoint1.getSavepointId();
39         try {
40             savepoint1.getSavepointName();
41             error("exception expected");
42         } catch(SQLException JavaDoc e) {
43             checkNotGeneralException(e);
44         }
45         stat.execute("DELETE FROM TEST");
46         conn.rollback(savepoint1);
47         stat.execute("UPDATE TEST SET NAME='Hello'");
48         Savepoint JavaDoc savepoint2a = conn.setSavepoint();
49         Savepoint JavaDoc savepoint2 = conn.setSavepoint();
50         conn.releaseSavepoint(savepoint2a);
51         try {
52             savepoint2a.getSavepointId();
53             error("exception expected");
54         } catch(SQLException JavaDoc e) {
55             checkNotGeneralException(e);
56         }
57         int id2 = savepoint2.getSavepointId();
58         check(id1 != id2);
59         stat.execute("UPDATE TEST SET NAME='Hallo' WHERE NAME='Hello'");
60         Savepoint JavaDoc savepointTest = conn.setSavepoint("Joe's");
61         stat.execute("DELETE FROM TEST");
62         check(savepointTest.getSavepointName(), "Joe's");
63         try {
64             savepointTest.getSavepointId();
65             error("exception expected");
66         } catch(SQLException JavaDoc e) {
67             checkNotGeneralException(e);
68         }
69         conn.rollback(savepointTest);
70         conn.commit();
71         ResultSet JavaDoc rs = stat.executeQuery("SELECT NAME FROM TEST");
72         rs.next();
73         String JavaDoc name = rs.getString(1);
74         check(name, "Hallo");
75         checkFalse(rs.next());
76         try {
77             conn.rollback(savepoint2);
78             error("exception expected");
79         } catch(SQLException JavaDoc e) {
80             checkNotGeneralException(e);
81         }
82         stat.execute("DROP TABLE TEST");
83         conn.setAutoCommit(true);
84     }
85     
86     void testStatement() throws Exception JavaDoc {
87         
88         Statement JavaDoc stat=conn.createStatement();
89         ResultSet JavaDoc rs;
90         int count;
91         boolean result;
92         
93         stat.execute("CREATE TABLE TEST(ID INT)");
94         stat.execute("SELECT * FROM TEST");
95         stat.execute("DROP TABLE TEST");
96         
97         conn.getTypeMap();
98         
99         // this method should not throw an exception - if not supported, this calls are ignored
100

101         if(config.jdk14) {
102             check(stat.getResultSetHoldability(), ResultSet.HOLD_CURSORS_OVER_COMMIT);
103         }
104         check(stat.getResultSetConcurrency(), ResultSet.CONCUR_UPDATABLE);
105         
106         stat.cancel();
107         stat.setQueryTimeout(10);
108         check(stat.getQueryTimeout()==10);
109         stat.setQueryTimeout(0);
110         check(stat.getQueryTimeout()==0);
111         // this is supposed to throw an exception
112
try {
113             stat.setQueryTimeout(-1);
114             error("setQueryTimeout(-1) didn't throw an exception");
115         } catch(SQLException JavaDoc e) {
116             checkNotGeneralException(e);
117         }
118         check(stat.getQueryTimeout()==0);
119         trace("executeUpdate");
120         count=stat.executeUpdate("CREATE TABLE TEST(ID INT PRIMARY KEY,VALUE VARCHAR(255))");
121         check(count,0);
122         count=stat.executeUpdate("INSERT INTO TEST VALUES(1,'Hello')");
123         check(count,1);
124         count=stat.executeUpdate("INSERT INTO TEST(VALUE,ID) VALUES('JDBC',2)");
125         check(count,1);
126         count=stat.executeUpdate("UPDATE TEST SET VALUE='LDBC' WHERE ID=2 OR ID=1");
127         check(count,2);
128         count=stat.executeUpdate("UPDATE TEST SET VALUE='\\LDBC\\' WHERE VALUE LIKE 'LDBC' ");
129         check(count,2);
130         count=stat.executeUpdate("UPDATE TEST SET VALUE='LDBC' WHERE VALUE LIKE '\\\\LDBC\\\\'");
131         trace("count:"+count);
132         check(count,2);
133         count=stat.executeUpdate("DELETE FROM TEST WHERE ID=-1");
134         check(count,0);
135         count=stat.executeUpdate("DELETE FROM TEST WHERE ID=2");
136         check(count,1);
137         try {
138             stat.executeUpdate("SELECT * FROM TEST");
139             error("executeUpdate allowed SELECT");
140         } catch(SQLException JavaDoc e) {
141             checkNotGeneralException(e);
142             trace("no error - SELECT not allowed with executeUpdate");
143         }
144         count=stat.executeUpdate("DROP TABLE TEST");
145         check(count==0);
146         
147         trace("execute");
148         result=stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY,VALUE VARCHAR(255))");
149         check(result==false);
150         result=stat.execute("INSERT INTO TEST VALUES(1,'Hello')");
151         check(result==false);
152         result=stat.execute("INSERT INTO TEST(VALUE,ID) VALUES('JDBC',2)");
153         check(result==false);
154         result=stat.execute("UPDATE TEST SET VALUE='LDBC' WHERE ID=2");
155         check(result==false);
156         result=stat.execute("DELETE FROM TEST WHERE ID=3");
157         check(result==false);
158         result=stat.execute("SELECT * FROM TEST");
159         check(result==true);
160         result=stat.execute("DROP TABLE TEST");
161         check(result==false);
162         
163         trace("executeQuery");
164         try {
165             stat.executeQuery("CREATE TABLE TEST(ID INT PRIMARY KEY,VALUE VARCHAR(255))");
166             error("executeQuery allowed CREATE TABLE");
167         } catch(SQLException JavaDoc e) {
168             checkNotGeneralException(e);
169             trace("no error - CREATE not allowed with executeQuery");
170         }
171         stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY,VALUE VARCHAR(255))");
172         try {
173             stat.executeQuery("INSERT INTO TEST VALUES(1,'Hello')");
174             error("executeQuery allowed INSERT");
175         } catch(SQLException JavaDoc e) {
176             checkNotGeneralException(e);
177             trace("no error - INSERT not allowed with executeQuery");
178         }
179         try {
180             stat.executeQuery("UPDATE TEST SET VALUE='LDBC' WHERE ID=2");
181             error("executeQuery allowed UPDATE");
182         } catch(SQLException JavaDoc e) {
183             checkNotGeneralException(e);
184             trace("no error - UPDATE not allowed with executeQuery");
185         }
186         try {
187             stat.executeQuery("DELETE FROM TEST WHERE ID=3");
188             error("executeQuery allowed DELETE");
189         } catch(SQLException JavaDoc e) {
190             checkNotGeneralException(e);
191             trace("no error - DELETE not allowed with executeQuery");
192         }
193         stat.executeQuery("SELECT * FROM TEST");
194         try {
195             stat.executeQuery("DROP TABLE TEST");
196             error("executeQuery allowed DROP");
197         } catch(SQLException JavaDoc e) {
198             checkNotGeneralException(e);
199             trace("no error - DROP not allowed with executeQuery");
200         }
201         // getMoreResults
202
rs=stat.executeQuery("SELECT * FROM TEST");
203         checkFalse(stat.getMoreResults());
204         try {
205             // supposed to be closed now
206
rs.next();
207             error("getMoreResults didn't close this result set");
208         } catch(SQLException JavaDoc e) {
209             checkNotGeneralException(e);
210             trace("no error - getMoreResults is supposed to close the result set");
211         }
212         check(stat.getUpdateCount()==-1);
213         count=stat.executeUpdate("DELETE FROM TEST");
214         checkFalse(stat.getMoreResults());
215         check(stat.getUpdateCount()==-1);
216         
217         stat.execute("DROP TABLE TEST");
218         stat.executeUpdate("DROP TABLE IF EXISTS TEST");
219         
220         check(stat.getWarnings()==null);
221         stat.clearWarnings();
222         check(stat.getWarnings()==null);
223         check(conn==stat.getConnection());
224         
225         stat.close();
226     }
227     
228     private void testIdentity() throws Exception JavaDoc {
229         Statement JavaDoc stat = conn.createStatement();
230         stat.execute("CREATE SEQUENCE SEQ");
231         stat.execute("CREATE TABLE TEST(ID INT)");
232         stat.execute("INSERT INTO TEST VALUES(NEXT VALUE FOR SEQ)");
233         ResultSet JavaDoc rs = stat.getGeneratedKeys();
234         rs.next();
235         check(rs.getInt(1), 1);
236         checkFalse(rs.next());
237         stat.execute("INSERT INTO TEST VALUES(NEXT VALUE FOR SEQ)", Statement.RETURN_GENERATED_KEYS);
238         rs = stat.getGeneratedKeys();
239         rs.next();
240         check(rs.getInt(1), 2);
241         checkFalse(rs.next());
242         stat.execute("INSERT INTO TEST VALUES(NEXT VALUE FOR SEQ)", new int[]{1});
243         rs = stat.getGeneratedKeys();
244         rs.next();
245         check(rs.getInt(1), 3);
246         checkFalse(rs.next());
247         stat.execute("INSERT INTO TEST VALUES(NEXT VALUE FOR SEQ)", new String JavaDoc[]{"ID"});
248         rs = stat.getGeneratedKeys();
249         rs.next();
250         check(rs.getInt(1), 4);
251         checkFalse(rs.next());
252         stat.executeUpdate("INSERT INTO TEST VALUES(NEXT VALUE FOR SEQ)", Statement.RETURN_GENERATED_KEYS);
253         rs = stat.getGeneratedKeys();
254         rs.next();
255         check(rs.getInt(1), 5);
256         checkFalse(rs.next());
257         stat.executeUpdate("INSERT INTO TEST VALUES(NEXT VALUE FOR SEQ)", new int[]{1});
258         rs = stat.getGeneratedKeys();
259         rs.next();
260         check(rs.getInt(1), 6);
261         checkFalse(rs.next());
262         stat.executeUpdate("INSERT INTO TEST VALUES(NEXT VALUE FOR SEQ)", new String JavaDoc[]{"ID"});
263         rs = stat.getGeneratedKeys();
264         rs.next();
265         check(rs.getInt(1), 7);
266         checkFalse(rs.next());
267         stat.execute("DROP TABLE TEST");
268     }
269
270 }
271
Popular Tags