如何检查数据库中是不是存在表或列?
Posted
技术标签:
【中文标题】如何检查数据库中是不是存在表或列?【英文标题】:How to check if a table or a column exists in a database?如何检查数据库中是否存在表或列? 【发布时间】:2012-07-26 19:19:13 【问题描述】:我正在尝试制作简单的 java 代码来检查 mysql DB 中是否存在表和/或列。我应该使用 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 !");
【问题讨论】:
查询是否成功。如果是,您知道表/列存在。 @FranciscoSpaeth - 是的,它的 jdbc 【参考方案1】:知道您实际上可以使用以下 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!");
...
【讨论】:
@aleroot 这很清楚,我并不担心,因为问题是关于 MySQL 数据库的;)但即便如此,谢谢,我会在我的答案中添加评论 是的,第一次没注意,我现在加了MySQL标签。谢谢。 是的,正如您在已添加的 cmets 中看到的那样,这仅适用于 mysql(正如您对问题的评论)【参考方案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】:要检查表是否存在,您可以通过这种方式使用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
【讨论】:
如果此代码不适合您,请尝试为您的 table_name 使用全部大写(大写) 这很简洁,代码独立于数据库。 @aleroot 你在哪里定义连接?当我尝试Connection connection = null
时,我得到一个空指针异常。【参考方案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>
【讨论】:
以上是关于如何检查数据库中是不是存在表或列?的主要内容,如果未能解决你的问题,请参考以下文章