欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java如何通過(guò)反射方式生成數(shù)據(jù)庫(kù)實(shí)體類(lèi)

 更新時(shí)間:2023年12月07日 17:07:06   作者:DegenerateAng  
這篇文章主要介紹了Java如何通過(guò)反射方式生成數(shù)據(jù)庫(kù)實(shí)體類(lèi)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

如何通過(guò)反射生成數(shù)據(jù)庫(kù)實(shí)體類(lèi)

我這里使用的數(shù)據(jù)庫(kù)是mysql,我需要在java項(xiàng)目中創(chuàng)建數(shù)據(jù)庫(kù)所有表的實(shí)體類(lèi);

下面我就說(shuō)一下實(shí)現(xiàn)過(guò)程:

生成數(shù)據(jù)庫(kù)實(shí)體類(lèi)步驟

1、創(chuàng)建數(shù)據(jù)庫(kù)連接

2、獲取數(shù)據(jù)庫(kù)表

3、構(gòu)建StringBuffer緩存

4、獲取數(shù)據(jù)庫(kù)表中字段名、字段類(lèi)型、字段注釋

5、寫(xiě)入文件

6、關(guān)閉連接、輸入流等等

創(chuàng)建連接路徑

private static String username =root
private static String url=jdbc\:log4jdbc\:mysql\://localhost\:3306/gjj
private static String password=scott
private static String driver=net.sf.log4jdbc.DriverSpy

public static Connection getConnection(){
        Connection con=null;
        try {
            Class.forName(driver);
            con=DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return con;
    }

連接數(shù)據(jù)庫(kù)并且調(diào)用獲取數(shù)據(jù)庫(kù)方法

private static Connection coon=null;
    public static void main(String[] args) {
        try {
            //建立數(shù)據(jù)連接
            coon=DBUtil.getConnection();

            //調(diào)用方法
            getTableNameByCon(coon);
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    } 

獲取數(shù)據(jù)庫(kù)名稱,表名,列屬性,進(jìn)行拼接

public static void getTableNameByCon(Connection con) throws SQLException {
        PrintWriter printWriter=null;
           try {  
           DatabaseMetaData meta = con.getMetaData();  //連接數(shù)據(jù)庫(kù)
           ResultSet rs = meta.getTables(null, null, null,new String[] { "TABLE" });//獲取數(shù)據(jù)庫(kù)表名
           while (rs.next()) {
             System.out.println("表名:" + rs.getString(3));
             //所需生成實(shí)體類(lèi)的文件路徑
             File tableName=new File("D:/JavaWorkspaces/MyEclipseWeb/2019/src/po/"+rs.getString(3)+".java");
                //輸出
                 Writer writer=new FileWriter(tableName);
                printWriter=new PrintWriter(writer);
                //寫(xiě)入文件
                 printWriter.println("package po;\r\n");//所在包
                 printWriter.println("public class "+rs.getString(3)+"{");
                 
                 //查詢表sql
                 String sql="select * from "+rs.getString(3);
                 //創(chuàng)建一個(gè)語(yǔ)句對(duì)象,用于向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句
                 Statement stmt=coon.createStatement();

                 //向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句
                 ResultSet rs1=stmt.executeQuery(sql); 
                 //檢索此ResultSet對(duì)象的列的數(shù)量、類(lèi)型和屬性。
                 ResultSetMetaData rsmd = rs1.getMetaData(); 
                 //ResultSet對(duì)象的列數(shù),即表的字段數(shù)
                 int count=rsmd.getColumnCount();
                 for (int i = 1; i <= count; i++) {
                //獲取ResultSet對(duì)象列名
                String name = rsmd.getColumnName(i);
                //獲取ResultSet對(duì)象列的類(lèi)型
                String type=rsmd.getColumnTypeName(i);    
                System.out.println(type);
                //首字母小寫(xiě)
                name=name.substring(0, 1).toLowerCase() + name.substring(1);
                //判斷類(lèi)型輸出成員變量
                if (type.equals("INT")||type.equals("SMALLINT")) {
                printWriter.println("        private int" +" "+name+";");

                 //datatime我也給string類(lèi)型,mysql對(duì)類(lèi)型的轉(zhuǎn)換很強(qiáng),可以把string類(lèi)型轉(zhuǎn)換datatime直接存儲(chǔ)進(jìn)行
                }else if (type.equals("CHAR")||type.equals("VARCHAR")||type.equals("DATETIME")) {
                    printWriter.println("        private String" +" "+name+";");
                }else if (type.equals("BIT")) {
                    printWriter.println("        private boolean" +" "+name+";");
                }else if (type.equals("DOUBLE")) {
                    printWriter.println("        private double" +" "+name+";");
                }else if (type.equals("FLOAT")) {
                    printWriter.println("        private float" +" "+name+";");
                }else {
                    printWriter.println("        private 自行定義" +" "+name+";");
                }
            }
             printWriter.println("}");
             printWriter.flush();//刷新流,必寫(xiě)
           }
           con.close();  
           } catch (Exception e) {  
           // TODO Auto-generated catch block  
           e.printStackTrace();
           }finally{
               //關(guān)閉流
               printWriter.close();

               //關(guān)閉數(shù)據(jù)庫(kù)連接
               coon.close();
           }
        }  

下面是運(yùn)行結(jié)果:

數(shù)據(jù)庫(kù)可以看到有個(gè)自行定義,故意加的,如果在類(lèi)型判斷的時(shí)候沒(méi)有對(duì)應(yīng)上的它就直接給個(gè)自行定義,讓它報(bào)異常就可以知道那個(gè)字段出問(wèn)題了,所以最好就加上;

如果沒(méi)有它可以對(duì)應(yīng)是的類(lèi)型它是不會(huì)把這個(gè)字段寫(xiě)入文件中,也不會(huì)報(bào)異常,就不知道有沒(méi)有少字段;

注意:不同的數(shù)據(jù)庫(kù)獲取的類(lèi)型可能不一樣,所以只建議參考

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • ?java中Thread.sleep()的具體使用

    ?java中Thread.sleep()的具體使用

    本文主要介紹了?java中Thread.sleep()的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Web容器啟動(dòng)過(guò)程中如何執(zhí)行Java類(lèi)

    Web容器啟動(dòng)過(guò)程中如何執(zhí)行Java類(lèi)

    這篇文章主要介紹了Web容器啟動(dòng)過(guò)程中如何執(zhí)行Java類(lèi),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • java WebSocket實(shí)現(xiàn)聊天消息推送功能

    java WebSocket實(shí)現(xiàn)聊天消息推送功能

    這篇文章主要為大家詳細(xì)介紹了java WebSocket實(shí)現(xiàn)聊天消息推送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 最新評(píng)論