数据库Utils

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.sql.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/**
 * 数据库相关操作
 *
 * @author zhangkun
 * @version 1.0
 * @date 2021/9/14 下午4:38
 */
@Slf4j
public class DbDriver implements AutoCloseable {
    public static final String RETAILDATA = "retail_data";
    public static final String RETAILMANAGE = "retail_manage";
    public static final String SALESMAN = "salesman";

    // 关于AutoCloseable:http://blog.csdn.net/fireofjava/article/details/7220754
    private Connection conn;

    private static DbDriver retailData;
    private static DbDriver retailManage;
    private static DbDriver salesman;

    private void getCon(String dbHost, int dbPort, String dbName, String dbUser, String dbPassword) {
        try {
            String dbUrl = String.format("jdbc:mysql://%s:%s/%s?useUnicode=true&characterEncoding=UTF-8&useSSL=false",
                    dbHost, dbPort, dbName);
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }

    public List<Map<String, Object>> multiSelect(String sql) {
        if (sql.contains("*")) {
            throw new RuntimeException("查询sql语句不能使用*,必须指定列名");
        }

        List<Map<String, Object>> results = new ArrayList<>();
        List<String> columns = parseColumnName(sql);

        try (Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery(sql)) {
            while (rs.next()) {
                Map<String, Object> record = new HashMap<>();

                for (String col : columns) {
                    record.put(col, rs.getString(col));
                }

                results.add(record);
            }
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }

        return results;
    }

    public Map<String, Object> singleSelect(String sql) {
        List<Map<String, Object>> results = multiSelect(sql);

        if (results != null && results.size() > 0) {
            return results.get(0);
        }

        return null;
    }

    public int insert(String sql) {
        if (!sql.trim().toLowerCase().startsWith("insert")) {
            throw new RuntimeException("插入语句必须以insert开始");
        }

        return doUpdate(sql);
    }

    public int update(String sql) {
        if (!sql.trim().toLowerCase().startsWith("update")) {
            throw new RuntimeException("更新语句必须以update开始");
        }

        return doUpdate(sql);
    }

    public int delete(String sql) {
        if (!sql.trim().toLowerCase().startsWith("delete")) {
            throw new RuntimeException("删除语句必须以delete开始");
        }

        return doUpdate(sql);
    }

    @Override
    public void close() {
        // System.out.println("execute DbManager.close method!!");
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
    }

    private int doUpdate(String sql) {
        try (Statement stmt = conn.createStatement()) {
            return stmt.executeUpdate(sql);
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }

    private List<String> parseColumnName(String sql) {
        String regex = "select\\s+([a-zA-Z\\d_,\\s]+)\\s+from";
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
        Matcher matcher = pattern.matcher(sql);

        if (matcher.find()) {
            return Arrays.stream(matcher.group(1).split(",")).map(String::trim).collect(Collectors.toList());
        }

        throw new RuntimeException("sql语句格式错误,请不要使用表别名");
    }

    private DbDriver(String dbHost, int dbPort, String dbName, String dbUser, String dbPassword) {

        getCon(dbHost, dbPort, dbName, dbUser, dbPassword);
    }

    /**
     * 获取数据连接对象
     *
     * @param dbName
     * @return
     * @throws Exception
     */
    public static DbDriver getInstance(String dbName) {

        if (StringUtils.isBlank(dbName)) {
            throw new RuntimeException("数据源不存在");
        } else if (RETAILDATA.equals(dbName)) {
            return Optional.ofNullable(retailData).orElse(new DbDriver("x.x.x.x", 3306, "库名", "xxxx", "xxxx"));
        } else if (RETAILMANAGE.equals(dbName)) {
            return Optional.ofNullable(retailManage).orElse(new DbDriver("x.x.x.x", 3306, "库名", "xxxx", "xxxx"));
        } else if (SALESMAN.equals(dbName)) {
            return Optional.ofNullable(salesman).orElse(new DbDriver("x.x.x.x",3306, "库名", "xxx", "xxx"));
        } else {
            log.error("数据源不存在");
            throw new RuntimeException("数据源不存在");
        }

    }


    public static void main(String[] args) {
        try {
            DbDriver instance = DbDriver.getInstance(DbDriver.SALESMAN);

            int update = instance.update("update shopping_guide set `status` =1 where id =1 ");
            System.out.println(update);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
注意你的基带版本需要是MDC或者MDL一,准备材料:1,电脑安装Microsoft .NET Framework 4.5,点我2,下载三星驱动,点我3,下载解锁软件,点我下载4,下载安装DFS,点我下载5,全部安装好上面的软件在电脑6,MDC版本基带下载:点我下载二,降级基带为MDC版本1,下载odin:odin_V3.0.7.zip2,解压并且打开odin软件3,手机L720彻底关机(拔掉UIM卡,SIM卡)5,按住音量下+主页键+电源键进入警告的英文页面6,看到警告之后,按一下音量上键,进入了Downloading....下载模式,也就是挖煤模式或者说odin刷机模式。连上电脑数据线(台式电脑连后面的USB接口,网吧电脑一般被阉割了,是太监,不行)7,odin软件上点击PHONE,选择SPH-L720_MDC_Modem.tar.md5基带文件8,等待1分钟左右MD5验9,点击start,开始刷机三,破解电信插卡3G1,手机在拨号界面输入*#0808# (或者拨号##3424#),上面选择AP 下面选择MODEM+ADB+DM2,下载SPCUtility.apk 这个软件安装在手机3,手机连接WiFi或者网络,打开SPCUtility.apk这个软件,read 读取即可出SPC4,手机连接电脑数据线5,打开桌面的DFS软件6,连接三星端口7,输入PWD密码为2012112120131219 8,SPC密码是上面第2.3步骤获取到的6位数字 9,默认是写号,改为RuimOnly 读UIM卡模式 10,写电信的3G接口照图写ctwap@mycdma.cnvnet.mobi 11,写SimpleIP 12,写完上面的参数,关闭DFS。不要断开手机,也不用拔掉数据线。接着做下面的步骤四四,破解三网识别:1,打开桌面的S4 Flasher软件,点击scan and unlock,然后等待手机重启,就完成解锁三网了。到此完美三网插卡。2手机享受三网插卡吧!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值