每日记载内容总结24

1. linux tomcat 启动报错The BASEDIR environment variable is not defined correctly This environment
variable is not defined correctly This environment variable is needed to run this program

这个错是由于文件执行权限不足,解决办法就是给

$CATALINA_HOME/bin目录下所有.sh文件添加一个可执行权限即可

命令如下:chmod 755 *.sh

chmod 777 aa.txt 给文件所有权限
chmod 755 aa.txt 给属主执行权限,
chmod 770 aa.txt 给属主和属组权限
chmod 666 aa.txt 去掉文件的可执行权限

linux用9个权限位来控制文件属主,用户组,其他用户的权限。
r:read,   w:write,    x:execute,   -:none
r--read,读权限(4),w---write写权限(2),x---execute执行权限(1)
rwx=7
777代表 rwxrwxrwx 赋予所有权限
666=rw-rw-rw- 去掉文件的执行权限
755=rwxr-xr-x 将文件变为可执行文件,并且其他人不可以修改

u 代表属主
g 代表数组
o 代表其他用户
a 代表以上3个
+ 代表增叫相关权限
- 代表减去相关权限

chomd ugo-x aa.txt 减去所有用户的执行权限
chmod u+x aa.txt 给属主增加执行权限
chgrp wangxujun aa.txt 修改文件的属性组
chmod a+x aa 给所有人执行权限
chmod a-x aa   给所有人减去执行权限
chmod a+x ,a+r ,a+w aa 给所有人所有权限

2.涉及到设置eclipse的运行环境jdk的地方:

(1)java build path -> add libirary (2)Project->Properties->Java Compiler->Configure Workspace Setting (3)Run configuration 里面的vm

3.关于lucene的standardAnalyzer在配置文件里面的读取问题:

在3.0之前初始化lucene的标准分析器是不用传参数的,故初始化没问题

在3.0之后初始化lucene的标准分析器需要传一个版本的参数,故初始化会报错(由于后来建立索引操作移出项目,作为一个小项目运行,此问题解决方法未知)

This is a regression from JCR-2415 where we updated to Lucene version 3. Analyzers
that have a public empty default constructor still work, but the updated once that in Lucene 3 require a Version argument don't. Note that Jackrabbit already uses the StandardAnalyzer class as the default when no explicit analyzer is specified, so as a quick workaround you can just remove that configuration option.

在使用类反射实例化某个对象时,如果这个对象不包含无参数的构造函数,会出现这个错误

Caused by: java.lang.InstantiationException: org.apache.lucene.analysis.standard.StandardAnalyzer
    at java.lang.Class.newInstance0(Class.java:340)
    at java.lang.Class.newInstance(Class.java:308)

4.mysql用中间表批量更新(从一个表中查出的数据,按照与另外一个表的对应字段更新另外一个表的字段,比如本例的temp_id就是与另外一个表的对应字段,temp_name就是要更新的字段)

t_class 

CREATE TABLE `t_class` (
  `class_id` int(10) NOT NULL AUTO_INCREMENT,
  `class_name` varchar(20) NOT NULL,
  PRIMARY KEY (`class_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

t_user

CREATE TABLE `t_user` (
  `user_id` int(10) NOT NULL AUTO_INCREMENT,
  `class_id` int(10) NOT NULL,
  `user_name` varchar(20) NOT NULL,
  PRIMARY KEY (`user_id`),
  KEY `FK_OA_RORBIDDEN` (`class_id`),
  CONSTRAINT `FK_OA_RORBIDDEN` FOREIGN KEY (`class_id`) REFERENCES `t_class` (`class_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

t_class 的class_id 管理 t_user的class_id ,现在需要从t_user查出user_name 然后更新t_class的class_name

(1)CREATE TABLE t_tmp (temp_id INT(10)  PRIMARY KEY,temp_name VARCHAR(20));创建中间表

(2)INSERT INTO t_tmp SELECT tu.class_id , tu.user_name FROM t_user tu; 向中间表插入数据,一个是与需要更新的表的关联字段,一个是要更新的字段数据

(3)UPDATE t_class tc , t_tmp tt SET tc.class_name = tt.temp_name WHERE tt.temp_id = tc.class_id ; 更新数据

(4)DROP TABLE t_tmp 删除中间表

切忌用UPDATE t_class tc SET tc.class_name = (SELECT tu.user_name FROM t_user tu WHERE tu.class_id = tc.class_id) 如果t_class里面的class_id 比t_user里面的class_id 多的话,那么多的那部分不会被更新,反而全部变成空的

或者说 ,最简单的一个方法:

UPDATE t_class tc , t_user tu SET tc.class_name = tu.user_name WHERE tc.class_id = tu.class_id

原文地址:https://www.cnblogs.com/cuiyf/p/3415474.html