Java实现在线SQL编程【完整版】

前言: 因为前段时间,项目组长分配的任务是要完结一个在线编写SQL并要完结查询功能的需求,终究需求将查询到的数据以JSON格局显现到字符是什么呼应数据的区域,以供操作者进行检查,一开始拿到需求时想着直接运用Mybatis进行操作不就开源软件能够了,完全没必mybatis框架要大费周章,因为在MyBatis中有个拼接SQL的语法,能够运用${sql}来进行履行输入的SQL句子,但是实际操作起来并不是想象中字符距离加mybatis中$和井号区别宽2磅的那么简略,因为运用MyBatis会将数据源固定开源我国在本项目所运用的数据库,而不能够进行数据源之间的切换,无法进字符串逆序输出行其他数据开源软件源中表的查询操作❌,所以在完结进程也是相开源中国当艰难曲折…

博客首页:派 大 星开源软件

⛳️ 欢迎重视开源节mybatis中$和井号区别 ❤️点赞 收字符距离在哪里开源众包设置藏 ✏️留言

本文由派大星原创撰写

系列专栏:项目从0建立

本系列项目从规划到完结源码悉数开源免费学习字符型变量运用,一同追向抱负,欢迎各位大佬监督打卡开发开源矿工开源节流是什么意思


Java完结在线SQL编程【完整版】


@TOC

难度分析

在线履行SQL句子的查询主要的难点分为以下几点开源矿工字符距离其一则是对JDBCmybatis分页插件实现原理部分的API了解的不够透彻,导致在完结某些工鞥是开源节流并不是想象mybatis一级缓存和二级缓存中的顺利;其二在于关于查询部字符是什么分特点的SQL句子该如何运用Java进行完结,是将输入的字符字符串逆序输出串进行切割再拼接还是开源阅览app下载安装运用直接整条句子的查开源矿工询操作;其三则是用户能够字符距离动态的切换数据源,并且对相应数据源下的表进行查询操作,假如运用Mybatis进行字符是什么SQL的查询操作则无法字符间距在哪里设置进行数据源的切换字符串逆序输出,只能查询所在微mybatis工作原理服务项目所衔接的数据库进行查询,不然无法进行相应的操作,即会呈现该数据库下并不存在所查询的某张数据库表的错误信息❌

项目回顾(在线编写SQL查询)

终究作用演示

Java完结在线SQL编程【完整版】

技术选型:

  • SpringBoot
  • My字符串是什么意思Batis-Plus
  • JDBC开源是什么意思
  • Vue
  • 代码修改器monaco-edi字符常量tor

需求分析

运用者在页面能够挑选切换需求操作开源阅览app下载安装的数据源,并在修改区域内输入SQL句子进行开源阅览app下载安装查询字符型变量字符距离加宽2磅怎样mybatis中$和井号区别设置,查询句子能够是全表查询表中一切开源软件字段或许依据所需查询指定开源节流是什么意思某几列字段对应的值开源节流是什么意思,点击查询之后即可在呼应数据之后以JSON的格局将查询到mybatis注解的每一条数据封装一个对象最后显现到呼应数据区域以供操作者字符距离加宽2磅进行观看开源代码网站github以达到可视化工具的作用。

Java完结在线SQL编程【完整版】

项目字符串逆序输出建立开源节流

① 引入项字符距离加宽2磅目所需求的相关Mav开源软件en依靠
<!--SpringBoot相关依靠-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>commons-lang</groupId>
  <artifactId>commons-lang</artifactId>
  <version>2.6</version>
</dependency>
<!--servlet-api相关依靠-->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>
<!--MySQL驱动相关依靠-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.28</version>
</dependency>
② 编写配置文件
server:
  port: 8080
spring:
  datasource:
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/data_source?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
③ 创立Controlle开源矿工r前端控制器
	@PostMapping("/dynamic-query")
	@ApiOperation(value = "动态履行SQL")
	public Result<?> dynamicQuery(@RequestBody DynamicQuery dynamicQuery){
		List<HashMap<Object,Object>> res = null;
		BladeVisualDb visualDb = bladeVisualDbService.getOne(new QueryWrapper<BladeVisualDb>().eq("id", dynamicQuery.getId()));
		List<HashMap<String,Object>> result = ConnectBySql.connAndExecSql(visualDb.getUrl(), visualDb.getDriverClass(), visualDb.getUsername(), visualDb.getPassword(),dynamicQuery.getSql());
		return Result.ok(result);
	}
④ 探究 JDBC中ResultSet中的办法
  • next()

Java完结在线SQL编程【完整版】

解说: 将光标从其当前mybatis注解位置开源软件向前移动一行。 Re开源是什么意思sultSet 游标最初位于第一行之前;第一次调用 next 办法使第一行成为当前行;第2次调用使第二行成为当字符间距怎么加宽前行,依此类推。实则对查询到的数据进行遍历操作

  • getStrin开源代码网站githubg(String columnLabel)

Java完结在线SQL编程【完整版】

解说: 依据表开源阅览中对应的列称号来查询到该列对应到的数据

  • getMetaData()
    Java完结在线SQL编程【完整版】

解说开源阅读 获取某张表中列的数量、类型和开源阅览列称号

  • findColumn(String columnLabel)

Java完结在线SQL编程【完整版】

解说: 回来某个列的索引值即下标

⑤ 获取一切的数据mybatisplus

因为运用者是能够动态的挑选数据源从而来对表中的数据进行相关操作,所以首要要查询出可供衔接开源软件的数据源

Java完结在线SQL编程【完整版】

	 /**
	  * 下拉数据源列表
	  * @return
	  */
	@ApiOperation(value = "下拉列表")
	@GetMapping("/db-list")
	public Result<?> list(){
		List<BladeVisualDb> bladeVisualDbs = bladeVisualDbService.list();
		return Result.ok(bladeVisualDbs);
	}
⑥ 完结履行查询逻辑

首要履行查开源软件询有两种方式:所字符距离加宽2磅有字段的全查询即se字符是什么lecmybatis面试题t * f开源节流是什么意思rom开源众包 xx 或许 查询指定字段即select xx from xx

  • 一切字段的全查询即select * f开源符距离在哪里设置mybatis怎么读rom xx

Java完结在线SQL编程【完整版】

在进行字符间距在哪里设置一切字段的查询时,开源节流是什么意思开源软件因为无法得知需求查询的表中有什么字段,所以首要需求对输入的SQL开源阅读字符串进行判别是否是mybatis面试题全字段查开源阅读询,然后即可获取查询表中的一切字段,然开源节流是什么意思后再逐个的进行查询出字段对应的值即可,此操作也是需求对输开源矿工SQL字符串进行切割的,拿出一切插叙的表名即可。

ResultSet resultSet = stmt.executeQuery(sql);
//假如输入的SQL归于select * 操作
if (sql.contains("*")){
  List<String> list = new ArrayList<>();
  //获取SQL中需求查询的表的结构
  ResultSetMetaData metaData = resultSet.getMetaData();
  int columnCount = metaData.getColumnCount();
  for (int i = 1; i <= columnCount; i++) {
    log.info("特点列   ======>{}",metaData.getColumnName(i));
    //获取表中的一切列
    list.add(metaData.getColumnName(i));
  }
  while (resultSet.next()){
    HashMap<String,Object> hashMap = new HashMap<>();
    for (String index : list) {
      //依据列称号查询出该列对应的数据
      String rs = resultSet.getString(index);
      //将其放入列和值存放HashMap中
      hashMap.put(index,rs);
      //将多个HashMap兼并成一个Map
      hashMap.putAll(hashMap);
    }
    res.add(hashMap);
  }
}
  • 查询指定字段即select xx from xx

Java完结在线SQL编程【完整版】

在运用JDBC进行指定字段查询时需求对输入的SQL字符串进行切割后将所需求查询到字符常量的字段再运用JDBC中的getStr字符距离加宽2磅怎样设置ing(String columnName)进行查询开源软件字段对应的值

    /**
     * 将SQL句子进行拆分
     * @param sql
     * @return
     */
    @NotNull
    private static List<String> getString(String sql) {
        List<String> list = new ArrayList<>();
        String str = sql.substring(0, sql.indexOf("from"));
        String realSql = str.replace("select", "").trim();
        if (realSql.contains(",")){
            String[] split = realSql.split(",");
            for (String s : split) {
                list.add(s);
            }
        }else {
            list.add(realSql);
        }
        return list;
    }

随后将切割完结的SQL存放到Lis字符t调集中再进行查询操作

ResultSet resultSet = stmt.executeQuery(sql);
while (resultSet.next()){
  HashMap<String,Object> hashMap = new HashMap<>();
  List<String> str = getString(sql);
  for (String index : str) {
    String rs = resultSet.getString(index);
    hashMap.put(index,rs);
    hashMap.putAll(hashMap);
  }
  res.add(hashMap);
}

通过对操作者输入的SQL即可完结对mybatis工作原理表的查询操作,因为所要完结开源众包的是可动字符串逆序输出态切换数据源开源节流从而进行相关的查询操作,所以在此mybatis框架操作逻辑中首要开源阅览app下字符型变量载安装需求衔接数据库,后再对输入的SQL进行切割查询等操作。兼并后的完整代码:

    /**
     * 衔接数据库并依据输入的SQL句子查询数据
     * @param url
     * @param driverClass
     * @param username
     * @param password
     * @param sql
     * @return
     */
    public static List<HashMap<String,Object>> connAndExecSql(String url, String driverClass, String username, String password, String sql) {
        Boolean result = false;
        Connection conn = null;
        Statement stmt = null;
        List<HashMap<String,Object>> res = new ArrayList<>();
        try {
            Class.forName(driverClass);
            System.out.println("------------衔接数据库-----------");
            conn = DriverManager.getConnection(url,username,password);
            stmt = conn.createStatement();
            ResultSet resultSet = stmt.executeQuery(sql);
            //假如输入的SQL归于select * 操作
            if (sql.contains("*")){
                List<String> list = new ArrayList<>();
                //获取SQL中需求查询的表的结构
                ResultSetMetaData metaData = resultSet.getMetaData();
                int columnCount = metaData.getColumnCount();
                for (int i = 1; i <= columnCount; i++) {
                    log.info("特点列   ======>{}",metaData.getColumnName(i));
                    //获取表中的一切列
                    list.add(metaData.getColumnName(i));
                }
                while (resultSet.next()){
                    HashMap<String,Object> hashMap = new HashMap<>();
                    for (String index : list) {
                        //依据列称号查询出该列对应的数据
                        String rs = resultSet.getString(index);
                        //将其放入列和值存放HashMap中
                        hashMap.put(index,rs);
                        //将多个HashMap兼并成一个Map
                        hashMap.putAll(hashMap);
                    }
                    res.add(hashMap);
                }
            }else {
                while (resultSet.next()){
                    HashMap<String,Object> hashMap = new HashMap<>();
                    List<String> str = getString(sql);
                    for (String index : str) {
                        String rs = resultSet.getString(index);
                        hashMap.put(index,rs);
                        hashMap.putAll(hashMap);
                    }
                    res.add(hashMap);
                }
            }
            //完结衔接数据库
            stmt.close();
            conn.close();
            System.out.println("查询衔接结束");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }catch (SQLException e){
            e.printStackTrace();
        }
        return res;
    }
    /**
     * 将SQL句子进行拆分
     * @param sql
     * @return
     */
    @NotNull
    private static List<String> getString(String sql) {
        List<String> list = new ArrayList<>();
        String str = sql.substring(0, sql.indexOf("from"));
        String realSql = str.replace("select", "").trim();
        if (realSql.contains(",")){
            String[] split = realSql.split(",");
            for (String s : split) {
                list.add(s);
            }
        }else {
            list.add(realSql);
        }
        return list;
    }
⑦ Vue前端引入monaco-editor组件进行编写SQL句子

Java完结在线SQL编程【完整版】

项目总结

在运用JDBC来进开源节流是什么意思行数据库的操作,在运MyBatis用时字符间距加宽2磅因为对其办法并不是悉数了解,所以需字符常量要边看源码边改善功能,因开源代码网站github此遇到问题时才会感觉到脑中知识储藏的开源阅览不足,现在只mybatis动态sql是完结了查询操开源中国作,还未完善CRUD悉数进程的字符串逆序输出操作。

Ending Ending

Java完结在线SQL编程【完整版】

发表评论

提供最优质的资源集合

立即查看 了解详情