精华内容
下载资源
问答
  • 一、根据传入的参数动态替换SQL的参数 1、需求:以新增insert语句为例 2、实现类 package test.util; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...

    一、根据传入的参数动态替换SQL的参数

    1、需求:以新增insert语句为例

    2、实现类

    package test.util;
    
    import java.util.Map;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public  class SqlUtils{
    	public static String getSavesql(String sql, Map<String, String> map) {
    		StringBuffer rsql = new StringBuffer(); //接口对应的sql
    		Pattern p = Pattern.compile(rge); //编译对象
    		Matcher m = p.matcher(sql); //进行匹配
    		int index=0;
    		int length=sql.length();
    		while(m.find()) {
    			int start=m.start();
    			String text=m.group();
    			System.out.println("参数信息:"+text); //一定要先find(),然后才能group()
    			if(index<start) {
    				rsql.append(sql.substring(index,start));
    			}
    			//三元表达式 (expr1)?(expr2):(expr3) 在 expr1 求值为 true 时的值为 expr2,在 expr1 求值为 false 时的值为 expr3
    			//当传入的参数等于null时,该参数对应的值为null
    			rsql.append(map.get(text.substring(text.indexOf("#{")+2,text.indexOf("}")).trim())==null?null:"'"+map.get(text.substring(text.indexOf("#{")+2,text.indexOf("}")).trim())+"'");
    			index=m.end();
    		}
    		if(index<length) {
    			rsql.append(sql.substring(index,length));
    		}
    		System.out.println("————————————————————————————————————————————————————————————\n最终的SQL语句:"+rsql.toString());
    		return rsql.toString();
    	}
    }

    3、实现类

    package test.main;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import test.util.SqlUtils;
    
    public class TestSqL {
    	public static void main(String[] args) {
    		String sql="insert into user(id,name,sex,phone,createDate)values(#{id},#{name},#{sex},#{phone},#{createDate})";
    		Map<String, String> map = new HashMap<>();
    		map.put("id","202011030001");
    		map.put("name","来福");
    		map.put("sex","男");
    		map.put("createDate","2020-11-30");
    		String sql1 = SqlUtils.getSavesql(sql,map);
    	}
    	

    4、控制台输出

    参数信息:#{id}
    参数信息:#{name}
    参数信息:#{sex}
    参数信息:#{phone}
    参数信息:#{createDate}
    ————————————————————————————————————————————————————————————
    最终的SQL语句:insert into user(id,name,sex,phone,createDate)values('202011030001','来福','男',null,'2020-11-30')

    二、在修改语句时,如果没有传入某参数,则该参数的值为null,导致数据错误

    1、情况如:修改语句中只想修改name参数,于是没有传入其他参数,导致sex、phone等参数被动修改为null

    2、方案:修改前先查询该数据,并将查询结果作为参数传入修改语句

    3、逻辑:修改语句中id为必传参数,此刻我们可以根据id去查询相关数据,将查询结果作为参数重新传入,根据put的相同key值会被覆盖原则,我们可以实现新值替换原有值

    4、实现:需要注意的是,必须先赋值,再put新参数,根据java自上而下的执行顺序,值会被最后添加的覆盖

    String sql="update user set name = #{name},sex = #{sex},phone = #{phone} where id = #{id}";
    Map<String,String> map =new HashMap(); //参数
    Map<String,String> obj =userDao.get(map); //根据传入的参数去查询结果(主要用到id参数)
    map=obj;//将查询出来的值,作为参数,赋值给原参数对象
    map.put("id","202011030002");
    map.put("sex","保密");//map的put方法,遇到相同的key值会被覆盖
    String sql1 = SqlUtils.getSavesql(sql,map);

     

    展开全文
  • Java实现替换文本内容(转载) import java.io.*; public class replace { //目标文件路径 private static String path ="D:\\workplace\\data\\replaceSpace\\scsmcs.sql"; //创建目标文件 private static ...

    Java实现替换文本内容(转载)

    import java.io.*;
    
    public class replace {
    
        //目标文件路径
        private static String path ="D:\\workplace\\data\\replaceSpace\\scsmcs.sql";
    
        //创建目标文件
        private static File file = new File(path);
    
        public static void alterStringInNewFileReturnFile(String oldString,
                                                          String newString){
            try {
                long start = System.currentTimeMillis();
                //创建临时文件
                File newFile = new File("src/临时文件");
                if(!newFile.exists()){
                    newFile.createNewFile();
                }
                //创建随机文件流
                RandomAccessFile raf = new RandomAccessFile(file, "rw");
                //创建对临时文件缓存输出流
                BufferedWriter bw_NewFile = new BufferedWriter(
                        new OutputStreamWriter(
                                new FileOutputStream(newFile,true)));
                String string ; //存储读取内容
                long lastPoint = raf.getFilePointer(); //记录每次读取位置
                long point = 0; //记录第一次包含目标字符串位置
                int sum = 0; //记录包含目标字符串次数
                boolean flag = false; //判断是否是目标字符之后内容
                while ((string = raf.readLine()) != null){
                    //随机文件流读取的时候会将GBK格式转为ISO-8859-1,
                    //将读取的内容转回本地格式
                    string = new String(string.getBytes("ISO-8859-1"));
                    //判断是否包含目标字符
                    if(string.contains(oldString)){
                        if(sum == 0)
                            point = lastPoint;
                        string = new String(
                                string.replace(oldString, newString));
                        bw_NewFile.write(string);
                        bw_NewFile.newLine();
                        sum++;
                        flag = true;
                    } else if (flag){
                        bw_NewFile.write(string);
                        bw_NewFile.newLine();
                    } else {
                        lastPoint = raf.getFilePointer();
                    }
                }
                bw_NewFile.close();
                BufferedReader br_NewFile = new BufferedReader(
                        new InputStreamReader(
                                new FileInputStream(newFile)));
                raf.seek(point);
                while((string = br_NewFile.readLine()) != null){
                    string = string +"\r\n";
                    raf.write(string.getBytes());
                }
                br_NewFile.close();
                raf.close();
                newFile.delete();
                long time = System.currentTimeMillis() - start;
                System.out.println(sum+"个"+oldString
                        +"替换成"+newString+"耗费时间:"+time);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        public static void main(String[] args){
    
             String oldString ;
             String newString ;
    
             oldString = "/*END*/";
             newString = "/*%end*/";
            alterStringInNewFileReturnFile(oldString,newString);
    
             oldString = "/*IF";
             newString = "/*%if*/";
            alterStringInNewFileReturnFile(oldString,newString);
    
             oldString = "dto.eikbn";
             newString = "/*dto.getForm().getEikbn()*/";
            alterStringInNewFileReturnFile(oldString,newString);
    
             oldString = "/*dto.key1*/";
             newString = "/*dto.geyKey1()*/";
            alterStringInNewFileReturnFile(oldString,newString);
    
             oldString = "/*dto.where1*/";
             newString = "/*dto.getWhere1()*/";
            alterStringInNewFileReturnFile(oldString,newString);
    
        }
    }
    
    
    展开全文
  • Java根据id从数据库查询到SQLSQL中需要传参的地方用%s表示, 例如 String sql = "SELECT * FROM a WHERE a.id ='%s' AND a.name LIKE '%s%' "; 前端传到后台两个参数,1,张三,需要用前端传递的两个参数替换SQL...

    Java根据id从数据库查询到SQL,SQL中需要传参的地方用%s表示,

    例如 String sql = "SELECT * FROM a WHERE a.id ='%s' AND a.name LIKE '%s%' ";

    前端传到后台两个参数,1,张三,需要用前端传递的两个参数替换SQL中参数

    假如两个参数在一个String[] parameterList ={“1”,“张三”};

    实现方式:sql = sql.format(sql, parameterList);

    执行上面代码后sql="SELECT * FROM a WHERE a.id ='1' AND a.name LIKE '%张三%' ";

    到此,参数替换成功。

     

     

    注意:如果参数不需要模糊查询,在数据库中的sql定义参数的时候,a.id='%s'即可,如果是模糊查询需要前后都模糊,需要参数定义为:a.name LIKE '%%%s%%'。因为%在format中使用时是特殊字符。

    展开全文
  • /** *@创建日期2013-07-15 *@创建时间14:25:59 *@版本号V1.0 */ publicclassCosTest{ publicstaticvoidmain(String[]args){ Stringsql="select*fromteacherwhereid=?an...
    /**
     * @创建日期 2013-07-15
     * @创建时间 14:25:59
     * @版本号 V 1.0
     */
    public class CosTest {
        public static void main(String[] args) {
            String sql = "select * from teacher  where id = ? and name = ?";
            System.out.println(replaceString(sql,"101",2));
        }
     
        public static String replaceString(String str, String rstr, int a) {
            String searchStr = "?";
            int index = str.indexOf(searchStr);
            int count = 1;
            while (count != a) {
                index = str.indexOf(searchStr, index + 1);
                count++;
            }
     
            return str.substring(0, index) + rstr + str.substring(index + 1);
        }
    }

    转载于:https://www.cnblogs.com/stupidMartian/p/6103984.html

    展开全文
  • import java.sql.*;public class MSSQLText{public static void main(String args[]){String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind";String user="sa";//这里替换成你自已的...
  • 具体实现思路首先要确认sql中没有包含decode的字符串或者字段 有的话可以自行替代后再做操作先获取 decode的位置 然后截取出 decode括号内的部分 通过计算左右括号的数量即可截取出来然后再将 decode括号内的部分...
  •  今天在处理SQL语句的时候,由于数据库中存的格式是VARCHAR2型的,这就需要对SQL语句中WHERE条件后边的带数字的字符串加上单引号,对于字符串的处理,首先想到的就是正则表达式,对正则表达式,虽然有一些了解,...
  • 1.SPI是什么?SPI,即是Service Provider ... 一般可以用来启用框架拓展和替换组件,比如在最常见的数据库连接JDBC中,java.sql.Driver,不同的数据库产商可以对接口做不一样的实现,但是JDK怎么知道别人有哪些实现呢...
  • mybatis输出执行sql替换? mybatis.xml允许用户进行自定义插件plugins 插件需要实现Interceptor接口 代码如下: MyBatisSQLMonitorPlugin.java import org.apache.ibatis.executor.Executor; import org.apache....
  • 我已经实现了一个封装查询到该表的包 . 我还验证了,使用 pljson_dyn ,我可以从SQL查询到表格正确生成JSON . 但是,如果我通过调用返回表中数据的函数替换查询,则会失败 . 有没有可能做出这个选择?代码从select...
  • 背景说明 对于Mysql,有灵活的sql语句直接执行,且sql语句对于程序来说即一个字符串,很方便扩展或...这里通过java实现了一个类似sql的语言框架,采取json格式,以方便通过配置的方式实现mongo查询。 代码实现 查询主
  • 我也在这里转个贴,大伙可以互相学习java程序或类可以被存储到数据库中,作为PL/SQL替换或补充。Java可以被用来作为数据库的触发器、存储过程、函数、对象的成员函数。在按照下面的过程开发完java存储过程后,就...
  • 比如说我现在的数据库是sqlserver,我要做一些增删改查,但是增加的数据保存在mysql数据库中,查询在sqlserver数据库中查。大概意思就是慢慢用mysql数据库替换sqlserver数据库,这个能实现吗?跪求大佬解答
  • 1.PreparedStatement的理解: ① PreparedStatement 是Statement的子接口 ② An object that represents a precompiled SQL statement. ③ 可以解决Statement的sql注入问题,拼串...import java.sql.PreparedStatemen
  • 为了避免sql里面的字符串和注释对语法分析做干扰,我写了一个java函数,对sql进行修剪,删除里面字符串和注释,用空格代替 周末闲着没事,我用go重新实现了这个功能,感觉应该会有后来人可以用上 说明: sql里面的...
  • 1.需求:为了实现分表操作,我们所有的数据库创建的时候需要根据operatorId进行分表,所以每次创建一个operator时就需要创建一系列属于该operator的表,就是...然后我用operatorId去动态的替换该符号,然后再java代码里执...
  • 因为以前从未用数据库向java接口推送数据,所以为了实现这个demo我是一步一个脚印的踩坑啊!!! 此文章的作用以及应用场景:利用数据库主动推送数据,实现前端页面数据实时更新,替换ajax轮询机制。推送的依据是,...
  • 调用者可以根据实际使用需要,来启用、扩展或者替换框架的现有实现策略。在Java中,基于该SPI思想,提供了具体的实现,ServiceLoader,利用该类可以轻松实现面向服务的注册与发现,完成服务提供与使用的解耦。 Java...
  • 偷懒工具设计之sql2java 五一去厦门玩,在火车上突然想做一些工具出来,从而替换程序员的体力活(本人觉得做程序员,很多时候就是在做些Ctrl+C,Ctrl+V这样的体力活,如写一些javabean,写service中大同小异的...
  • 调用者可以根据实际使用需要,来启用、扩展或者替换框架的现有实现策略。在Java中,基于该SPI思想,提供了具体的实现,ServiceLoader,利用该类可以轻松实现面向服务的注册与发现,完成服务提供与使用的解耦。 Java...
  • 这里对resources、profile标签的使用进行介绍resources 标签打包资源Maven中会按照标准目录结构,将src/main/...典型地有MaBatis的sql映射文件。为此,可通过resources标签实现对资源文件的打包... <build> ...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 214
精华内容 85
关键字:

java实现sql替换

java 订阅