diff options
author | Eike Stepper | 2007-08-15 10:21:47 +0000 |
---|---|---|
committer | Eike Stepper | 2007-08-15 10:21:47 +0000 |
commit | 76185a225a698cb986b0c15ce41e0c8d1f3ca20b (patch) | |
tree | 79b330c10293400044de11c24eeb2d59d620969f /plugins/org.eclipse.net4j.db | |
parent | 6434426a789a12a3aed34ea1ff37719fc14e69fc (diff) | |
download | cdo-76185a225a698cb986b0c15ce41e0c8d1f3ca20b.tar.gz cdo-76185a225a698cb986b0c15ce41e0c8d1f3ca20b.tar.xz cdo-76185a225a698cb986b0c15ce41e0c8d1f3ca20b.zip |
*** empty log message ***
Diffstat (limited to 'plugins/org.eclipse.net4j.db')
5 files changed, 144 insertions, 65 deletions
diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java index 5b9deacc56..0274b3fe33 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java @@ -12,6 +12,7 @@ package org.eclipse.net4j.db; import org.eclipse.net4j.internal.db.DBSchema; import org.eclipse.net4j.internal.db.bundle.OM; +import org.eclipse.net4j.internal.util.om.trace.ContextTracer; import org.eclipse.net4j.util.ReflectUtil; import javax.sql.DataSource; @@ -21,6 +22,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.util.Arrays; import java.util.Map; /** @@ -28,6 +30,8 @@ import java.util.Map; */ public final class DBUtil { + private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_SQL, DBUtil.class); + private DBUtil() { } @@ -124,22 +128,27 @@ public final class DBUtil builder.append(field.getTable()); String sql = builder.toString(); - Statement stmt = null; - ResultSet rs = null; + if (TRACER.isEnabled()) + { + TRACER.trace(sql); + } + + Statement statement = null; + ResultSet resultSet = null; try { - stmt = connection.createStatement(); + statement = connection.createStatement(); try { - rs = stmt.executeQuery(sql); - if (!rs.first()) + resultSet = statement.executeQuery(sql); + if (!resultSet.next()) { return 0; } - return rs.getInt(1); + return resultSet.getInt(1); } catch (SQLException ex) { @@ -147,7 +156,7 @@ public final class DBUtil } finally { - close(rs); + close(resultSet); } } catch (SQLException ex) @@ -156,16 +165,17 @@ public final class DBUtil } finally { - close(stmt); + close(statement); } } - public static void insertRow(Connection connection, IDBTable table, Object... args) throws DBException + public static void insert(Connection connection, IDBTable table, Object... args) throws DBException { IDBField[] fields = table.getFields(); if (fields.length != args.length) { - throw new IllegalArgumentException("fields.length != args.length"); + throw new IllegalArgumentException("Wrong number of args for " + table + ": " + Arrays.asList(args) + " --> " + + Arrays.asList(table.getFields())); } StringBuilder builder = new StringBuilder(); @@ -186,19 +196,40 @@ public final class DBUtil builder.append(")"); String sql = builder.toString(); - PreparedStatement stmt = null; + if (TRACER.isEnabled()) + { + builder = new StringBuilder(); + builder.append("INSERT INTO "); + builder.append(table); + builder.append(" VALUES ("); + + for (int i = 0; i < fields.length; i++) + { + if (i > 0) + { + builder.append(", "); + } + + builder.append(args[i]); + } + + builder.append(")"); + TRACER.trace(builder.toString()); + } + + PreparedStatement statement = null; try { - stmt = connection.prepareStatement(sql); + statement = connection.prepareStatement(sql); for (int i = 0; i < fields.length; i++) { IDBField field = fields[i]; - stmt.setObject(i, args[i], field.getType().getCode()); + statement.setObject(i + 1, args[i], field.getType().getCode()); } - stmt.execute(); - if (stmt.getUpdateCount() == 0) + statement.execute(); + if (statement.getUpdateCount() == 0) { throw new DBException("No row inserted into table " + table); } @@ -209,7 +240,7 @@ public final class DBUtil } finally { - close(stmt); + close(statement); } } } diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBField.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBField.java index df6281bfe2..44994ca37d 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBField.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/IDBField.java @@ -51,26 +51,45 @@ public interface IDBField DECIMAL(3), // CHAR(1), // VARCHAR(12), // - LONGVARCHAR(-1), // + LONGVARCHAR(-1, "LONG VARCHAR"), // DATE(91), // TIME(92), // TIMESTAMP(93), // BINARY(-2), // VARBINARY(-3), // - LONGVARBINARY(-4), // + LONGVARBINARY(-4, "LONG VARBINARY"), // BLOB(2004), // CLOB(2005); // private int code; - private Type(int code) + private String keyword; + + private Type(int code, String keyword) { this.code = code; + this.keyword = keyword; + } + + private Type(int code) + { + this(code, null); } public int getCode() { return code; } + + public String getKeyword() + { + return keyword == null ? super.toString() : keyword; + } + + @Override + public String toString() + { + return getKeyword(); + } } } diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBAdapter.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBAdapter.java index 647a0af970..dbcb729fb8 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBAdapter.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBAdapter.java @@ -13,6 +13,8 @@ package org.eclipse.net4j.internal.db; import org.eclipse.net4j.db.DBException; import org.eclipse.net4j.db.IDBAdapter; import org.eclipse.net4j.db.IDBField.Type; +import org.eclipse.net4j.internal.db.bundle.OM; +import org.eclipse.net4j.internal.util.om.trace.ContextTracer; import java.sql.ResultSet; import java.sql.ResultSetMetaData; @@ -24,6 +26,8 @@ import java.sql.Statement; */ public abstract class DBAdapter implements IDBAdapter { + private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_SQL, DBAdapter.class); + private String name; private String version; @@ -52,7 +56,10 @@ public abstract class DBAdapter implements IDBAdapter } catch (SQLException ex) { - System.out.println(ex.getMessage()); + if (TRACER.isEnabled()) + { + TRACER.trace(ex.getMessage()); + } } validateTable(table, statement); @@ -80,7 +87,11 @@ public abstract class DBAdapter implements IDBAdapter builder.append(")"); String sql = builder.toString(); - System.out.println(sql); + if (TRACER.isEnabled()) + { + TRACER.trace(sql); + } + statement.execute(sql); } @@ -111,16 +122,16 @@ public abstract class DBAdapter implements IDBAdapter case DATE: case TIME: case TIMESTAMP: + case LONGVARCHAR: + case LONGVARBINARY: case BLOB: case CLOB: return type.toString(); case CHAR: case VARCHAR: - case LONGVARCHAR: case BINARY: case VARBINARY: - case LONGVARBINARY: return type.toString() + field.formatPrecision(); case NUMERIC: @@ -151,17 +162,18 @@ public abstract class DBAdapter implements IDBAdapter + table.getFieldCount()); } - for (int i = 0; i < columnCount; i++) - { - int existingCode = metaData.getColumnType(i + 1); - DBField field = table.getField(i); - int code = field.getType().getCode(); - if (code != existingCode) - { - throw new DBException("DBField " + field.getFullName() + " has type " + existingCode + " instead of " + code - + " (" + field.getType() + ")"); - } - } + // for (int i = 0; i < columnCount; i++) + // { + // int existingCode = metaData.getColumnType(i + 1); + // DBField field = table.getField(i); + // int code = field.getType().getCode(); + // if (code != existingCode) + // { + // throw new DBException("DBField " + field.getFullName() + " has type " + + // existingCode + " instead of " + code + // + " (" + field.getType() + ")"); + // } + // } } catch (SQLException ex) { diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBSchema.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBSchema.java index 5ecabe3c60..9d94722c53 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBSchema.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/DBSchema.java @@ -11,6 +11,7 @@ package org.eclipse.net4j.internal.db; import org.eclipse.net4j.db.DBException; +import org.eclipse.net4j.db.DBUtil; import org.eclipse.net4j.db.IDBAdapter; import org.eclipse.net4j.db.IDBSchema; @@ -78,10 +79,12 @@ public class DBSchema implements IDBSchema public void create(IDBAdapter dbAdapter, DataSource dataSource) { + Connection connection = null; + Statement statement = null; try { - Connection connection = dataSource.getConnection(); - Statement statement = connection.createStatement(); + connection = dataSource.getConnection(); + statement = connection.createStatement(); for (DBTable table : tables.values()) { dbAdapter.createTable(table, statement); @@ -91,6 +94,11 @@ public class DBSchema implements IDBSchema { throw new DBException(ex); } + finally + { + DBUtil.close(statement); + DBUtil.close(connection); + } } @Override diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/bundle/OM.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/bundle/OM.java index 5b935718be..10703a8e9a 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/bundle/OM.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/bundle/OM.java @@ -24,6 +24,8 @@ import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.Platform; +import org.osgi.framework.BundleContext; + /** * @author Eike Stepper */ @@ -41,44 +43,51 @@ public abstract class OM public static final String EXT_POINT = "dbAdapters"; - static void start() throws Exception + /** + * @author Eike Stepper + */ + public static final class Activator extends OSGiActivator { - IExtensionRegistry registry = Platform.getExtensionRegistry(); - IConfigurationElement[] elements = registry.getConfigurationElementsFor(BUNDLE_ID, EXT_POINT); - for (final IConfigurationElement element : elements) + public Activator() + { + super(BUNDLE); + } + + @Override + public void start(BundleContext context) throws Exception + { + super.start(context); + initAdapterRegistry(); + } + + private void initAdapterRegistry() { - if ("dbAdapter".equals(element.getName())) + IExtensionRegistry registry = Platform.getExtensionRegistry(); + IConfigurationElement[] elements = registry.getConfigurationElementsFor(BUNDLE_ID, EXT_POINT); + for (final IConfigurationElement element : elements) { - DBAdapterDescriptor descriptor = new DBAdapterDescriptor(element.getAttribute("name")) + if ("dbAdapter".equals(element.getName())) { - @Override - public IDBAdapter createDBAdapter() + DBAdapterDescriptor descriptor = new DBAdapterDescriptor(element.getAttribute("name")) { - try + @Override + public IDBAdapter createDBAdapter() { - return (IDBAdapter)element.createExecutableExtension("class"); + try + { + return (IDBAdapter)element.createExecutableExtension("class"); + } + catch (CoreException ex) + { + OM.LOG.error(ex); + return null; + } } - catch (CoreException ex) - { - OM.LOG.error(ex); - return null; - } - } - }; + }; - DBAdapterRegistry.INSTANCE.addDescriptor(descriptor); + DBAdapterRegistry.INSTANCE.addDescriptor(descriptor); + } } } } - - /** - * @author Eike Stepper - */ - public static final class Activator extends OSGiActivator - { - public Activator() - { - super(BUNDLE); - } - } } |