Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if a table or a column exists in a database?

I am trying to make simple java code that will check if a table and/or a column exists in a MySQL DB. Should I use Java code to do the checking or make a SQL query string and execute that to do the checking ?

EDIT-

@ aleroot -

I tried using your code as shown below. I don't see any tables or columns when I run the code below. I only see this-

Driver Loaded.
Got Connection.

My DB has got a lot of DB's, tables and columns. I dont know why this program works properly.

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

    public class Tester {
  static Connection conn;
  static Statement st;
  public static void main(String[] args) throws Exception {
    try {
  // Step 1: Load the JDBC driver.
  System.out.println("Driver Loaded.");
  // Step 2: Establish the connection to the database.
  String url = "jdbc:mysql://localhost:3306/";

  conn = DriverManager.getConnection(url, "cowboy", "123456");
  System.out.println("Got Connection.");

  st = conn.createStatement();
} catch (Exception e) {
  System.err.println("Got an exception! ");
  e.printStackTrace();
  System.exit(0);
}

DatabaseMetaData md2 = conn.getMetaData();
ResultSet rsTables = md2.getColumns(null, null, "customers", "name");
 if (rsTables.next()) {
      System.out.println("Exists !");
    }
  }

}
like image 443
sweet dreams Avatar asked Jul 28 '12 07:07

sweet dreams


2 Answers

To check if a table exist you can use DatabaseMetaData in this way :

DatabaseMetaData md = connection.getMetaData();
ResultSet rs = md.getTables(null, null, "table_name", null);
if (rs.next()) {
  //Table Exist
}

And to check if a column exist you can use it in a similar way :

DatabaseMetaData md = connection.getMetaData();
ResultSet rs = md.getColumns(null, null, "table_name", "column_name");
 if (rs.next()) {
      //Column in table exist
    }
like image 197
aleroot Avatar answered Sep 19 '22 07:09

aleroot


SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA='table_schema'
  AND TABLE_NAME='table_name' 
  AND COLUMN_NAME='column_name'

If this sql returns nothing - column not exists. You can execute this query on java side, but this depends what you use (JPA, JDBC, JDBCTemplate).

like image 36
mishadoff Avatar answered Sep 20 '22 07:09

mishadoff