元數據

元數據

在jdbc中獲取數據庫的定義,例如:數據庫、表、列的定義信息。就用到元數據。
在jdbc中可以使用: 數據庫元數據、參數元數據、結果集元數據
元數據定義相關api: .MetaData()

1.數據庫元數據

  1. package com.cn.metadata;
  2. import java.sql.Connection;
  3. import java.sql.DatabaseMetaData;
  4. import org.junit.Test;
  5. import com.cn.util.JdbcUtil;
  6. public class Demo1 {
  7. /**
  8. * 1.數據庫元數據
  9. * @throws Exception
  10. */
  11. @Test
  12. public void test1() throws Exception {
  13. //獲取連接
  14. Connection conn = JdbcUtil.getConnection();
  15. //獲取數據庫元數據
  16. DatabaseMetaData metaData = conn.getMetaData();//alt+shift+L 快速獲取方法返回值
  17. /**
  18. * 獲取數據庫元數據
  19. */
  20. System.out.println(metaData.getUserName());
  21. System.out.println(metaData.getURL());
  22. System.out.println(metaData.getDatabaseProductName());
  23. System.out.println(metaData.getDatabaseProductVersion());
  24. System.out.println(metaData.getDriverVersion());
  25. }
  26. }

 2.參數元數據

  1. package com.cn.metadata;
  2. import java.sql.Connection;
  3. import java.sql.ParameterMetaData;
  4. import java.sql.PreparedStatement;
  5. import org.junit.Test;
  6. import com.cn.util.JdbcUtil;
  7. public class Demo1 {
  8. /**
  9. * 2.參數元數據
  10. * @throws Exception
  11. */
  12. @Test
  13. public void test2() throws Exception {
  14. //獲取連接
  15. Connection conn = JdbcUtil.getConnection();
  16. //sql
  17. String sql = "SELECT * FROM dept where id=? and deptName=?";
  18. PreparedStatement pstmt = conn.prepareStatement(sql);
  19. ParameterMetaData paraMetaData = pstmt.getParameterMetaData();
  20. //獲取參數的個數
  21. int count = paraMetaData.getParameterCount();
  22. System.out.println(count);//結果爲2
  23. }
  24. }

3.結果集元數據

  1. package com.cn.metadata;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.ResultSetMetaData;
  6. import org.junit.Test;
  7. import com.cn.util.JdbcUtil;
  8. public class Demo1 {
  9. /**
  10. * 3.結果集元數據
  11. */
  12. @Test
  13. public void test3() throws Exception {
  14. //獲取連接
  15. Connection conn = JdbcUtil.getConnection();
  16. //sql
  17. String sql = "SELECT * FROM dept";
  18. PreparedStatement pstmt = conn.prepareStatement(sql);
  19. ResultSet rs = pstmt.executeQuery();
  20. ResultSetMetaData resultMetaData = rs.getMetaData();
  21. /**
  22. * 得到結果集元數據(目標:通過結果集元數據,得到列的名稱)
  23. */
  24. //迭代每一行結果
  25. while(rs.next()){
  26. //1.獲取列的個數
  27. int columnCount = resultMetaData.getColumnCount();
  28. //2.遍歷,獲取每一列的值
  29. for(int i=1; i<=columnCount; i++){
  30. //得到每一列的列名稱
  31. String columnName = resultMetaData.getColumnName(i);//從1開始
  32. //獲取該行對應的列的值
  33. Object columnValue = rs.getObject(columnName);
  34. System.out.print(columnName + "=" + columnValue + ", ");
  35. }
  36. System.out.println();
  37. }
  38. }
  39. }

 附上自定義的Jdbc工具類
  1. package com.cn.util;
  2. import java.io.InputStream;
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.sql.Statement;
  8. import java.util.Properties;
  9. /**
  10. * jdbc的工具類
  11. * @author liuzhiyong
  12. *
  13. */
  14. public class JdbcUtil {
  15. private static String url = null;
  16. private static String user = null;
  17. private static String password = null;
  18. private static String driverClass = null;
  19. /**
  20. * 靜態代碼塊(只調用一次)
  21. */
  22. static{
  23. try {
  24. //讀取db.properties文件
  25. Properties properties = new Properties();
  26. /**
  27. * 使用類路徑的讀取方式
  28. * / 斜槓表示classpath的根目錄
  29. * 在java項目下,classpath的根目錄從bin目錄開始
  30. * 在web項目下,classpath的根目錄從WEB-INF/classes目錄開始
  31. */
  32. InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");
  33. properties.load(in);
  34. //讀取信息
  35. url = properties.getProperty("url");
  36. user = properties.getProperty("user");
  37. password = properties.getProperty("password");
  38. driverClass = properties.getProperty("driverClass");
  39. Class.forName(driverClass);
  40. } catch (Exception e) {
  41. e.printStackTrace();
  42. System.out.println("驅動程序註冊出錯!");
  43. }
  44. }
  45. /**
  46. * 獲取連接對象的方法
  47. */
  48. public static Connection getConnection(){
  49. try {
  50. Connection conn = DriverManager.getConnection(url, user, password);
  51. return conn;
  52. } catch (SQLException e) {
  53. // TODO Auto-generated catch block
  54. e.printStackTrace();
  55. throw new RuntimeException(e);
  56. }
  57. }
  58. /**
  59. * 釋放資源的重載方法
  60. */
  61. public static void close(Connection conn, Statement stmt, ResultSet rs){
  62. //關閉資源(順序:後打開,先關閉)
  63. if(rs != null){
  64. try {
  65. rs.close();
  66. } catch (SQLException e) {
  67. System.out.println("ResultSet關閉失敗!");
  68. throw new RuntimeException(e);
  69. }
  70. }if(stmt != null){
  71. try {
  72. stmt.close();
  73. } catch (SQLException e) {
  74. System.out.println("Statement關閉失敗!");
  75. throw new RuntimeException(e);
  76. }
  77. }
  78. if(conn != null){
  79. try {
  80. conn.close();
  81. } catch (SQLException e) {
  82. System.out.println("Connection關閉失敗!");
  83. throw new RuntimeException(e);
  84. }
  85. }
  86. }
  87. /**
  88. * 釋放資源的重載方法
  89. */
  90. public static void close(Connection conn, Statement stmt){
  91. //關閉資源(順序:後打開,先關閉)
  92. if(stmt != null){
  93. try {
  94. stmt.close();
  95. } catch (SQLException e) {
  96. System.out.println("Statement關閉失敗!");
  97. throw new RuntimeException(e);
  98. }
  99. }
  100. if(conn != null){
  101. try {
  102. conn.close();
  103. } catch (SQLException e) {
  104. System.out.println("Connection關閉失敗!");
  105. throw new RuntimeException(e);
  106. }
  107. }
  108. }
  109. }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章