获取时间
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(System.currentTimeMillis());
String formatTime = formatter.format(date);
Mybatis中类型转换(一般针对null值传入,而Oracle数据库不让插入null值情况)
第一种解决方式:在MyBatis全局配置文件中,在其Configuration->Settings中添加<setting name="jdbcTypeForNull" value="NULL" />
即可。
第二种解决方式,在resultMap中需要的字段后面添加jdbcType = xxx类型。
Oracle Sqlldr的环境变量加载不出来的问题
一般来说,cannot run program “sqlldr” (in xxx/xxx/xxx) error = 2 No such file or directory这个问题,都是因为在Java程序中Linux环境变量没有加载进来的原因。因此,我们应该在Java程序中让其加载进来。
CommandLine cmdLine = CommandLine.parse(line);//line为要执行的命令
DefaultExecutor executor = new DefaultExecutor();
ExecuteWatchdog dog = new ExecuteWatchdog(ExecuteWatchdog.INFINITE_TIMEOUT);
executor.setWatchdog(dog);
executor.setWorkingDirectory(new File(workPath));//需要处理的文件所在路径
Map<String, String> runtimeEnvironment = new HashMap<>();
runtimeEnvironment.put("ORACLE_HOME", sqlldrWorkPath); //sqlldrWorkPath为传进来的String类型的workpath。
runtimeEnvironment.put("LD_LIBRARY_PATH", "/xxx/xxx/xxx/xxx/xxx"); //这里为你的Linux环境变量文件夹路径。
exitValue = executor.execute(cmdLine, runtimeEnvironment);
CLOB字段为空在Java程序里面引用为null问题
这种情况可以在mybatis的resultMap中,设置javaType="String"来解决。
Oracle数据库更新表中字段时需要连接外表查数据的解决办法
需求
update table_a a, table_b b
set a.first = b.first,
a.second = b.second,
a.third = b.third
...
where a.fourteenth = b.fourteenth
...
这种更新方式在Oracle中是不允许的,因为Oracle不允许在update后面加入两张以上的表。会出现缺失set关键字问题。因此我们应该换一种更新方式…
update table_a a
set (a.first, b.first, a.third ...)
=(select b.first, b.second, b.third ... from table_b b
where a.fourteenth = b.fourteenth
...)
Spring 注入指定实现类
这种时候@Autowired就不起作用了。
因此,我们需要用另外一两个注解:@Resource
和@Qualifier
例子:
@Resource(name = "xxx")
这是根据在配置@Component、@Service、@Repository注解时给注解中添加的注解名来寻找所对应的那个实现类。
@Qualifier(“xxx”)这个是根据实现类的完整类名来注解的。xxx代表的是完整的实现类的类名。
Oracle 对象 = 比较和 like比较
DBMS_LOB.COMPARE(var1, var2)
可以让clob对象轻松的比较其它的字符串。
dbms_lob.instr(sourceString,destString,start,appearPosition)
模糊查询
使其函数大于0即可,比如dbms_lob.instr() > 0
Oracle clob字段替换指定字符以及正则替换
update xxx set xxx = REPLACE('原始字符串', '被替换的字符串', '替换的字符串')
update xxx set xxx = REGEXP_REPLACE('原始字符串', '被替换的字符串', '替换的字符串',1,N) //N 表示第几个匹配的字符串
SSM项目中,关于多模块打包,配置文件加载的事情
首先,在多模块项目中,主模块打包到tomcat下面,则主模块下的resource目录以及src/main/java目录为classpath。因此如果我们想要在辅助模块里面添加我们的属性文件,这是一般不允许的。因为可能整个项目会读不到你的配置文件。
因此,我们应该将自定义配置文件写在主模块下面。并且在主模块的applicationContext.xml文件中引入你自定义的配置文件。这样才能保证你的工具类能利用@PropertySource
和属性注解上添加@Value(${xxx.xxx})
正确读取到自定义配置文件中所有的属性。工具类可以写在你的辅助模块里面,而且你的辅助模块照样能用上述两种注解得到你的所有属性值。
实际项目中增量包的问题
部署在tomcat服务器上的项目,打增量包是为了覆盖掉原有文件和新增加文件。因此,我们不需要打jar包覆盖原有的包。我们只需要复刻一模一样的WEB-INF文件夹,去添加到原有文件夹里面。
tomcat项目的导入包存在在哪的问题:
在WEB-INF目录下的lib文件夹下。