首页 > 数据库 >java直连mysql操作数据

java直连mysql操作数据

时间:2024-02-01 11:11:59浏览次数:39  
标签:直连 preparedStatement java String setString private final mysql id

连接器

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * @author : chenKeFeng
 * @date : 2024/1/30 10:21
 */
public class MySQLConnector {
    
    private final String url;
    private final String userName;
    private final String passWord;

    public MySQLConnector(String url, String username, String password) {
        this.url = url;
        this.userName = username;
        this.passWord = password;
    }

    public Connection connect() throws SQLException {
        return DriverManager.getConnection(url, userName, passWord);
    }

    public ResultSet executeQuery(Connection connection, String query) throws SQLException {
        PreparedStatement preparedStatement = connection.prepareStatement(query);
        return preparedStatement.executeQuery();
    }

    public void close(Connection connection) throws SQLException {
        if (connection != null) {
            connection.close();
        }
    }
}

 

这里演示把用户的数据迁移到另一个数据库

定义变量

    //用户默认头像
    private static final String AVATAR = "xxx";
    //crm用户数据库
    private static final String URL = "jdbc:mysql://xxx:3306/user";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "xxx";

    //渠道数据库
    private static final String URL2 = "jdbc:mysql://xxx:3306/channel";
    private static final String USERNAME2 = "root";
    private static final String PASSWORD2 = "xxx";

    //需要变更到部门的部门id
    private static final String DEPTID = "xxx";
    //变更的部门初始化权值
    private static final BigDecimal INITVALUE = new BigDecimal("xxx");

    //角色id
    private static final String ROLEID = "xxx";
    private static final String ROLEName = "xxx";

 

原始方法实现crud

    public static void main(String[] args) {
        MySQLConnector connector = new MySQLConnector(URL, USERNAME, PASSWORD);
        MySQLConnector connector2 = new MySQLConnector(URL2, USERNAME2, PASSWORD2);
        try {
            Connection connection = connector.connect();
            Connection connection2 = connector2.connect();

            String query = "SELECT sui.id, sui.user_name, sui.phone_number FROM sys_user_info as sui join sys_staff_info as ssi on ssi.user_id = sui.id where ssi.user_type in(0, 2, 3) and ssi.deleted =0 and ssi.status in (0, 3) and sui.is_deleted = 0";
            ResultSet resultSet = connector.executeQuery(connection, query);

            List<CrmUserVo> userList = new ArrayList<>();
            //boolean numberExists = false;
            while (resultSet.next()) {
                CrmUserVo crmUserVo = new CrmUserVo();
                String id = resultSet.getString("id");
                String name = resultSet.getString("user_name");
                String mobile = resultSet.getString("phone_number");

                crmUserVo.setId(id);
                crmUserVo.setUserName(name);
                crmUserVo.setMobile(mobile);
                System.out.println("crm用户:" + crmUserVo);
                //查询渠道用户是否存在
                String sql1 = "SELECT COUNT(*) FROM channel_user WHERE phone_number = ? and deleted =0";
                PreparedStatement preparedStatement = connection2.prepareStatement(sql1);
                preparedStatement.setString(1, mobile);
                try (ResultSet result = preparedStatement.executeQuery()) {
                    if (result.next()) {
                        int count = result.getInt(1);
                        if (count == 0) {
                            //numberExists = true;
                            userList.add(crmUserVo);
                        }
                    }
                }
            }
            System.out.println("过滤后的数据条数" + userList.size());

            for (CrmUserVo crmUserVo : userList) {
                //获取部门详情
                Dept dept = new Dept();
                String deptSql = "SELECT * FROM sys_department_info WHERE id = ?";
                PreparedStatement deptPreparedStatement = connection2.prepareStatement(deptSql);
                deptPreparedStatement.setString(1, DEPTID);
                try (ResultSet results = deptPreparedStatement.executeQuery()) {
                    if (results.next()) {
                        String deptId = results.getString("id");
                        String deptName = results.getString("depart_name");
                        BigDecimal maxPowerNum = results.getBigDecimal("max_power_num");
                        Integer level = results.getInt("level");
                        String companyId = results.getString("company_id");
                        dept.setId(deptId);
                        dept.setDepartName(deptName);
                        dept.setMaxPowerNum(maxPowerNum);
                        dept.setLevel(level);
                        dept.setCompanyId(companyId);
                    }
                }
                
                BigDecimal maxValue = dept.getMaxPowerNum().add(INITVALUE);
                String insertQuery = "INSERT INTO channel_user (id, user_name, phone_number, avatar, invite_code, create_time, date_join, company_id, depart_id, status, power_num) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
                PreparedStatement preparedStatement = connection2.prepareStatement(insertQuery);
                String channelUserId = UUIDutils.getUUID32();
                preparedStatement.setString(1, channelUserId);
                preparedStatement.setString(2, crmUserVo.getUserName());
                preparedStatement.setString(3, crmUserVo.getMobile());
                preparedStatement.setString(4, AVATAR);
                preparedStatement.setString(5, createChannelUserInvite());
                preparedStatement.setTimestamp(6, Timestamp.valueOf(LocalDateTime.now()));
                preparedStatement.setDate(7, Date.valueOf(LocalDate.now()));
                preparedStatement.setString(8, dept.getCompanyId());
                preparedStatement.setString(9, dept.getId());
                preparedStatement.setInt(10, 0);
                preparedStatement.setBigDecimal(11, maxValue);
                int rowsAffected = preparedStatement.executeUpdate();
                System.out.println("插入用户数据:" + rowsAffected);

                if (rowsAffected > 0) {
                    //新增渠道用户和角色绑定关联
                    String insertRole = "INSERT INTO union_role_user (id, user_id, role_id, role_name) VALUES (?, ?, ?, ?)";
                    PreparedStatement rolePreparedStatement = connection2.prepareStatement(insertRole);
                    rolePreparedStatement.setString(1, UUIDutils.getUUID32());
                    rolePreparedStatement.setString(2, channelUserId);
                    rolePreparedStatement.setString(3, ROLEID);
                    rolePreparedStatement.setString(4, ROLEName);
                    int roleRows = rolePreparedStatement.executeUpdate();
                    System.out.println("插入角色" + roleRows);

                    //修改部门权值
                    String updateSql = "UPDATE sys_department_info SET max_power_num = ? WHERE id = ?";
                    try (PreparedStatement updatePreparedStatement = connection2.prepareStatement(updateSql)) {
                        updatePreparedStatement.setBigDecimal(1, maxValue);
                        updatePreparedStatement.setString(2, dept.getId());

                        int rowsAffected1 = updatePreparedStatement.executeUpdate();
                        System.out.println("修改部门权值: " + rowsAffected1);
                    }
                }
            }
            connector.close(connection);
            connector2.close(connection2);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

 

标签:直连,preparedStatement,java,String,setString,private,final,mysql,id
From: https://www.cnblogs.com/ckfeng/p/18000797

相关文章

  • BigInt:JavaScript 中的任意精度整数
    BigInts 是JavaScript中的一个新的数字基本(primitive)类型,可以用任意精度表示整数。使用 BigInt 可以安全地存储和操作大整数,即使这个数已经超出了 Number 能够表示的安全整数范围。umber 在JavaScript中被表示为双精度浮点数。这意味着它们的精度有限。......
  • 面试官:Mysql千万级大表如何进行深度分页优化?
    背景假如有一张千万级的订单表,这张表没有采用分区分表,也没有使用ES等技术,分页查询进行到一定深度分页之后(比如1000万行后)查询比较缓慢,我们该如何进行优化?数据准备订单表结构如下:CREATETABLE`t_order`(`id`BIGINT(20)UNSIGNEDNOTNULLAUTO_INCREMENTCOMMENT......
  • 经验之谈——Java包装类
    目录应用场景总结wisdomJava基本类型的包装类使用都很简单,查一下就懂。我这里主要想讨论一下,为什么要用包装类?基本类型就如同人的裸手一样,直接让他去干一些危险的家务是不行的,比如进烤箱拿出盘子。但是手包上了一个隔热手套,那么就可以很轻松的去做这个事了。同理,在Java的编......
  • Hive数据线下导入Mysql
    1.背景     最近在处理一个数据量级在1亿左右的数据,没办法mysql不好处理,只能把数据放到大数据集群进行处理,处理好后再把这亿级数据导入本地Mysql。2.实践(1)把需要处理的数据手动传到集群,上传的数据只有一万条左右,经过笛卡尔积以及各种运算后,结果数据条数有一亿左右,文件大小......
  • 每日一道Java面试题:说一说Java中的泛型?
    写在开头今天的每日一道Java面试题聊的是Java中的泛型,泛型在面试的时候偶尔会被提及,频率不是特别高,但在日后的开发工作中,却是是个高频词汇,因此,我们有必要去认真的学习它。泛型的定义什么是泛型?什么是泛型?这是个好问题,JDK5更新时带来了一个新特性-泛型,所谓“泛型”就是类型参......
  • MySQL 期末总结
    MYSQL一、对表结构进行操作1.主键1)添加主键--1.主键/* 方式一:创建表的时候在字段后面+primarykey 方式二:写完字段之后在指定主键,创建标的字段下面 [constraint<约束名>]primarykey*/usemydb1;createtableemp1( eidint, enamevarchar(20), d......
  • Java中比较两个字符串==和.equals()区别
    ​在Java中,==和.equals()都是用于比较两个字符串是否相等的运算符,==比较的是两个字符串的引用地址,而.equals()比较的是两个字符串的内容。只有当两个字符串变量指向同一个字符串对象时,==和.equals()才会返回相同的结果 参考文档:Java中比较两个字符串==和.equals()区......
  • Java学习----基本语法
    1.注释有哪几种形式(1)单行注释:通常用于解释方法内某行代码的作用(2)多行注释:通常用于解释一段代码的作用(3)文档注释:通常用于生成Java开发文档2.标识符和关键字的区别(1)标识符就是一个名字(2)关键字不可以当做名字,不可修改,关键字是被赋予特殊含义的标识符3.自增(自减运算符)(1)后自增,......
  • Java的面向对象
    面向对象什么是面向对象面向对象思想:物以类聚,分类的思维方式。面向对象适合处理复杂的问题,适合处理需要多人协作的问题属性+方法=类面对象的本质:以类的方式组织代码,以对象的组织(封装)数据。三大特性:封装继承多态回顾方法及加深方法的定义:修饰符返回类型break:跳出sw......
  • Java 异常
    异常Error和ExceptionJava把异常当作对象处理,并定义一个基类java.lang.Throwable作为所有异常的超类异常类分为两大类:Error错误和Exception异常Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些异常时,JAVA虚拟机(JVM)一般会选择终止线程Exception通常情况下可以......