KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openlaszlo > iv > flash > url > JDBCUrl


1 /*
2  * $Id: JDBCUrl.java,v 1.3 2002/02/24 02:10:19 skavish Exp $
3  *
4  * ==========================================================================
5  *
6  * The JGenerator Software License, Version 1.0
7  *
8  * Copyright (c) 2000 Dmitry Skavish (skavish@usa.net). All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if
22  * any, must include the following acknowlegement:
23  * "This product includes software developed by Dmitry Skavish
24  * (skavish@usa.net, http://www.flashgap.com/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The name "The JGenerator" must not be used to endorse or promote
29  * products derived from this software without prior written permission.
30  * For written permission, please contact skavish@usa.net.
31  *
32  * 5. Products derived from this software may not be called "The JGenerator"
33  * nor may "The JGenerator" appear in their names without prior written
34  * permission of Dmitry Skavish.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL DMITRY SKAVISH OR THE OTHER
40  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  *
49  */

50
51 package org.openlaszlo.iv.flash.url;
52
53 import java.io.*;
54 import java.util.*;
55 import java.net.*;
56 import java.sql.*;
57 import org.openlaszlo.iv.flash.util.*;
58 import org.openlaszlo.iv.flash.api.*;
59
60 /**
61  * Implementation of fgjdbc:// url
62  * <P>
63  * Syntax is: fgjdbc:///?driver=org.gjt.mm.mysql.Driver&url=jdbc:mysql://domen:3306/dbName&
64  * userid=username&password=password&query=select columnName from Table
65  * <p>
66  * The other parameters are (not supported now):
67  * <UL>
68  * <LI>lock
69  * <LI>cache
70  * <LI>share
71  * <LI>timeout
72  * </UL>
73  *
74  * @author Dmitry Skavish
75  */

76 public class JDBCUrl extends IVUrl {
77
78     private String JavaDoc driver;
79     private String JavaDoc url;
80     private String JavaDoc userid;
81     private String JavaDoc password;
82     private String JavaDoc query;
83     /*private String lock;
84       private String cache;
85       private String share;
86       private String timeout;
87     */

88
89     public JDBCUrl( String JavaDoc surl ) throws IVException {
90         parse( surl );
91         driver = getParameter("driver");
92         url = getParameter("url");
93         userid = getParameter("userid");
94         password = getParameter("password");
95         query = getParameter("query");
96         /* lock = getParameter("lock");
97             cache = getParameter("cache");
98             share = getParameter("share");
99             timeout = getParameter("timeout");
100         */

101         if( driver == null || url == null || query == null ) {
102             throw new IVException(Resource.INVALURL, new Object JavaDoc[] {surl});
103         }
104     }
105
106     public String JavaDoc getName() {
107         return url+"@"+userid+"/"+query;
108     }
109
110     public InputStream getInputStream() throws IOException {
111         return arrayToStream(getData(false));
112     }
113
114     public boolean hasDataReady() {
115         return true;
116     }
117
118     public String JavaDoc[][] getData() throws IOException {
119         return getData(true);
120     }
121
122     private String JavaDoc[][] getData( boolean processEscapes ) throws IOException {
123         try {
124             Class.forName(driver);
125         } catch( Exception JavaDoc e ) {
126             throw new IOException("driver not found");
127         }
128
129         String JavaDoc[][] data = null;
130
131         Connection conn = null;
132         try {
133             Log.logRB(Resource.SQLQUERY, new Object JavaDoc[] {driver, url, userid, password, query});
134             if( userid == null ) {
135                 conn = DriverManager.getConnection(url);
136             } else {
137                 conn = DriverManager.getConnection(url, userid, password);
138             }
139             Statement stmt = conn.createStatement();
140
141             ResultSet rs = stmt.executeQuery(query);
142             ResultSetMetaData meta = rs.getMetaData();
143
144             int numCols = meta.getColumnCount();
145             String JavaDoc[] header = new String JavaDoc[numCols];
146             for( int i=0; i<numCols; i++ ) {
147                 header[i] = meta.getColumnLabel(i+1);
148             }
149
150             IVVector lines = new IVVector();
151             while( rs.next() ) {
152                 String JavaDoc[] line = new String JavaDoc[numCols];
153                 for( int i=0; i<numCols; i++ ) {
154                     Object JavaDoc o = rs.getObject(i+1);
155                     String JavaDoc s = res2string(o);
156                     line[i] = processEscapes? Util.processEscapes(s): s;
157                 }
158                 lines.addElement(line);
159             }
160
161             data = new String JavaDoc[lines.size()+1][];
162             data[0] = header;
163             for( int i=0; i<lines.size(); i++ ) {
164                 data[i+1] = (String JavaDoc[]) lines.elementAt(i);
165             }
166
167             return data;
168         } catch( Exception JavaDoc e ) {
169             throw new IOException( e.getMessage() );
170         } finally {
171             try {
172                 if( conn != null )
173                     conn.close();
174             } catch( SQLException ee ) {
175                 throw new IOException(ee.getMessage());
176             }
177         }
178     }
179
180     private String JavaDoc res2string( Object JavaDoc o ) {
181         if( o == null ) return "";
182         if( o instanceof byte[] ) return new String JavaDoc((byte[])o);
183         return o.toString();
184     }
185 }
186
Popular Tags