zoukankan      html  css  js  c++  java
  • Java中自动生成实体类

    Q1:实体层(vo)

    package com;
    
    import java.io.File; 
    import java.io.FileWriter;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 根据数据库表结构 自动生成java Bean
     * 
     * @author DLHT 2016年3月4日下午5:00:28 AutoCreateClass.java DLHT
     */
    public class AutoCreateBean {
    
        /*//  sqlserver 驱动类
        private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        //  数据库登录用户名
        private static final String USER = "sa";//数据库中的账号
        //  数据库登录密码
        private static final String PASSWORD = "";//数据库中的密码
        // 数据库连接地址
        private static final String URL = "jdbc:sqlserver://localhost:1433;databasename=TakeawayDB";*/
      //mysql驱动类
    private static final String DRIVER = "com.mysql.jdbc.Driver"; private static final String URL = "jdbc:mysql://localhost:3306/schooldb?serverTimezone=GMT%2B8"; private static final String USER = "root";//数据库中的账号 private static final String PASSWORD = "";//数据库中的密码 private static String tablename; private String[] colnames; // 列名数组 private String[] colTypes; // 列名类型数组 private int[] colSizes; // 列名大小数组 private boolean f_util = false; // 是否需要导入包java.util.* private boolean f_sql = false; // 是否需要导入包java.sql.* /** * 获取指定数据库中包含的表 TBlist * * @time 2016年3月4日下午5:54:52 * @packageName com.util * @return 返回所有表名(将表名放到一个集合中) * @throws Exception */ public List<String> TBlist() throws Exception { // 访问数据库 采用 JDBC方式 Class.forName(DRIVER); Connection con = DriverManager.getConnection(URL, USER, PASSWORD); DatabaseMetaData md = con.getMetaData(); List<String> list = null; //注意这是特别需要注意的点 ResultSet rs = md.getTables(con.getCatalog(), null, "%", null);//mysql需要用到的 //ResultSet rs = md.getTables(null, null, null, null);//sqlserver需要用到的 if (rs != null) { list = new ArrayList<String>(); } while (rs.next()) { //System.out.println("|表" + (i++) + ":" + rs.getString("TABLE_NAME")); String tableName = rs.getString("TABLE_NAME"); list.add(tableName); } rs = null; md = null; con = null; return list; } public void GenEntity(List<String> TBlist, String packageName)throws Exception { Connection conn = null; PreparedStatement pstmt = null; ResultSetMetaData rsmd = null; // 访问数据库 采用 JDBC方式 Class.forName(DRIVER); conn = DriverManager.getConnection(URL, USER, PASSWORD); for (int k = 0; k < TBlist.size(); k++) { tablename = TBlist.get(k); String strsql = "select * from " + tablename; pstmt = conn.prepareStatement(strsql); rsmd = pstmt.getMetaData(); int size = rsmd.getColumnCount(); // 共有多少列 colnames = new String[size]; colTypes = new String[size]; colSizes = new int[size]; for (int i = 0; i < rsmd.getColumnCount(); i++) { colnames[i] = rsmd.getColumnName(i + 1); colTypes[i] = rsmd.getColumnTypeName(i + 1); if (colTypes[i].equalsIgnoreCase("datetime")) { f_util = true; } if (colTypes[i].equalsIgnoreCase("image") || colTypes[i].equalsIgnoreCase("text")) { f_sql = true; } colSizes[i] = rsmd.getColumnDisplaySize(i + 1); } markerBean(initcap(tablename), parse(), packageName); } pstmt = null; rsmd = null; conn = null; } /** * 解析处理(生成实体类主体代码) */ private String parse() { StringBuffer sb = new StringBuffer(); if (f_util) { sb.append("import java.util.Date; "); } if (f_sql) { sb.append("import java.sql.*; "); } sb.append("public class " + initcap(tablename) + " { "); processAllAttrs(sb); processConstructor(sb,initcap(tablename)); processAllMethod(sb); sb.append("} "); return sb.toString(); } /** * 创建java 文件 将生成的属性 get/set 方法 保存到 文件中 markerBean * * @time 2015年9月29日下午4:15:22 * @packageName fanshe * @param className * 类名称 * @param content * 类内容 包括属性 getset 方法 */ public void markerBean(String className, String content, String packageName) { String folder = System.getProperty("user.dir") + "/src/" + packageName + "/"; File file = new File(folder); if (!file.exists()) { file.mkdirs(); } String fileName = folder + className + ".java"; try { File newdao = new File(fileName); FileWriter fw = new FileWriter(newdao); fw.write("package " + packageName.replace("/", ".") + "; "); fw.write(content); fw.flush(); fw.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 生成所有的方法 * * @param sb */ private void processAllMethod(StringBuffer sb) { for (int i = 0; i < colnames.length; i++) { sb.append(" public void set" + initcap(colnames[i]) + "(" + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + "){ "); sb.append(" this." + colnames[i] + " = " + colnames[i] + "; "); sb.append(" } "); sb.append(" public " + sqlType2JavaType(colTypes[i]) + " get" + initcap(colnames[i]) + "(){ "); sb.append(" return " + colnames[i] + "; "); sb.append(" } "); } } /** * 解析输出属性 * * @return */ private void processAllAttrs(StringBuffer sb) { for (int i = 0; i < colnames.length; i++) { sb.append(" private " + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + "; "); } } /** * 解析生成构造函数 * * @return */ private void processConstructor(StringBuffer sb,String tableName) { sb.append(" public "+tableName+"(){} "); sb.append(" public "+tableName+"("); String link=""; for (int i = 0; i < colnames.length; i++) { sb.append(link + sqlType2JavaType(colTypes[i]) + " " + colnames[i] ); link=","; } sb.append("){ "); for (int i = 0; i < colnames.length; i++) { sb.append(" this."+colnames[i]+"="+colnames[i]+"; "); } sb.append(" } "); } /** * 把输入字符串的首字母改成大写 * * @param str * @return */ private String initcap(String str) { char[] ch = str.toCharArray(); if (ch[0] >= 'a' && ch[0] <= 'z') { ch[0] = (char) (ch[0] - 32); } return new String(ch); } private String sqlType2JavaType(String sqlType) { if (sqlType.equalsIgnoreCase("bit")) { return "boolean"; } else if (sqlType.equalsIgnoreCase("tinyint")) { return "byte"; } else if (sqlType.equalsIgnoreCase("smallint")) { return "short"; } else if (sqlType.equalsIgnoreCase("int")) { return "int"; } else if (sqlType.equalsIgnoreCase("bigint")) { return "long"; } else if (sqlType.equalsIgnoreCase("float")) { return "float"; } else if (sqlType.equalsIgnoreCase("decimal") || sqlType.equalsIgnoreCase("numeric") || sqlType.equalsIgnoreCase("real")) { return "double"; } else if (sqlType.equalsIgnoreCase("money") || sqlType.equalsIgnoreCase("smallmoney")) { return "double"; } else if (sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char") || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar") || sqlType.equalsIgnoreCase("uniqueidentifier") || sqlType.equalsIgnoreCase("ntext")) { return "String"; } else if (sqlType.equalsIgnoreCase("datetime") ||sqlType.equalsIgnoreCase("date")){ return "Date"; } else if (sqlType.equalsIgnoreCase("image")) { return "Blob"; } else if (sqlType.equalsIgnoreCase("text")) { return "Clob"; } return "String"; } public static void main(String[] args) throws Exception { AutoCreateBean auto = new AutoCreateBean(); List<String> list = auto.TBlist();
         //注意,这点也特别需要注意,com/vo是包名 auto.GenEntity(list,
    "com/vo"); } }

    提示:一些需要注意的地方已经特别提示了,只需要照做,因该就没问题了。

    Q2:数据访问层(dao)

    package com;
    
    import java.io.File; 
    import java.io.FileWriter;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.*;
    
    /**
     * 根据数据库表结构 自动生成java MVC中的dao
     * 
     * @author DLHT 2018年5月10日下午15:00:28 AutoCreateDao.java 
     */
    public class AutoCreateDao {
    
        /*//  sql 驱动类
        private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    
        //  数据库登录用户名
        private static final String USER = "";
    
        //  数据库登录密码
        private static final String PASSWORD = "";
    
        // 数据库连接地址
        private static final String URL = "jdbc:sqlserver://localhost:1433;databasename=TakeawayDB";*/
        public static String DRIVER = "com.mysql.jdbc.Driver";
        public static String URL = "jdbc:mysql://localhost:3306/schooldb?serverTimezone=GMT%2B8";
        public static String USER = "root";
        public static String PASSWORD = "";
        private static String tablename;
    
        private String[] colnames; // 列名数组
    
        private String[] colTypes; // 列名类型数组
    
        private int[] colSizes; // 列名大小数组
    
        /**
         * 获取指定数据库中包含的表 TBlist
         * 
         * @time 2016年3月4日下午5:54:52
         * @packageName com.util
         * @return 返回所有表名(将表名放到一个集合中)
         * @throws Exception
         */
        public List<String> TBlist() throws Exception {
            // 访问数据库 采用 JDBC方式
            Class.forName(DRIVER);
    
            Connection con = DriverManager.getConnection(URL, USER, PASSWORD);
    
            DatabaseMetaData md = con.getMetaData();
    
            List<String> list = null;
    
            ResultSet rs = md.getTables(null, null, "teacher", null);
            if (rs != null) {
                list = new ArrayList<String>();
            }
            while (rs.next()) {
    //            System.out.println("|表" + (i++) + ":" + rs.getString("TABLE_NAME"));
                String tableName = rs.getString("TABLE_NAME");
                list.add(tableName);
            }
            rs = null;
            md = null;
            con = null;
            return list;
        }
    
        public void GenEntity(List<String> TBlist, String packageName)throws Exception {
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSetMetaData rsmd = null;
    
            // 访问数据库 采用 JDBC方式
            Class.forName(DRIVER);
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
    
            for (int k = 0; k < TBlist.size(); k++) {
                tablename = TBlist.get(k);
                String strsql = "select * from " + tablename;
                pstmt = conn.prepareStatement(strsql);
                rsmd = pstmt.getMetaData();
                int size = rsmd.getColumnCount();
                // 共有多少列
                colnames = new String[size];
                colTypes = new String[size];
                colSizes = new int[size];
                for (int i = 0; i < rsmd.getColumnCount(); i++) {
                    colnames[i] = rsmd.getColumnName(i + 1);
                    colTypes[i] = rsmd.getColumnTypeName(i + 1);
                    /*
                    if (colTypes[i].equalsIgnoreCase("datetime")) {
                        f_util = true;
                    }
                    if (colTypes[i].equalsIgnoreCase("image")
                            || colTypes[i].equalsIgnoreCase("text")) {
                        f_sql = true;
                    }*/
                    colSizes[i] = rsmd.getColumnDisplaySize(i + 1);
                }
                markerBean(initcap(tablename), parse(), packageName);
            }
            pstmt = null;
            rsmd = null;
            conn = null;
        }
    
        /**
         * 
         * 解析处理(生成实体类主体代码)
         */
        private String parse() {
            StringBuffer sb = new StringBuffer();
            //导入包
            sb.append("import java.sql.*;
    ");
            sb.append("import java.util.*;
    ");
            //自己新加一个导入包
            sb.append("import util.DBUtil;
    ");
            //自己新加一个时间导入包
            sb.append("import java.sql.Date;
    ");
            //导入对应实体包
            sb.append("import com.vo." + initcap(tablename) + ";
    ");
            
            sb.append("public class " + initcap(tablename) + "DAO {
    ");
            processAllMethod(sb);
            sb.append("}
    ");
    
            return sb.toString();
    
        }
    
        /**
         * 创建java 文件 将生成的属性 get/set 方法 保存到 文件中 markerBean
         * 
         * @time 2015年9月29日下午4:15:22
         * @packageName fanshe
         * @param className
         *            类名称
         * @param content
         *            类内容 包括属性 getset 方法
         */
        public void markerBean(String className, String content, String packageName) {
            String folder = System.getProperty("user.dir") + "/src/" + packageName + "/";
    
            File file = new File(folder);
            if (!file.exists()) {
                file.mkdirs();
            }
            String fileName = folder + className + "DAO.java";
    
            try {
                File newdao = new File(fileName);
                FileWriter fw = new FileWriter(newdao);
                fw.write("package	" + packageName.replace("/", ".") + ";
    ");
                fw.write(content);
                fw.flush();
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 生成所有的方法
         * 
         * @param sb
         */
        private void processAllMethod(StringBuffer sb) {
            /*生成五个方法:
             * findById,findAll,insert,update,delete
            */
            //getModel
            sb.append("	public List<" + initcap(tablename) + "> getModel("+sqlType2JavaType(colTypes[0])+" "+colnames[0]+") {
    ");
            sb.append("		String sql = "select * from " + tablename + " where "+colnames[0]+"=?";
    ");
            sb.append("		Object[] in = {"+colnames[0]+"};
    ");
            sb.append("		ResultSet rs = DBUtil.executeQuery(sql, in);
    ");
            sb.append("		List<" + initcap(tablename) + "> list = new ArrayList<" + initcap(tablename) + ">();
    ");
            sb.append("		" + initcap(tablename) + " model = null;
    ");
            sb.append("		try {
    ");
            sb.append("			if(rs.next()) {
    ");
            sb.append("				model = new " + initcap(tablename) + "(
    ");
            String link="";
            for (int i = 0; i < colnames.length; i++) {
                sb.append(link+"					rs.get" + sqlTypeJavaType(colTypes[i]) + "("" + colnames[i] + "")"); 
                link=",
    ";
            }
            sb.append(");
    ");
            sb.append("				list.add(model);
    ");
            sb.append("			}
    ");
            sb.append("			DBUtil.close();
    ");
            sb.append("		} catch (SQLException e) {
    ");
            sb.append("			e.printStackTrace();
    ");
            sb.append("		}
    ");
            sb.append("		return list;
    ");
            sb.append("	}
    ");  
    
            //getModels
            sb.append("	public List<" + initcap(tablename) + "> getModels() {
    ");
            sb.append("		String sql = "select * from " + tablename + "";
    ");
            sb.append("		ResultSet rs = DBUtil.executeQuery(sql);
    ");
            sb.append("		List<" + initcap(tablename) + "> list = new ArrayList<" + initcap(tablename) + ">();
    ");
            sb.append("		" + initcap(tablename) + " model = null;
    ");
            sb.append("		try {
    ");
            sb.append("			while(rs.next()) {
    ");
            sb.append("				model = new " + initcap(tablename) + "(
    ");
            
            link="";
            for (int i = 0; i < colnames.length; i++) {
                sb.append(link+"					rs.get" + sqlTypeJavaType(colTypes[i]) + "("" + colnames[i] + "")"); 
                link=",
    ";
            }
            sb.append(");
    ");
            sb.append("				list.add(model);
    ");
            sb.append("			}
    ");
            sb.append("			DBUtil.close();
    ");
            sb.append("		} catch (SQLException e) {
    ");
            sb.append("			e.printStackTrace();
    ");
            sb.append("		}
    ");
            sb.append("		return list;
    ");
            sb.append("	}
    "); 
    
            /*//insert
            sb.append("	public int insert(" + initcap(tablename) + " model) {
    ");
            //添加相同个数的?
            String linkinsert="";
            for (int i = 1; i < colnames.length; i++) {
                linkinsert+="?"; 
                if(i<colnames.length-1) {
                    linkinsert+=",";
                }
            }
            sb.append("		String sql = "insert into " + tablename + " values("+linkinsert+") ";
    ");
            sb.append("		Object[] in = {");
            link="";
            for (int i = 1; i < colnames.length; i++) {
                sb.append(link+"model.get"+initcap(colnames[i])+"()"); 
                link=",";
            }        
            sb.append("};
    ");
            //DBUtil...改成自己项目的util
            sb.append("		return DBUtil.executeUpdate(sql, in);
    ");
            sb.append("	}
    "); */
            
            
            //insert
            String linkinserttop="";
            for (int i = 1; i <colnames.length ; i++) {//调用类型,使其进行改变
                linkinserttop+=sqlType2JavaType(colTypes[i])+" "+colnames[i];
                if(i<colnames.length-1) {
                    linkinserttop+=",";
                }
            }
            sb.append("	public int insert(" + linkinserttop + ") {
    ");
            //添加相同个数的?
            String linkinsert="";
            for (int i = 1; i < colnames.length; i++) {
                linkinsert+="?"; 
                if(i<colnames.length-1) {
                    linkinsert+=",";
                }
            }
            sb.append("		String sql = "insert into " + tablename + " values("+linkinsert+")";
    ");
            sb.append("		Object[] in = {");
            link="";
            for (int i = 1; i < colnames.length; i++) {
                sb.append(link+colnames[i]); 
                link=",";
            }        
            sb.append("};
    ");
            //DBUtil...改成自己项目的util
            sb.append("		return DBUtil.executeUpdate(sql, in);
    ");
            sb.append("	}
    "); 
    
            //update
            String linkupdate1="";
            for (int i = colnames.length-1; i >=0 ; i--) {//调用类型,使其进行改变
                linkupdate1+=sqlType2JavaType(colTypes[i])+" "+colnames[i];
                if(i>0) {
                    linkupdate1+=",";
                }
            }
            sb.append("	public int update("+linkupdate1+") {
    ");
            String linkupdate2="set"+" ";
            for (int i = 1; i < colnames.length; i++) {
                linkupdate2+=colnames[i]+"=?";
                if(i<colnames.length-1) {
                    linkupdate2+=",";
                }
            }  
            sb.append("		String sql = "update " + tablename + " "+linkupdate2+" where "+colnames[0]+"=?";
    ");
            sb.append("		Object[] in = {");
            link="";
            for (int i = colnames.length-1; i >=0 ; i--) {
                sb.append(link+colnames[i]);
                if(i>0) {
                    link=",";
                }
            }        
            sb.append("};
    ");
            //DBUtil...改成自己项目的util
            sb.append("		return DBUtil.executeUpdate(sql, in);
    ");
            sb.append("	}
    "); 
            
    
            //delete
            sb.append("	public int delete("+sqlType2JavaType(colTypes[0])+" "+colnames[0]+") {
    ");
            sb.append("		String sql = "delete from " + tablename + " where "+colnames[0]+"=?";
    ");
            sb.append("		Object[] in = {"+colnames[0]+"};
    ");
            //DBUtil...改成自己项目的util
            sb.append("		return DBUtil.executeUpdate(sql, in);
    ");
            sb.append("	}
    "); 
            
        }
    
        
    
        /**
         * 把输入字符串的首字母改成大写
         * 
         * @param str
         * @return
         */
        private String initcap(String str) {
            char[] ch = str.toCharArray();
            if (ch[0] >= 'a' && ch[0] <= 'z') {
                ch[0] = (char) (ch[0] - 32);
            }
            return new String(ch);
        }
    
        private String sqlType2JavaType(String sqlType) {
            if (sqlType.equalsIgnoreCase("bit")) {
                return "boolean";
            } else if (sqlType.equalsIgnoreCase("tinyint")) {
                return "byte";
            } else if (sqlType.equalsIgnoreCase("smallint")) {
                return "short";
            } else if (sqlType.equalsIgnoreCase("int")) {
                return "int";
            } else if (sqlType.equalsIgnoreCase("bigint")) {
                return "long";
            } else if (sqlType.equalsIgnoreCase("float")) {
                return "float";
            } else if (sqlType.equalsIgnoreCase("decimal")
                    || sqlType.equalsIgnoreCase("numeric")
                    || sqlType.equalsIgnoreCase("real")) {
                return "double";
            } else if (sqlType.equalsIgnoreCase("money")
                    || sqlType.equalsIgnoreCase("smallmoney")) {
                return "double";
            } else if (sqlType.equalsIgnoreCase("varchar")
                    || sqlType.equalsIgnoreCase("char")
                    || sqlType.equalsIgnoreCase("nvarchar")
                    || sqlType.equalsIgnoreCase("nchar")
                    || sqlType.equalsIgnoreCase("uniqueidentifier")
                    || sqlType.equalsIgnoreCase("ntext")) {
                return "String";
            } else if (sqlType.equalsIgnoreCase("datetime")
                    ||sqlType.equalsIgnoreCase("date")){
                return "Date";
            }
    
            else if (sqlType.equalsIgnoreCase("image")) {
                return "Blob";
            } else if (sqlType.equalsIgnoreCase("text")) {
                return "Clob";
            }
            return "String";
        }
        
    
        private String sqlTypeJavaType(String sqlType) {
            if (sqlType.equalsIgnoreCase("bit")) {
                return "Boolean";
            } else if (sqlType.equalsIgnoreCase("tinyint")) {
                return "Byte";
            } else if (sqlType.equalsIgnoreCase("smallint")) {
                return "Short";
            } else if (sqlType.equalsIgnoreCase("int")) {
                return "Int";
            } else if (sqlType.equalsIgnoreCase("bigint")) {
                return "Long";
            } else if (sqlType.equalsIgnoreCase("float")) {
                return "Float";
            } else if (sqlType.equalsIgnoreCase("decimal")
                    || sqlType.equalsIgnoreCase("numeric")
                    || sqlType.equalsIgnoreCase("real")) {
                return "Double";
            } else if (sqlType.equalsIgnoreCase("money")
                    || sqlType.equalsIgnoreCase("smallmoney")) {
                return "Double";
            } else if (sqlType.equalsIgnoreCase("varchar")
                    || sqlType.equalsIgnoreCase("char")
                    || sqlType.equalsIgnoreCase("nvarchar")
                    || sqlType.equalsIgnoreCase("nchar")
                    || sqlType.equalsIgnoreCase("uniqueidentifier")
                    || sqlType.equalsIgnoreCase("ntext")) {
                return "String";
            } else if (sqlType.equalsIgnoreCase("datetime")
                    ||sqlType.equalsIgnoreCase("date")){
                return "Date";
            }
    
            else if (sqlType.equalsIgnoreCase("image")) {
                return "Blob";
            } else if (sqlType.equalsIgnoreCase("text")) {
                return "Clob";
            }
            return "String";
        }
    
        public static void main(String[] args) throws Exception {
            AutoCreateDao auto = new AutoCreateDao();
            List<String> list = auto.TBlist();
            auto.GenEntity(list, "com/dao");
    
        }
    
    }

    提示:一些需要注意的地方已经特别提示了,只需要照做,因该就没问题了。

    Q3:DBUTIL

    package util;
    
    import java.io.IOException;
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Properties;
    
    public class DBUtil {
        //连接对象
        //Statement 命令对象
        //打开连接
        //关闭连接
        //得到一个连接对象
        //查询(有参,无参)
        //修改(有参,无参)
        
        static Connection conn = null;
        static Statement stmt = null;
        //驱动,服务器地址,登录用户名,密码  
        static String DBDRIVER;
        static String DBURL;
        static String DBUSER;
        static String DBPWD;
        
        static {
            //先创建资源文件,扩展名为.properties
            //内容是以:dbuser=sa  格式
            Properties prop = new Properties();//先获取资源对象
            try {
                prop.load(Thread.currentThread().getContextClassLoader().
                        getResourceAsStream("/resources/dbconfig.properties"));
                DBDRIVER = prop.getProperty("DBDRIVER");
                DBURL = prop.getProperty("DBURL");
                DBUSER = prop.getProperty("DBUSER");
                DBPWD = prop.getProperty("DBPWD");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
        }
        
        //打开连接
        public static void open() {
            //加载驱动
            try {
                Class.forName(DBDRIVER);
                conn=DriverManager.getConnection(DBURL,DBUSER,DBPWD);
                
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                    e.printStackTrace();
            }
        }
        //关闭连接
        public static void close() {
            try {
                if(stmt!=null && stmt.isClosed())
                        stmt.close();
                if(conn!=null && !conn.isClosed())
                    conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } 
        //得到一个连接对象,当用户使用DBUtil无法解决个性问题时
        //可以通过本方法获得连接对象
        public static Connection getConnection() {
            try {
                if(conn==null ||conn.isClosed())
                    open();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return conn;
        }
        
        //executeQuery
        //executeUpdate
        //execute
        //获得查询的数据集
        //不带参数的查询
        //select * from student where name='' and sex=''
        public static ResultSet executeQuery(String sql) {
            try {
                open();//保证连接是成功的
                stmt = conn.createStatement();
                return stmt.executeQuery(sql);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
        
        //修改表格内容
        public static int executeUpdate(String sql) {
            int result = 0;
            try {
                open();//保证连接是成功的
                stmt = conn.createStatement();
                result = stmt.executeUpdate(sql);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                close();
            }
            return result;
        }
        //如果执行的查询或存储过程,会返回多个数据集,或多个执行成功记录数
        //可以调用本方法,返回的结果,
        //是一个List<ResultSet>或List<Integer>集合
        public static Object execute(String sql) {
            boolean b=false;
            try {
                open();//保证连接是成功的
                stmt = conn.createStatement();
                b = stmt.execute(sql);        
                //true,执行的是一个查询语句,我们可以得到一个数据集
                //false,执行的是一个修改语句,我们可以得到一个执行成功的记录数
                if(b){
                    return stmt.getResultSet();
                }
                else {
                    return stmt.getUpdateCount();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                if(!b) {
                    close();
                }
            }
            return null;
        }
        
        // 
        //select * from student where name=? and sex=?
        //带参数的查询,只有输入参数
        public static ResultSet executeQuery(String sql,Object[] in) {
            try {
                open();//保证连接是成功的
                PreparedStatement pst = conn.prepareStatement(sql);
                for(int i=0;i<in.length;i++)
                    pst.setObject(i+1, in[i]);
                stmt = pst;//只是为了关闭命令对象pst
                return pst.executeQuery();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
        //带参数修改,只有输入参数
        public static int executeUpdate(String sql,Object[] in) {
            try {
                open();//保证连接是成功的
                PreparedStatement pst = conn.prepareStatement(sql);
                for(int i=0;i<in.length;i++)
                    pst.setObject(i+1, in[i]);
                stmt = pst;//只是为了关闭命令对象pst
                return pst.executeUpdate();
            } catch (SQLException e) {
                System.out.println(e.getMessage());
                //e.printStackTrace();
            }finally {
                close();
            }
            return 0;
        }
        public static Object execute(String sql,Object[] in) {
            boolean b=false;
            try {
                open();//保证连接是成功的
                PreparedStatement pst = conn.prepareStatement(sql);
                for(int i=0;i<in.length;i++)
                    pst.setObject(i+1, in[i]);
                b = pst.execute();
                //true,执行的是一个查询语句,我们可以得到一个数据集
                //false,执行的是一个修改语句,我们可以得到一个执行成功的记录数
                if(b){
                    System.out.println("----");
                    /*List<ResultSet> list = new ArrayList<ResultSet>();
                    list.add(pst.getResultSet());
                    while(pst.getMoreResults()) {
                        list.add(pst.getResultSet());
                    }*/
                    return pst.getResultSet();
                }
                else {
                    System.out.println("****");
                    List<Integer> list = new ArrayList<Integer>();
                    list.add(pst.getUpdateCount());
                    while(pst.getMoreResults()) {
                        list.add(pst.getUpdateCount());
                    }
                    return list;
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                if(!b) {
                    System.out.println("====");
                    close();
                }
            }
            return null;
        }
        //调用存储过程  proc_Insert(?,?,?)
        public static Object executeProcedure(String procName,Object[] in) {
            open();
            try {
                procName = "{call "+procName+"(";
                String link="";
                for(int i=0;i<in.length;i++) {
                    procName+=link+"?";
                    link=",";
                }
                procName+=")}";
                CallableStatement cstmt = conn.prepareCall(procName);
                for(int i=0;i<in.length;i++) {
                    cstmt.setObject(i+1, in[i]);
                }
                if(cstmt.execute())
                {
                    return cstmt.getResultSet();
                }
                else {
                    return cstmt.getUpdateCount();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            return null;
        }
        
    
        /*
         * 调用存储过程,并有输出参数
         * @procName ,存储过程名称:proc_Insert(?,?)
         * @in ,输入参数集合
         * @output,输出参数集合
         * @type,输出参数类型集合
         * */
        public static Object executeOutputProcedure(String procName,
                Object[] in,Object[] output,int[] type){
            Object result = null;
            try {
                CallableStatement cstmt = conn.prepareCall("{call "+procName+"}");
                //设置存储过程的参数值
                int i=0;
                for(;i<in.length;i++){//设置输入参数
                    cstmt.setObject(i+1, in[i]);
                    //print(i+1);
                }
                int len = output.length+i;
                for(;i<len;i++){//设置输出参数
                    cstmt.registerOutParameter(i+1,type[i-in.length]);
                    //print(i+1);
                }
                boolean b = cstmt.execute();
                //获取输出参数的值
                for(i=in.length;i<output.length+in.length;i++)
                    output[i-in.length] = cstmt.getObject(i+1);
                if(b) {
                    result = cstmt.getResultSet();
                }
                else {
                    result = cstmt.getUpdateCount();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return result;
        }
        //调用存储过程查询出所有的值
            public static Object executeProcedures(String procName) {
                open();
                try {
                    procName = "{call "+procName+"}";
                    CallableStatement cstmt = conn.prepareCall(procName);
                    if(cstmt.execute())
                    {
                        return cstmt.getResultSet();
                    }
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return null;
            }
    }

    Q4:mysql配置文件

    DBDRIVER=com.mysql.jdbc.Driver
    DBURL=jdbc:mysql://localhost:3306/schooldb?serverTimezone=GMT%2B8
    DBUSER=root
    DBPWD=123456

    Q5:sqlserver配置文件

    DBDRIVER=com.microsoft.sqlserver.jdbc.SQLServerDriver
    DBURL=jdbc:sqlserver://localhost:1433;DatabaseName=u7528u6237u7BA1u7406s
    DBUSER=sa
    DBPWD=123456

    注意:DBUTIL与DBUtil连着用

    //以下为图片提示

    zywds
  • 相关阅读:
    [POJ 1200]Crazy Search
    [来源不详]删数方案数
    noip搜索模拟题 骰子
    [SDOI2010]地精部落
    [HAOI2008]硬币购物
    BZOJ1009: [HNOI2008]GT考试
    BZOJ1830: [AHOI2008]Y型项链 & BZOJ1789: [Ahoi2008]Necklace Y型项链
    BZOJ1251: 序列终结者
    BZOJ3620: 似乎在梦中见过的样子
    BZOJ4477: [Jsoi2015]字符串树
  • 原文地址:https://www.cnblogs.com/zywds/p/9362044.html
Copyright © 2011-2022 走看看