zoukankan      html  css  js  c++  java
  • 数据库连接 简单飞扬

    //数据库连接 2个类
    ////////////////////////////////////////////////////////////////////////////////////
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;

    import java.sql.PreparedStatement;


    /**
     *
     *
     *
     *
     *
     *
     * */
    public class Jc {

        private static String url = "jdbc:mysql://localhost:3306/jav";

        private static String user = "root";

        private static String pass = "";
        
        private static String ForName = "com.mysql.jdbc.Driver";

        private static ResultSet rs;

        private static Connection con;

        private static PreparedStatement p;

        /**
         *  数据库连接
         * @return
         */
        public static Connection getConnection()  {
            try {
                Class.forName(ForName);
                con = DriverManager.getConnection(url, user, pass);
                
            } catch (Exception e) {
                System.err.println("数据库连接失败+++++++++++++++"+e);
            }
            return con;
        }

        /**
         * 获得数据库操作对象 PreparedStatement
         * @param sql
         * @return
         */
        public static PreparedStatement getPrepareStatement(String sql) {
            try {
                p = getConnection().prepareStatement(sql);
            } catch (Exception e) {
            }
            return p;
        }

        /**
         * 除查询以外的数据库操作
         * @param sql
         */
        public static void noSelect(String sql)  {
            try {
                getConnection().prepareStatement(sql).executeUpdate();
            } catch (Exception e) {
                System.err.println("数据库操作失败"+e);
            }
        }

        /**
         * 获取数据库查询结果
         * @param sql
         * @return
         */
        public static ResultSet getResultSet(String sql)  {
            try {
                rs = getConnection().prepareStatement(sql).executeQuery();
            } catch (Exception e) {
                System.err.println("获取查询结果失败!"+e);
            }
            return rs;
        }

        /**
         * 获取数据库查询结果 并装进数组 再装进list 返回
         * @param sql
         * @param table
         * @return
         * @throws Exception
         */
        public static List getResult(String sql,String table) throws Exception {
            List list = new ArrayList();
            String s = sql.trim().toLowerCase();
            String[] str = new F().getArray(table);

            if (s.startsWith("select")) {
                ResultSet rs = getResultSet(sql);
                while (rs.next()) {
                    String[] a=new String[str.length];
                    for (int i = 0; i < str.length; i++) {
                        a[i]=rs.getString(str[i]);
                    }
                    list.add(a);
                }
                return list;
            } else {
                noSelect(sql);
                return null;
            }
        }

        public static void main(String[] args) {
            
            String sql = "insert into asdf(sdf,sdfs) values(4,'撒旦')";
            noSelect(sql);
            
        }
        
        
        /**
         *
         *
         * 把Jc和F结合起来- : 直接连接数据库 得到rs 同时 调用F的方法 取代 数据库表的 domain --- --然后,如果是
         * 查询数据库,就返回查询结果list ------如果是其他数据库操作,就返回null
         *
         *
         *
         */


        /**
         *
         * @param pass
         */
        public void setPass(String pass) {
            this.pass = pass;
        }

        /**
         *
         * @param user
         */
        public  void setUser(String user) {
            this.user = user;
        }
        
        /**
         *
         *     关闭数据库连接
         */
        public static void closeConnect(){
            if(con!=null){
                try {
                    con.close();
                } catch (Exception e) {
                    System.err.println("关闭数据库连接失败!"+e);
                }
            }
        }
        
        /**
         *
         *        关闭数据库查询结果
         */
        public static void closeResultSet(){
            if(rs!=null){
                try {
                rs.close();
                } catch (Exception e) {
                    System.err.println("关闭数据库查询结果失败!"+e);
                }
            }
        }
        
        /**
         *
         *        关闭PreparedStatement
         */
        public static void closePreparedStatement(){
            if(p!=null){
                try {
                p.close();
                } catch (Exception e) {
                    System.err.println("关闭PreparedStatement失败!"+e);
                }
            }
        }
        
        /**
         *
         *        关闭所有连接
         */
        public static void close(){
            closeResultSet();
            closePreparedStatement();
            closeConnect();
        }
        
    }


    ////////////////////////////////////////////////////////////////////////////////////////

    package action;

    import java.sql.ResultSet;
    import java.util.ArrayList;
    import java.util.List;

    public class F {
    //    F f = new F();

        public String getA(String sql) throws Exception {/**从查询语句中截取结果所在的列名*/
            String s1 = sql.trim().toLowerCase();
            return s1.substring(6, s1.indexOf("from")).trim();
        }

        public String getB(String sql) {/**从查询语句中截取表名*/
            String la = "";
            String sq = sql.trim().toLowerCase();
            if (sq.contains("where")) {
                la = (sq.substring(sq.indexOf("from") + 4, sq.indexOf("where"))
                        .trim());

            } else if (sq.contains("limit")) {
                la = (sq.substring(sq.indexOf("from") + 4, sq.indexOf("limit"))
                        .trim());

            } else if (sq.contains("top")) {
                la = (sq.substring(sq.indexOf("from") + 4, sq.indexOf("top"))
                        .trim());
            } else {
                la = sq.substring(sq.indexOf("from") + 4).trim();
            }
            return la;
        }

        public String getLName(String sql) throws Exception {
            String ld = "";
            String lc = "";
            String s1 = sql.trim().toLowerCase();
            ld = s1.substring(6, s1.indexOf("from")).trim();
            if (ld.startsWith("max")) {
                ld = ld.substring(ld.indexOf("("), ld.indexOf(")"));
                if (ld.contains(".")) {
                    ld = ld.substring(ld.indexOf(".") + 1);
                    lc = ld;
                }
            } else if (ld.contains("*")) {
                ResultSet rs = Jc.getResultSet("desc " + getTName(sql));
                while (rs.next()) {
                    lc += rs.getString("Field") + ",";
                }
            } else if (ld.contains(".")) {
                ld = ld.substring(ld.indexOf(".") + 1);
                lc = ld;
            } else {
                lc = ld;
            }
            return lc;
        }

        public String getTName(String sql) {
            String[] c2 = getB(sql).split(" ");
            return c2[0];
        }

        /**
         * 根据传进来的sql语句 得出所有查询结果所在列的列名 把结果以数组的形式返回
         * 这个方法 主要是处理复合查询 -当查询结果两个或更多表中时 对其进行处理
         *开始时候 是想返回一条包含了所有查询结果的字符串     并且 不同的查询结果之间,不同表的查询结果  之间 以一定的形式隔开
         *
         *但是,后来发现 查询结果在多个表中的情况并不常见   在这时 返回结果中包含表名的话 反而 罗嗦   索性就把返回的 表名删掉了
         *同时  数组形式的数据     在网页中不容易显示 就把这个方法改动了
         *
         *最后检查时 才发现 ,最初写这个方法时 所要处理的问题 和  这个方法里 大部分的逻辑处理  都被 闲置了!都成了无用的东西。。
         *
         *
         *应对新的需求 返回的结果显的罗嗦   方法的内容有点多余
         *应对之前的需求   此方法已经不能胜任--->现在 这个方法 已经彻底被 改废了
         *
         *
         */
        public String[] getL(String str) {

            List list = new ArrayList();
            String lf = "";
            try {
                String sql = new String(str).trim().toLowerCase();
                // 如果查询结果不在一张表内
                if (sql.contains(",")) {
                    // 得到基础字段
                    String a = getA(sql);
                    String b = getB(sql);
                    // 得到单一字段
                    String[] a0 = a.trim().split(",");
                    String[] b0 = b.trim().split(",");
                    /**  双循环 遍历 比较2个数组 中的字段 把相同的一起取出---
                    // 把表后面写的别名与 列名前面写的别名 比较---找到,就放在一起*/
                    for (int i = 0; i < a0.length; i++) {
                        for (int k = 0; k < b0.length; k++) {
                            if (a0[i].contains("max") || a0[i].contains("min")) {
                                a0[i] = a0[i].substring(a0[i].indexOf("(") + 1,
                                        a0[i].indexOf(")"));
                            }
                            // 列名前的别名
                            String aa = a0[i].substring(0, a0[i].indexOf("."))
                                    .trim();
                            // 列名
                            String ab = a0[i].substring(a0[i].indexOf(".") + 1)
                                    .trim();
                            // 表名后的别名
                            String bb = b0[k].substring(b0[k].indexOf(" ")).trim();
                            // 表名
                            String ba = b0[k].substring(0, b0[k].indexOf(" "))
                                    .trim();
                            if ((aa).equals(bb)) {
                                if (ab.contains("*")) {
                                    ResultSet rs = Jc.getResultSet("desc " + ba);
                                    ab = "";
                                    while (rs.next()) {
                                        ab += rs.getString("Field") + ",";
                                    }
                                }
                                lf = ab.trim();
                            }
                        }    
                    }
                } else
                    lf += getLName(sql);
            } catch (Exception e) {
            } finally {
                return lf.split(",");
            }
        }

    /**
     *
     *  传进表名 返回此表所 对应的所有列名
     * @param table
     * @return List
     */
        public List getList(String table) {
            List list = new ArrayList();
            try {
                ResultSet rs = Jc.getResultSet("desc " + table);
                while (rs.next()) {
                    if(rs.getString("Field")==null||rs.getString("Field")=="")
                        continue;
                    list.add(rs.getString("Field"));
                }
            } catch (Exception e) {
                System.err.println("数据库查询列名出错" + e);
            }
            if (list == null || list.size() == 0) {
                throw new RuntimeException("没有查到此表名所对应的列名");
            }
            return list;
        }
        

        /**
         *
         *  传进表名 返回此表所 对应的所有列名
         *  
         * @param table
         * @return String[]
         */
        public String[] getArray(String table) {
            String k="";
            try {
                ResultSet rs = Jc.getResultSet("desc " + table);
                while (rs.next()) {
                    if(rs.getString("Field")==null||rs.getString("Field")=="")
                        continue;
                    k+=rs.getString("Field")+",";
                }
            } catch (Exception e) {
                System.err.println("数据库查询列名出错" + e);
            }
            if ( k == "") {
                throw new RuntimeException("没有查到此表名所对应的列名");
            }
        
            return k.split(",");
        }
        
        public static void main(String[] args) throws Exception {
            String sql = "SELECT * FROM ls.department where de_name like '%d%'";
            F f = new F();
            String[] a = (f
                    .getL("SELECT * FROM ls.department where de_name like '%d%'"));
            for (int i = 0; i < a.length; i++) {
                System.err.println("a[" + i + "] = " + a[i]);
                System.out.println("a.length = " + a.length);
            }
        }
        
        
        public String[] getColumns(String str) {

            List list = new ArrayList();
            String lf = "";
            try {
                String sql = new String(str).trim().toLowerCase();
                // 如果查询结果不在一张表内
                if (sql.contains(",")) {
                    
                    String a = getA(sql);
                    String b = getB(sql);
                    
                    String[] a0 = a.trim().split(",");
                    String[] b0 = b.trim().split(",");
                    /**  双循环 遍历 比较2个数组 中的字段 把相同的一起取出---
                    // 把表后面写的别名与 列名前面写的别名 比较---找到,就放在一起*/
                    for (int i = 0; i < a0.length; i++) {
                        for (int k = 0; k < b0.length; k++) {
                            if (a0[i].contains("max") || a0[i].contains("min")) {
                                a0[i] = a0[i].substring(a0[i].indexOf("(") + 1,
                                        a0[i].indexOf(")"));
                            }
                            // 列名前的别名
                            String aa = a0[i].substring(0, a0[i].indexOf("."))
                                    .trim();
                            // 列名
                            String ab = a0[i].substring(a0[i].indexOf(".") + 1)
                                    .trim();
                            // 表名后的别名
                            String bb = b0[k].substring(b0[k].indexOf(" ")).trim();
                            // 表名
                            String ba = b0[k].substring(0, b0[k].indexOf(" "))
                                    .trim();
                            if ((aa).equals(bb)) {
                                if (ab.contains("*")) {
                                    ResultSet rs = Jc.getResultSet("desc " + ba);
                                    ab = "";
                                    while (rs.next()) {
                                        ab += rs.getString("Field") + ",";
                                    }
                                }
                                lf = ab.trim();
                            }
                        }    
                    }
                } else
                    lf += getLName(sql);
            } catch (Exception e) {
            } finally {
                return lf.split(",");
            }
        }

        
        
    }




  • 相关阅读:
    SDL 开发实战(三):使用 SDL 绘制基本图形
    SDL 开发实战(二):SDL 2.0 核心 API 解析
    SDL 开发实战(一):SDL介绍及开发环境配置
    开源播放器 ijkplayer (六) :Android 下使用 ijkplayer 异常处理思路
    音视频编解码技术(二):AAC 音频编码技术
    FFmpeg开发实战(五):FFmpeg 抽取音视频的视频数据
    FFmpeg开发实战(四):FFmpeg 抽取音视频的音频数据
    FFmpeg开发实战(三):FFmpeg 打印音视频Meta信息
    FFmpeg开发实战(二):FFmpeg 文件操作
    FFmpeg开发实战(一):FFmpeg 打印日志
  • 原文地址:https://www.cnblogs.com/jiandanfy/p/1091823.html
Copyright © 2011-2022 走看看