1

I have 2 different databases one is MYSQL other is Oracle.Each have 1 table with different name and different columns name.Now I have to perform some db opeartions on each db from a single java application.Suppose for MYSQL db I have Emp table with columns Id,Name,Dept and for Oracle db I have Student table with StudentName and StudentDept.Now without changing code how can I manage 2 dbs?If I mention all db connection related data(connection url,username,password) in a properties file but to execute query I have to mention table name and column name in code.How can I manage it dynamically without altering the code so that in future any new db with different table name and column name is added I can only add the new one in properties file and no need to touch the code.Please suggest.

3
  • can you please do some reasearch on JPA. Commented Aug 13, 2015 at 13:49
  • The 'Without changing code' line is intriguing... I suspect some wizardry must be required, like Wizard wizard = new Wizard().getGandalfsInstance(); . Commented Aug 13, 2015 at 13:52
  • Take a look at the methods in DatabaseMetaData Commented Aug 13, 2015 at 13:57

1 Answer 1

1

This might not be the prettiest, but one way to do this:

  1. On application launch, parse properties files to get all DB connections. Store these however you want...List of connection pools, list of single connections, list of connection strings, etc...it doesn't matter.
  2. Run a predefined stored procedure or select query to retrieve all table names from each database found in step 1. In sybase you can do this with

    select name from sysobjects where type = 'U'

  3. Build a Map where the key is the table name and the value is either the DB name, connection, connection string, or whatever you are using to manage your DB connections from the result set of #2. Anything that can be passed to your DB connection manager to identify which database it should connect to will work as the value.

  4. In code, when table name is passed, lookup the required DB in the map
  5. Execute query on returned DB Info in the map you created in step 3

As long as the tables are distinct in each DB this will work. Once this is setup, new DBs can be added to the properties file and the cache can be refreshed with an application restart. However, if new tables/columns are being sent to the code, how are these being passed without any code change?

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.