热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java中自动生成实体类

Q1:实体层(vo)packagecom;importjava.io.File;importjava.io.FileWriter;importjava.io.IOExcep

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 TBlist() throws Exception { // 访问数据库 采用 JDBC方式 Class.forName(DRIVER); Connection con = DriverManager.getConnection(URL, USER, PASSWORD); DatabaseMetaData md = con.getMetaData(); List 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(); } 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 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 ) { 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 ) { 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;\r\n"); } if (f_sql) { sb.append("import java.sql.*;\r\n\r\n\r\n"); } sb.append("public class " + initcap(tablename) + " {\r\n"); processAllAttrs(sb); processConstructor(sb,initcap(tablename)); processAllMethod(sb); sb.append("}\r\n"); 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\t" + packageName.replace("/", ".") + ";\r\n"); fw.write(content); fw.flush(); fw.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 生成所有的方法 * * @param sb */ private void processAllMethod(StringBuffer sb) { for (int i = 0; i ) { sb.append("\tpublic void set" + initcap(colnames[i]) + "(" + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + "){\r\n"); sb.append("\t\tthis." + colnames[i] + " = " + colnames[i] + ";\r\n"); sb.append("\t}\r\n"); sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + initcap(colnames[i]) + "(){\r\n"); sb.append("\t\treturn " + colnames[i] + ";\r\n"); sb.append("\t}\r\n"); } } /** * 解析输出属性 * * @return */ private void processAllAttrs(StringBuffer sb) { for (int i = 0; i ) { sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + ";\r\n"); } } /** * 解析生成构造函数 * * @return */ private void processConstructor(StringBuffer sb,String tableName) { sb.append("\tpublic "+tableName+"(){}\r\n"); sb.append("\tpublic "+tableName+"("); String link=""; for (int i = 0; i ) { sb.append(link + sqlType2JavaType(colTypes[i]) + " " + colnames[i] ); link=","; } sb.append("){\r\n"); for (int i = 0; i ) { sb.append("\t\tthis."+colnames[i]+"="+colnames[i]+";\r\n"); } sb.append("\t}\r\n"); } /** * 把输入字符串的首字母改成大写 * * @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 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 TBlist() throws Exception {
        // 访问数据库 采用 JDBC方式
        Class.forName(DRIVER);

        Connection con = DriverManager.getConnection(URL, USER, PASSWORD);

        DatabaseMetaData md = con.getMetaData();

        List list = null;

        ResultSet rs = md.getTables(null, null, "teacher", null);
        if (rs != null) {
            list = new ArrayList();
        }
        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 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 ) {
            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 ) {
                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.*;\r\n");
        sb.append("import java.util.*;\r\n");
        //自己新加一个导入包
        sb.append("import util.DBUtil;\r\n");
        //自己新加一个时间导入包
        sb.append("import java.sql.Date;\r\n");
        //导入对应实体包
        sb.append("import com.vo." + initcap(tablename) + ";\r\n");
        
        sb.append("public class " + initcap(tablename) + "DAO {\r\n");
        processAllMethod(sb);
        sb.append("}\r\n");

        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\t" + packageName.replace("/", ".") + ";\r\n");
            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("\tpublic List<" + initcap(tablename) + "> getModel("+sqlType2JavaType(colTypes[0])+" "+colnames[0]+") {\r\n");
        sb.append("\t\tString sql = \"select * from " + tablename + " where "+colnames[0]+"=?\";\r\n");
        sb.append("\t\tObject[] in = {"+colnames[0]+"};\r\n");
        sb.append("\t\tResultSet rs = DBUtil.executeQuery(sql, in);\r\n");
        sb.append("\t\tList<" + initcap(tablename) + "> list = new ArrayList<" + initcap(tablename) + ">();\r\n");
        sb.append("\t\t" + initcap(tablename) + " model = null;\r\n");
        sb.append("\t\ttry {\r\n");
        sb.append("\t\t\tif(rs.next()) {\r\n");
        sb.append("\t\t\t\tmodel = new " + initcap(tablename) + "(\r\n");
        String link="";
        for (int i = 0; i ) {
            sb.append(link+"\t\t\t\t\trs.get" + sqlTypeJavaType(colTypes[i]) + "(\"" + colnames[i] + "\")"); 
            link=",\r\n";
        }
        sb.append(");\r\n");
        sb.append("\t\t\t\tlist.add(model);\r\n");
        sb.append("\t\t\t}\r\n");
        sb.append("\t\t\tDBUtil.close();\r\n");
        sb.append("\t\t} catch (SQLException e) {\r\n");
        sb.append("\t\t\te.printStackTrace();\r\n");
        sb.append("\t\t}\r\n");
        sb.append("\t\treturn list;\r\n");
        sb.append("\t}\r\n");  

        //getModels
        sb.append("\tpublic List<" + initcap(tablename) + "> getModels() {\r\n");
        sb.append("\t\tString sql = \"select * from " + tablename + "\";\r\n");
        sb.append("\t\tResultSet rs = DBUtil.executeQuery(sql);\r\n");
        sb.append("\t\tList<" + initcap(tablename) + "> list = new ArrayList<" + initcap(tablename) + ">();\r\n");
        sb.append("\t\t" + initcap(tablename) + " model = null;\r\n");
        sb.append("\t\ttry {\r\n");
        sb.append("\t\t\twhile(rs.next()) {\r\n");
        sb.append("\t\t\t\tmodel = new " + initcap(tablename) + "(\r\n");
        
        link="";
        for (int i = 0; i ) {
            sb.append(link+"\t\t\t\t\trs.get" + sqlTypeJavaType(colTypes[i]) + "(\"" + colnames[i] + "\")"); 
            link=",\r\n";
        }
        sb.append(");\r\n");
        sb.append("\t\t\t\tlist.add(model);\r\n");
        sb.append("\t\t\t}\r\n");
        sb.append("\t\t\tDBUtil.close();\r\n");
        sb.append("\t\t} catch (SQLException e) {\r\n");
        sb.append("\t\t\te.printStackTrace();\r\n");
        sb.append("\t\t}\r\n");
        sb.append("\t\treturn list;\r\n");
        sb.append("\t}\r\n"); 

        /*//insert
        sb.append("\tpublic int insert(" + initcap(tablename) + " model) {\r\n");
        //添加相同个数的?
        String linkinsert="";
        for (int i = 1; i */
        
        
        //insert
        String linkinserttop="";
        for (int i = 1; i //调用类型,使其进行改变
            linkinserttop+=sqlType2JavaType(colTypes[i])+" "+colnames[i];
            if(i) {
                linkinserttop+=",";
            }
        }
        sb.append("\tpublic int insert(" + linkinserttop + ") {\r\n");
        //添加相同个数的?
        String linkinsert="";
        for (int i = 1; i ) {
            linkinsert+="?"; 
            if(i) {
                linkinsert+=",";
            }
        }
        sb.append("\t\tString sql = \"insert into " + tablename + " values("+linkinsert+")\";\r\n");
        sb.append("\t\tObject[] in = {");
        link="";
        for (int i = 1; i ) {
            sb.append(link+colnames[i]); 
            link=",";
        }        
        sb.append("};\r\n");
        //DBUtil...改成自己项目的util
        sb.append("\t\treturn DBUtil.executeUpdate(sql, in);\r\n");
        sb.append("\t}\r\n"); 

        //update
        String linkupdate1="";
        for (int i = colnames.length-1; i >=0 ; i--) {//调用类型,使其进行改变
            linkupdate1+=sqlType2JavaType(colTypes[i])+" "+colnames[i];
            if(i>0) {
                linkupdate1+=",";
            }
        }
        sb.append("\tpublic int update("+linkupdate1+") {\r\n");
        String linkupdate2="set"+" ";
        for (int i = 1; i ) {
            linkupdate2+=colnames[i]+"=?";
            if(i) {
                linkupdate2+=",";
            }
        }  
        sb.append("\t\tString sql = \"update " + tablename + " "+linkupdate2+" where "+colnames[0]+"=?\";\r\n");
        sb.append("\t\tObject[] in = {");
        link="";
        for (int i = colnames.length-1; i >=0 ; i--) {
            sb.append(link+colnames[i]);
            if(i>0) {
                link=",";
            }
        }        
        sb.append("};\r\n");
        //DBUtil...改成自己项目的util
        sb.append("\t\treturn DBUtil.executeUpdate(sql, in);\r\n");
        sb.append("\t}\r\n"); 
        

        //delete
        sb.append("\tpublic int delete("+sqlType2JavaType(colTypes[0])+" "+colnames[0]+") {\r\n");
        sb.append("\t\tString sql = \"delete from " + tablename + " where "+colnames[0]+"=?\";\r\n");
        sb.append("\t\tObject[] in = {"+colnames[0]+"};\r\n");
        //DBUtil...改成自己项目的util
        sb.append("\t\treturn DBUtil.executeUpdate(sql, in);\r\n");
        sb.append("\t}\r\n"); 
        
    }

    

    /**
     * 把输入字符串的首字母改成大写
     * 
     * @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 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或List集合
    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)
                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)
                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)
                pst.setObject(i+1, in[i]);
            b = pst.execute();
            //true,执行的是一个查询语句,我们可以得到一个数据集
            //false,执行的是一个修改语句,我们可以得到一个执行成功的记录数
            if(b){
                System.out.println("----");
                /*List list = new ArrayList();
                list.add(pst.getResultSet());
                while(pst.getMoreResults()) {
                    list.add(pst.getResultSet());
                }*/
                return pst.getResultSet();
            }
            else {
                System.out.println("****");
                List list = new ArrayList();
                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) {
                procName+=link+"?";
                link=",";
            }
            procName+=")}";
            CallableStatement cstmt = conn.prepareCall(procName);
            for(int i=0;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//设置输入参数
                cstmt.setObject(i+1, in[i]);
                //print(i+1);
            }
            int len = output.length+i;
            for(;i//设置输出参数
                cstmt.registerOutParameter(i+1,type[i-in.length]);
                //print(i+1);
            }
            boolean b = cstmt.execute();
            //获取输出参数的值
            for(i=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=\u7528\u6237\u7BA1\u7406s
DBUSER=sa
DBPWD=123456

注意:DBUTIL与DBUtil连着用

//以下为图片提示

 


推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
author-avatar
mobiledu2502925077
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有