JAVA
用equals进行比较的时候,常量放在前面比如 “abc”.equals(str) 这样即使str是个null 也不会报错,如果是反过来 str.equals(“abc”) 当str为时null的时候 会报空指针错误
myeclipse点击tomcat没反应:到MyEclipse的工作路径,我的是“D:\Workspace”,到这个目录中去“.metadata.plugins\org.eclipse.core.runtime.settings”找一个含有deploy的.prefs文件删除即可(com.genuitec.eclipse.ast.deploy.core.prefs)。重新启动MyEclipse。
表单传递的是name=value的值,所以request.getP…(name);
Math
double ceil(double a) 向上舍入入 10.01=11
double floor(double a) 向下舍入 10.99=10
jdk版本错误:选中项目-》右键-》java build path ->找到jre system library -》选择edit-》进入界面选择alternate jre ->在后面的installed jres..里选择jdk1.6的目录上的jre -》ok 之后 清除 构建下就好了
do-while do{}while(); //while最后一定要加分号!!
所以java程序都是以class为组织单元。
类名首字母一定要大写,如果由多个单词组成则每个单词首字母都大写!
类名的命名遵循:帕斯卡命名规则。
创建对象: 类名 对象名=new 类名();构造方法没有返回值,构造方法名字和类名一样。
例如:School center=new School();
调用类: 对象名.属性; 对象名.方法();
创建对象及其方法:
public class teacher{
//创建类testcher
******************
public void show(){
//创建方法show
******************
}
}
注意:创建方法的时候 有括号! 类里面的输出语句必须在方法里面。
写程序前先想好,需要创建什么类,然后每个类都有什么属性和方法。
重要!!:每个类即使不构造方法也会自动创建无参构造方法:public stu(){} 但是如果没有写无参构造方法直接写了代参构造办法:public stu(String name){} 则会把无参构造方法覆盖掉!!此时使用Stu s=new Stu();则会报错! 如果要用有参构造方法,则最好写个空白的无参构造方法。
构造方法的时候:public string work(String name;int score){} 注:括号里面的形参必须带有int string 等。
封装的时候,在类里面的属性是private 方法是public。
不能在普通方法里面定义static变量。
不能在静态static方法中直接使用实例的参数。
子类调用父类方法和属性的时候,super要放在第一句!
子类调用父类pet的构造方法的时候,可以使用super(name);就如同pet(name);
子类构造方法没有通过super显示调用父类有参构造方法,也没有通过this显示调用自身其他方法,则系统默认调用父类的无参构造方法。
继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里,子类都能继承; 如果是默认权限修饰符修饰的话,就必须在一个包里面!
一个类中可以写多个类,但是只能有一个类的权限修饰符是public!
在方法中如果有返回值为boolean的。返回值要在方法体的判断外面,最好不要写在if或者循环里面,否则会报错!
instanceof 是用来比较是否是一个类。 比如:hanbing instanceof Student; 就是判断hanbing是不是学生类,是的话返回true,不是的话返回false。
如果类没有提供任何自定义方法的时候,系统会自动提供一个无参的方法体为空的默认构造方法,一旦提供了自定义构造方法,系统将不会再自动提供这个默认构造方法。如果要用它,必须手动添加。
构造多态的时候,在子类和父类都要有这个方法。(原理:子类的方法是对父类方法的重写,在使用的时候,会自动判断是那个子类,并运行相应的方法)
在抽象类里面的抽象方法必须在子类方法中有相应的方法重写,否则会出错!
使用多态的时候,父类里面的所有方法都可以直接使用,子类里面的特有方法需要经过向下转型之后才能使用。
用if判断输入的数值的时候,如果判断超过两个,需要先把输入的数值赋值给一个变量,然后用这个变量进行判断,否则会出错。比如:in=input.nextInt(); if(input.nextInt()==1){} if(input.nextInt()==2){} if(input.nextInt()==3){} 这种会出现错误,会在判断输入值不为1 是否为2的时候 需要再次输入之后才能运行,所以需要赋值给一个变量,用变量去进行判断!!
在使用继承的时候, class Cat extends Pet;{ //cat特有的方法 public int getFeed(){}} Pet pet; pet=(Cat)pet; 再输入 pet.getFeed.equals(???);的时候会自动变换为(((Cat)pet).getFeed).equals(???); 原因:在这种情况下系统会自动的变化,是为了保护pet一定为CaT类。否则:pet.getFeed().equals(??);系统会认为是(Cat)(pet.getFeed()).equals(??);意为:强制转换pet.getFeed()为Cat类型,会报错!!
如果在父类和子类里面都有相同的静态方法(非抽象),那么在Pet pet=new Dog();的时候调用这个方法是调用的父类的静态方法。
如果在父类和子类里面都有相同的属性,那么在。。。的时候,调用这个属性是调用的父类的属性。
接口不能被实例化,不能有构造方法!!
在自定义的异常里面的方法,不能使用 void 因为会默认返回错误提示,如果使用了void会出错。
构造方法的时候不要加void,否则在继承这个类的时候,使用的话 会提示错误。(错误提示:构造方法必须出现在第一行)
用Comparable类的sort()放大对元素进行排序的时候,因为Map和Set集合是无序的,所以不能对这两个做排序。(可以用list接口进行排序)
string的字符串是从0开始的元素集合,在调用string的substring的方法的时候,起始位置为查找indexof方法+1,结束位置为indexof的值。
在FileInputStream的read方法,是每使用一次read就输出下一个值,和Scanner 的Next()的方法一样。
解决读取文本文档的时候出现乱码的情况:
FileReader fl=new FileReader(“c:/pet.template”);
InputStream in=new FileInputStream(“c:/pet.template”);
Reader reader=new InputStreamReader(in, “GBK”);
可以用System.out.println(System.getProperty(“file.encoding”));来查看电脑默认的编码模式。
如果不想某个属性被序列化,可以使用关键字transient来修饰,这样反序列化之后这个属性就为null。
在socket传输数据时,如果要传输对象,那个这个对象一定要实现接口Serializable,只有实现接口之后才能序列化。
HashMap的键值不要存放可变化对象,否则需要重写这个对象的hashCode()方法;
html
isNaN(num) 判断num是不是 非数值 类型,或者能不能转换成非文本。 比如字符串型“123”就返回false 因为可以转换成数字型的123。如果是其他的文本,则是true;
用setInterval()和setTimeout()的时候,第一个参数要加双引号,否则报错。
设置一个按钮点击之后就无法再次点击:οnclick=”this.disabled=true;”(注:里面分号后面还可以继续加入字段)
正则表达式:
^ 开始 $结束
[] 包含,默认是一个字符长度
[^] 不包含,默认是一个字符长度
{n,m} 匹配长度
?等价于匹配长度{0,1}
*等价于匹配长度{0,}
+等价于匹配长度{1,}
\d等价于[0-9]
\W等价于[A-Za-z_0-9]。
MySQL
create database (if not exists) t1 character set gbk;如果不存在t1数据库 则创建并设置默认编码为gbk (utf8)。
alter database t1 character set=utf8; 改变数据库t1的编码方式为utf8。
drop database (if exists) t1;如果存在t1数据库 则删除。
show create database t1; 显示t1数据库的信息
select database();显示目前打开的数据库
show columns from tb1;显示tb1数据表的结构;
delete from tb1 where id=1;删除tb1数据表里面id=1的那一行数据
unique key 唯一字段
show indexes from pro;显示子表索引
show indexes from pro\G;以列表的姓氏显示子表索引
foreign key (pid) references pro(id) 设置子表中pid列为主表pro中id列的外键(在创建数据表的时候,直接写在创建属性里面)
cascade 从父表删除或更新且自动删除或更新子表中匹配的行 用法如下:
foreign key (pid) references pro(id) on delete cascade (创建子表的时候 写在创建属性里面)
asc(升序) 或desc(降序) 直接放在order by 字段名 的后面即可
alter table t1 rename as t2; 把数据表t1的名字改成t2;
alter table t2 add id varchar(4) not null;给数据表t2 增加一新列id;
alter table t2 drop id;删除数据表t2里的id列的数据;
alter table t2 change id pid smallint(4);修改数据表 t2 里面的id列为pid列,且属性变为smallint(4);
alter table t2 modify id int(10);修改数据表t2里id列的数据属性为int(10);
alter table t2 drop foreign key id;删除数据表t2的主键id;
insert into tb1(id) values(12);给数据表tb1的id列添加数据为12;
update tb1 set id=10,sname=’tom’ where sid=100;设置数据表tb1里面sid=100那一行数据的 id=10,sname=’tom’
DISTINCT 不重复的 用在select 后面;例如:select distinct sec from student;
%:表示任意个或多个字符。可匹配任意类型和长度的字符。
_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)
SELECT 表字段 FROM 表名 WHERE MATCH (表字段) AGAINST (‘搜索字符串’);
drop index 索引名 on 表名;删除索引
select 列名1,列名2 into outfile ‘e:/abc.sql’ from 数据表名; 以文本的形式保存数据
load data infile ‘e:/abc.sql’ into table 数据表名;以文本的形式导入数据(注:必须与导出数据时候的表结构一样才可!)
备份(dos):
mysqldump -u root -p 数据库名[数据表1 数据表2]>e:/beifen.sql
-t 纯数据备份(没有创建表的语句)
-c 插入数据写出列名
-d 只保存表结构
-w “id<10” 只保存id<10的数据(注:条件必须使用双引号!)
恢复数据库(dos):
mysql -uroot -proot newDatebase
su 切换用户
su - root 切换用户并且切换用户环境
su root 切换用户为root并登录
clear 清除当前屏幕
ifconfig 查看所有的网卡(网络适配器)
ifconfig eth0 down 关闭eth0网络适配器
ifconfig eth0 up 打开eth0网络适配器
dhclient eth0 配置eth0网络适配器的ip地址
ps -ef|grep sshd 查看sshd进程的情况
kill -9 1456 关闭进程编码为1456的进程
service sshd start 启动sshd服务
service sshd restart 重启sshd服务
service sshd stop 停止sshd服务
ls -a 查看目前目录下的所有文件(包括隐藏文件)
ls -l 查看目录下所有文件的属性
/ 返回到linux根目录
cd / 返回根目录
man ifconfig 关于ifconfig的帮助文档
man 帮助文档
whereis pwd 查找所有pwd文件(夹)的位置
cat 查看小文件信息
tail 查看大文件信息
bin 文件夹存放所有的命令文件
etc 存放系统配置文件
mkdir -p 创建多层目录
rmdir 目录名 删除当前目录下的一个目录
rmdir -r /test 根据提示来删除根目录下面test文件夹和其内部文件
rmdir -rf /test 没有提示直接删除根目录下面的test文件夹
touch /../.. 根据目录创建文件
more service.xml 逐行或者逐屏查看文件内容
tail -f service.xml 查看文件最新的内容,实时刷新!ctrl+c会暂停
head -10 ….. 查看前十行
tail -10 ….. 查看后十行
vi 文件名
命令工作模式、编辑工作模式、底行模式
进入编辑模式:i/o/a 退出到命令模式:esc
进入底行模式: :(冒号) :wq!保存退出 :q!退出不保存
替换内容: :%/s/被替换的/替换的/g
显示行号: :set nu
全局修改默认为显示行号:/etc/virc vi的配置文件 最后加上 :set nu
重命名: mv 原始名 修改后的名字
复制: cp -fr 源文件 目标目录
更改权限 : chmod g+(-)w 文件 给组增加(删除) 写 权限
chmod u+(-)w 文件 给用户增加(删除) 写 权限
chmod o+(-)w 文件 给其他用户增加(删除) 写权限
chmod 777 文件名 为当前文件增加所有权限
chmod 777 -R 文件名 递归授权
添加用户/用户组:
groupadd(groupdel) 用户组名 添加(删除)用户组
groupadd -g 701 tomcat 添加一个id为701名字为tomcat的用户组
useradd -g 701 用户名 在id为701的用户组下创建一个用户
password 用户名 更改此用户的密码
chown tomcat 文件名 改变文件的所有者为tomcat
安装rpm软件 rpm -ivh 文件位置及文件名
root用户没有执行权限,但是也可以执行所有文件
tomcat用户下配置环境变量(用户级别):
echo $PATH
解压tar包
tar -xvf rar包 (解压到指定目录)
MVC 层
sevice层捕获异常,进行事务处理
事务处理:调用不同dao的多个方法,必须使用同一个connection(connection作为参数传递)
事务完成之后,需要在service层进行connection的关闭,在dao层关闭(PreparedStatement和ResultSet) 在BaseDao中不进行任何的关闭操作。
=============JDBC事务============
1、service (try catch)
connection.setAutoCommit(false);
dao.add()…update()…delete()
connection.commit();
connection.rollback();
close(connection,null,null);
2、dao(throws Exception)
executeUpdate()…..
close(null、preparedStatement、resultSet);
3、BaseDao(操作数据库的基类)静态类
获取连接(connection) throws Exception
查询操作(sql、params、connection、preparedStatement、resultSet)
更新操作(sql、params、connection、preparedStatement)
关闭资源(connection、preparedStatement、resultSet)
hibernate 错误:
1、ORA-00942: 表或视图不存在。
解决:看输出的语句 表名前面是否带有全局变量名,如有,删掉配置文件里面 schema=”JBIT” 这句话
2、InvalidMappingException: Unable to read XML
解决:.hbm.xml中dtd后面有个空格,导致无法解析,将此空格去掉即可
3、Date和TimeStamp之间的转换:
解决:如果需要时分秒,配置文件里的数据类型为:timestamp。 在类里面改属性可用Date来修饰。
如果只需要时间,配置文件里的数据类型为:date.
注:只用修改配置文件的数据类型即可,框架会根据这个数据类型来自动判断是够需要时分秒。
笔记:
1、session.createQuery(hql).list();
如果hql返回的是多列数据,则可以使用List