sql >> Databáze >  >> RDS >> Mysql

Jak získat metadata databáze

java.sql.DatabaseMetaData rozhraní poskytuje metody pro získání metadat vašeho připojeného databázového serveru. Níže uvedené příklady vám ukážou, jak to udělat jeden po druhém.

Instance java.sql.DatabaseMetaData

Objekt DatabaseMetaData je načten z objektu Database Connection.

DatabaseMetaData dbmd = dbConn.getMetaData();

Název a verze DB

String dbProductName = dbmd.getDatabaseProductName();
String dbProductVersion = dbmd.getDatabaseProductVersion();

int dbMajorVersion = dbmd.getDatabaseMajorVersion();
int dbMinorVersion = dbmd.getDatabaseMinorVersion();

Verze ovladače JDBC

int jdbcDriverMajorVersion = dbmd.getDriverMajorVersion();
int jdbcDriverMinorVersion = dbmd.getDriverMinorVersion();

Seznam databází

ResultSet rs = dbmd.getCatalogs();
if(rs!=null)
{
      while(rs.next())
      {
          String catalogName = rs.getString(1);
	  System.out.println("Database catalog : " + catalogName);
      }
}

Seznam tabulek

// Get all tables of this database.
ResultSet tblRs = dbmd.getTables(catalogName, "", "", null);				
if(tblRs!=null)
{
	while(tblRs.next())
	{
		// Get table
		String tmpDBName = tblRs.getString(1);
		String tmpTblName = tblRs.getString(3);
		System.out.println("DB : " + tmpDBName + " , table : " + tmpTblName);
         }
}

Seznam sloupců tabulky

// Get columns
ResultSet columnRs = dbmd.getColumns(catalogName, "", tmpTblName, "");
						
if(columnRs!=null)
{
	while(columnRs.next())
	{
		// Get column type and name.
		String cType = columnRs.getString(6);
						
	        String cName = columnRs.getString(4);
		
		System.out.println("Column Name : " + cName + " , Column Type : " + cType);
	}
}

Úplný příklad kódu

Níže uvedený příklad bude používat databázový server MySQL.

public class DatabaseMetaDataExample {

	public static void main(String[] args) {
		
		try
		{
			/* Below are db connection required data. */
			String ip = "localhost";
			int port = 3306;
			String dbName = "test";
			String userName = "root";
			String password = "";
	
			DatabaseMetaDataExample dbmdExample = new DatabaseMetaDataExample();
			
			// Get database connection.
			Connection dbConn = dbmdExample.getMySqlConnection(ip, port, dbName, userName, password);
			
			// Get database metadata. 
			DatabaseMetaData dbmd = dbConn.getMetaData();
			
			// Get db name.
			String dbProductName = dbmd.getDatabaseProductName();
			System.out.println("DB product name : " + dbProductName);
			
			// Get db product version.
			String dbProductVersion = dbmd.getDatabaseProductVersion();
			System.out.println("DB product version : " + dbProductVersion);
			
			// Get db major & minor version.
			int dbMajorVersion = dbmd.getDatabaseMajorVersion();
			System.out.println("DB major version : " + dbMajorVersion);
			int dbMinorVersion = dbmd.getDatabaseMinorVersion();
			System.out.println("DB minor version : " + dbMinorVersion);
			
			// Get jdbc driver major & minor version.
			int jdbcDriverMajorVersion = dbmd.getDriverMajorVersion();
			System.out.println("JDBC driver major version : " + jdbcDriverMajorVersion);
			int jdbcDriverMinorVersion = dbmd.getDriverMinorVersion();
			System.out.println("JDBC driver minor version : " + jdbcDriverMinorVersion);
			
			// Get all database catalogs.
			ResultSet rs = dbmd.getCatalogs();
			if(rs!=null)
			{
				while(rs.next())
				{
					String catalogName = rs.getString(1);
					System.out.println("Database catalog : " + catalogName);
					
					// Get all tables of this database.
					ResultSet tblRs = dbmd.getTables(catalogName, "", "", null);
					
					if(tblRs!=null)
					{
						while(tblRs.next())
						{
							// Get table
							String tmpDBName = tblRs.getString(1);
							String tmpTblName = tblRs.getString(3);
							System.out.println("DB : " + tmpDBName + " , table : " + tmpTblName);
							
							// Get columns
							ResultSet columnRs = dbmd.getColumns(catalogName, "", tmpTblName, "");
							
							if(columnRs!=null)
							{
								while(columnRs.next())
								{
									// Get column type and name.
									String cType = columnRs.getString(6);
									
									String cName = columnRs.getString(4);
									
									System.out.println("Column Name : " + cName + " , Column Type : " + cType);
								}
							}
							
						}
					}
					
				}
			}
			
			
			dbmdExample.closeDBResource(null, dbConn);
		} catch (SQLException ex) {
			ex.printStackTrace();
		}
	}
	
	/* This method return java.sql.Connection object from MySQL server. */
	public Connection getMySqlConnection(String ip, int port, String dbName, String userName, String password)
	{
		/* Declare and initialize a sql Connection variable. */
		Connection ret = null;
		
		try
		{
		
			/* Register for mysql jdbc driver class. */
			Class.forName("com.mysql.jdbc.Driver");
			
			/* Create mysql connection url. */
			String mysqlConnUrl = "jdbc:mysql://" + ip + ":" + port + "/" + dbName;
			
			/* Get the mysql Connection object. */
			ret = DriverManager.getConnection(mysqlConnUrl, userName , password);
		}catch(Exception ex)
		{
			ex.printStackTrace();
		}finally
		{
			return ret;
		}
	}
	
	/* Close statement and connection after use, this can avoid resource waste. */
	public void closeDBResource(Statement stmt, Connection conn)
	{
		try
		{
			if(stmt!=null)
			{
				stmt.close();
				stmt = null;
			}
			
			if(conn!=null)
			{
				conn.close();
				conn = null;
			}
		}catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}

}

Zdrojový kód:

  1. [ID stažení=”2567″]

Reference:

  1. Rozhraní DatabaseMetaData

  1. jak vypočítat podobnost mezi dvěma řetězci v MYSQL

  2. Datový model dětské party

  3. 5 nejlepších nástrojů GUI MySQL (zdarma a placené)

  4. #1055 - Výraz seznamu SELECT není v klauzuli GROUP BY a obsahuje neagregovaný sloupec, což není kompatibilní s sql_mode=only_full_group_by