KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > versant > core > jdbc > metadata > JdbcTypes


1
2 /*
3  * Copyright (c) 1998 - 2005 Versant Corporation
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  * Versant Corporation - initial API and implementation
11  */

12 package com.versant.core.jdbc.metadata;
13
14 import com.versant.core.jdbc.sql.exp.LiteralExp;
15
16 import java.util.HashMap JavaDoc;
17 import java.sql.Types JavaDoc;
18
19 import com.versant.core.common.BindingSupportImpl;
20
21 /**
22  * Static utility methods for converting the constants in java.sql.Types
23  * to and from strings.
24  */

25 public class JdbcTypes {
26
27     // this maps the names of the type constants to Integer values
28
private static final HashMap JavaDoc TYPE_NAME_MAP = new HashMap JavaDoc();
29
30     static {
31         TYPE_NAME_MAP.put("BIT", new Integer JavaDoc(-7));
32         TYPE_NAME_MAP.put("TINYINT", new Integer JavaDoc(-6));
33         TYPE_NAME_MAP.put("SMALLINT", new Integer JavaDoc(5));
34         TYPE_NAME_MAP.put("INTEGER", new Integer JavaDoc(4));
35         TYPE_NAME_MAP.put("BIGINT", new Integer JavaDoc(-5));
36         TYPE_NAME_MAP.put("FLOAT", new Integer JavaDoc(6));
37         TYPE_NAME_MAP.put("REAL", new Integer JavaDoc(7));
38         TYPE_NAME_MAP.put("DOUBLE", new Integer JavaDoc(8));
39         TYPE_NAME_MAP.put("NUMERIC", new Integer JavaDoc(2));
40         TYPE_NAME_MAP.put("DECIMAL", new Integer JavaDoc(3));
41         TYPE_NAME_MAP.put("CHAR", new Integer JavaDoc(1));
42         TYPE_NAME_MAP.put("VARCHAR", new Integer JavaDoc(12));
43         TYPE_NAME_MAP.put("LONGVARCHAR", new Integer JavaDoc(-1));
44         TYPE_NAME_MAP.put("DATE", new Integer JavaDoc(91));
45         TYPE_NAME_MAP.put("TIME", new Integer JavaDoc(92));
46         TYPE_NAME_MAP.put("TIMESTAMP", new Integer JavaDoc(93));
47         TYPE_NAME_MAP.put("BINARY", new Integer JavaDoc(-2));
48         TYPE_NAME_MAP.put("VARBINARY", new Integer JavaDoc(-3));
49         TYPE_NAME_MAP.put("LONGVARBINARY", new Integer JavaDoc(-4));
50         TYPE_NAME_MAP.put("NULL", new Integer JavaDoc(0));
51         TYPE_NAME_MAP.put("OTHER", new Integer JavaDoc(1111));
52         TYPE_NAME_MAP.put("JAVA_OBJECT", new Integer JavaDoc(2000));
53         TYPE_NAME_MAP.put("DISTINCT", new Integer JavaDoc(2001));
54         TYPE_NAME_MAP.put("STRUCT", new Integer JavaDoc(2002));
55         TYPE_NAME_MAP.put("ARRAY", new Integer JavaDoc(2003));
56         TYPE_NAME_MAP.put("BLOB", new Integer JavaDoc(2004));
57         TYPE_NAME_MAP.put("CLOB", new Integer JavaDoc(2005));
58         TYPE_NAME_MAP.put("REF", new Integer JavaDoc(2006));
59     }
60
61     private JdbcTypes() { }
62
63     /**
64      * Convert s to a java.sql.Types constant value.
65      * @exception IllegalArgumentException if s is invalid
66      */

67     public static int parse(String JavaDoc s) throws IllegalArgumentException JavaDoc {
68         Integer JavaDoc i = (Integer JavaDoc)TYPE_NAME_MAP.get(s);
69         if (i == null) {
70             throw BindingSupportImpl.getInstance().illegalArgument("Invalid JDBC type: '" + s + "'");
71         }
72         return i.intValue();
73     }
74
75     /**
76      * Convert an int constant from java.sql.Types into the String name of
77      * the constant.
78      */

79     public static String JavaDoc toString(int type) throws IllegalArgumentException JavaDoc {
80         switch (type) {
81             case Types.BIT: return "BIT";
82             case Types.TINYINT: return "TINYINT";
83             case Types.SMALLINT: return "SMALLINT";
84             case Types.INTEGER: return "INTEGER";
85             case Types.BIGINT: return "BIGINT";
86             case Types.FLOAT: return "FLOAT";
87             case Types.REAL: return "REAL";
88             case Types.DOUBLE: return "DOUBLE";
89             case Types.NUMERIC: return "NUMERIC";
90             case Types.DECIMAL: return "DECIMAL";
91             case Types.CHAR: return "CHAR";
92             case Types.VARCHAR: return "VARCHAR";
93             case Types.LONGVARCHAR: return "LONGVARCHAR";
94             case Types.DATE: return "DATE";
95             case Types.TIME: return "TIME";
96             case Types.TIMESTAMP: return "TIMESTAMP";
97             case Types.BINARY: return "BINARY";
98             case Types.VARBINARY: return "VARBINARY";
99             case Types.LONGVARBINARY: return "LONGVARBINARY";
100             case Types.NULL: return "NULL";
101             case Types.OTHER: return "OTHER";
102             case Types.JAVA_OBJECT: return "JAVA_OBJECT";
103             case Types.DISTINCT: return "DISTINCT";
104             case Types.STRUCT: return "STRUCT";
105             case Types.ARRAY: return "ARRAY";
106             case Types.BLOB: return "BLOB";
107             case Types.CLOB: return "CLOB";
108             case Types.REF: return "REF";
109         }
110         throw BindingSupportImpl.getInstance().illegalArgument("Invalid JDBC type: " + type);
111     }
112
113     /**
114      * Return an indication of the cost of updating a jdbc type. Smaller values
115      * are quicker to update (e.g int, short etc) while blobs are very
116      * expensive.
117      */

118     public static int getUpdateCost(int jdbcType) {
119         switch (jdbcType) {
120             case Types.BIT: return 0;
121             case Types.TINYINT: return 1;
122             case Types.SMALLINT: return 2;
123             case Types.INTEGER: return 3;
124             case Types.BIGINT: return 4;
125             case Types.FLOAT: return 5;
126             case Types.REAL: return 6;
127             case Types.DOUBLE: return 7;
128             case Types.NUMERIC: return 8;
129             case Types.DECIMAL: return 9;
130             case Types.DATE: return 10;
131             case Types.TIME: return 11;
132             case Types.TIMESTAMP: return 12;
133             case Types.VARCHAR: return 13;
134             case Types.CHAR: return 14;
135             case Types.VARBINARY: return 15;
136             case Types.BINARY: return 16;
137             case Types.LONGVARCHAR: return 17;
138             case Types.LONGVARBINARY: return 18;
139             case Types.CLOB: return 19;
140             case Types.BLOB: return 20;
141             case Types.ARRAY: return 21;
142             case Types.REF: return 22;
143             case Types.JAVA_OBJECT: return 23;
144             case Types.OTHER: return 24;
145             case Types.STRUCT: return 25;
146             case Types.DISTINCT: return 26;
147             case Types.NULL: return 27;
148         }
149         throw BindingSupportImpl.getInstance().illegalArgument("Invalid JDBC type: " + jdbcType);
150     }
151
152     /**
153      * Get the type of SQL literal required to compare to a column of jdbcType.
154      * @see LiteralExp.TYPE_OTHER
155      * @see LiteralExp.TYPE_STRING
156      */

157     public static int getLiteralType(int jdbcType) {
158         switch (jdbcType) {
159             case Types.BIT:
160             case Types.TINYINT:
161             case Types.SMALLINT:
162             case Types.INTEGER:
163             case Types.BIGINT:
164             case Types.FLOAT:
165             case Types.REAL:
166             case Types.DOUBLE:
167             case Types.NUMERIC:
168             case Types.DECIMAL:
169                 return LiteralExp.TYPE_OTHER;
170         }
171         return LiteralExp.TYPE_STRING;
172     }
173
174 }
175
Popular Tags