zoukankan      html  css  js  c++  java
  • JDBC系列教材 (七)- 获取自增长id以及表的元数据

    步骤1:获取自增长id
    步骤2:获取表的元数据
    步骤3:练习-自增长id
    步骤4:答案-自增长id

    步骤 1 : 获取自增长id

    在Statement通过execute或者executeUpdate执行完插入语句后,MySQL会为新插入的数据分配一个自增长id,(前提是这个表的id设置为了自增长,在Mysql创建表的时候,AUTO_INCREMENT就表示自增长)

    CREATE TABLE hero (

      id int(11) AUTO_INCREMENT,

      ...

    }


    但是无论是execute还是executeUpdate都不会返回这个自增长id是多少。需要通过StatementgetGeneratedKeys获取该id
    注: 第20行的代码,后面加了个Statement.RETURN_GENERATED_KEYS参数,以确保会返回自增长ID。 通常情况下不需要加这个,有的时候需要加,所以先加上,保险一些

    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(2616);

                ps.setInt(3100);

       

                // 执行插入语句

                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("数据库产品名称: "+dbmd.getDatabaseProductName());

                // 获取数据库服务器产品版本号

                System.out.println("数据库产品版本: "+dbmd.getDatabaseProductVersion());

                // 获取数据库服务器用作类别和表名之间的分隔符 如test.user

                System.out.println("数据库和表分隔符: "+dbmd.getCatalogSeparator());

                // 获取驱动版本

                System.out.println("驱动版本: "+dbmd.getDriverVersion());

      

                System.out.println("可用的数据库列表:");

                // 获取数据库名称

                ResultSet rs = dbmd.getCatalogs();

      

                while (rs.next()) {

                    System.out.println("数据库名称: "+rs.getString(1));

                }

      

            catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

      

        }

    }


    更多内容,点击了解: https://how2j.cn/k/jdbc/jdbc-id/398.html

  • 相关阅读:
    5.19 省选模拟赛 T1 小B的棋盘 双指针 性质
    5.15 省选模拟赛 容斥 生成函数 dp
    5.15 省选模拟赛 T1 点分治 FFT
    5.15 牛客挑战赛40 B 小V的序列 关于随机均摊分析 二进制
    luogu P4929 【模板】舞蹈链 DLX
    CF 878E Numbers on the blackboard 并查集 离线 贪心
    5.10 省选模拟赛 拍卖 博弈 dp
    5.12 省选模拟赛 T2 贪心 dp 搜索 差分
    5.10 省选模拟赛 tree 树形dp 逆元
    luogu P6088 [JSOI2015]字符串树 可持久化trie 线段树合并 树链剖分 trie树
  • 原文地址:https://www.cnblogs.com/Lanht/p/12615462.html
Copyright © 2011-2022 走看看