Как проверить, существует ли таблица или столбец в базе данных?
Я пытаюсь сделать простой Java-код, который будет проверять, существует ли таблица и/или столбец в базе данных MySQL. Должен ли я использовать код Java для проверки или создания строки запроса SQL и выполнить ее для проверки?
ИЗМЕНИТЬ -
@aleroot -
Я попытался использовать ваш код, как показано ниже. Когда я запускаю код ниже, я не вижу никаких таблиц или столбцов. Я только вижу это -
Driver Loaded.
Got Connection.
У моей БД много БД, таблиц и столбцов. Я не знаю, почему эта программа работает правильно.
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 !");
}
}
}
Ответы
Ответ 1
Чтобы проверить, существует ли таблица, вы можете использовать DatabaseMetaData следующим образом:
DatabaseMetaData md = connection.getMetaData();
ResultSet rs = md.getTables(null, null, "table_name", null);
if (rs.next()) {
//Table Exist
}
И чтобы проверить, существует ли столбец, вы можете использовать его аналогичным образом:
DatabaseMetaData md = connection.getMetaData();
ResultSet rs = md.getColumns(null, null, "table_name", "column_name");
if (rs.next()) {
//Column in table exist
}
Ответ 2
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='table_schema'
AND TABLE_NAME='table_name'
AND COLUMN_NAME='column_name'
Если этот sql ничего не возвращает - столбец не существует. Вы можете выполнить этот запрос на стороне java, но это зависит от того, что вы используете (JPA, JDBC, JDBCTemplate).
Ответ 3
Зная, что вы можете практически выбрать столбец из таблицы, используя следующий оператор SQL (в MySQL):
show columns from TABLE_NAME where field = 'FIELD_NAME';
Вы можете сделать что-то вроде:
...
PreparedStatement preparedStatement =
connection.prepareStatement(
"show columns from [TABLE_NAME] where field = ?");
preparedStatement.setString(1, columName);
ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
System.out.println("column exists!");
} else {
System.out.println("column doesn't exists!");
}
...
Ответ 4
В Apache Derby (SQL)
например. проверьте, существует ли столбец:
SELECT ss.SCHEMANAME, st.TABLENAME, sc.COLUMNNAME FROM SYS.SYSSCHEMAS ss
INNER JOIN SYS.SYSTABLES st ON st.SCHEMAID = ss.SCHEMAID AND st.TABLENAME = <YOUR TABLE NAME>
INNER JOIN SYS.SYSCOLUMNS sc ON sc.REFERENCEID = st.TABLEID AND sc.COLUMNNAME = <YOUR COLUMN NAME>
WHERE ss.SCHEMANAME = <YOUR SCHEMA>