Java自學-JDBC 獲取自增長id以及表的元資料
阿新 • • 發佈:2020-07-20
JDBC 獲取自增長id以及表的元資料
步驟 1 : 獲取自增長id
在Statement通過execute或者executeUpdate執行完插入語句後,MySQL會為新插入的資料分配一個自增長id,(前提是這個表的id設定為了自增長,在Mysql建立表的時候,AUTO_INCREMENT就表示自增長)
CREATE TABLE hero (
id int(11) AUTO_INCREMENT,
...
}
但是無論是execute還是executeUpdate都不會返回這個自增長id是多少。需要通過Statement的getGeneratedKeys獲取該id
注: 第20行的程式碼,後面加了個Statement.RETURN_GENERATED_KEYS
PreparedStatement ps = c.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TestJDBC { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } String sql = "insert into hero values(null,?,?,?)"; try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin"); PreparedStatement ps = c.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); ) { ps.setString(1, "蓋倫"); ps.setFloat(2, 616); ps.setInt(3, 100); // 執行插入語句 ps.execute(); // 在執行完插入語句後,MySQL會為新插入的資料分配一個自增長id // JDBC通過getGeneratedKeys獲取該id ResultSet rs = ps.getGeneratedKeys(); if (rs.next()) { int id = rs.getInt(1); System.out.println(id); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
步驟 2 : 獲取表的元資料
元資料概念:
和資料庫伺服器相關的資料,比如資料庫版本,有哪些表,表有哪些欄位,欄位型別是什麼等等。
package jdbc; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TestJDBC { public static void main(String[] args) throws Exception { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");) { // 檢視資料庫層面的元資料 // 即資料庫伺服器版本,驅動版本,都有哪些資料庫等等 DatabaseMetaData dbmd = c.getMetaData(); // 獲取資料庫伺服器產品名稱 System.out.println("資料庫產品名稱:\t"+dbmd.getDatabaseProductName()); // 獲取資料庫伺服器產品版本號 System.out.println("資料庫產品版本:\t"+dbmd.getDatabaseProductVersion()); // 獲取資料庫伺服器用作類別和表名之間的分隔符 如test.user System.out.println("資料庫和表分隔符:\t"+dbmd.getCatalogSeparator()); // 獲取驅動版本 System.out.println("驅動版本:\t"+dbmd.getDriverVersion()); System.out.println("可用的資料庫列表:"); // 獲取資料庫名稱 ResultSet rs = dbmd.getCatalogs(); while (rs.next()) { System.out.println("資料庫名稱:\t"+rs.getString(1)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
更多內容,點選瞭解: JDBC 獲取自增長id以及表的元資料