本来想直接买14寸的,但是当时他骑着够不着就还是选12寸的了.
建议买14寸的,我们骑到现在,但是当时买12寸的现在都换第二辆了,12村用不了多久
儿童自行车尺寸参照(只供参考):
12寸----适合1.5-4岁儿童
14寸----适合3-6岁儿童
16寸----适合4-8岁儿童
儿童自行车尺寸参照(只供参考):
12寸----适合1.5-4岁儿童
14寸----适合3-6岁儿童
16寸----适合4-8岁儿童
异常与Oracle错误的关联可通过EXCEPTION_INIT编译器指令实现。语法:
PRAGMA EXCEPTION_INIT(exception_name , oracle_error_number);
(在PL/SQL中使用编译器指令的语法都是以pragma打头,且只能在代码的声明部分使用。可参照自治事务的用法)
1>被关联的异常只能是用户自定义的异常,不能是预定义的异常名。当然用户可定义一个与预定义同名的异常(但不提倡这样做);
2>一个错误可以关联多个异常,关联同一个错误的异常不能在异常处理部分同时出现;
5、SQLCODE返回的是当前的错误号。
SQLERRM返回的是当前的错误信息文本。
如果错误(异常)是通过RAISE显式引发的用户自定义异常,且该异常没有通过EXCEPTION_INIT语句与错误代号进行关联,则SQLCODE返回值为1,而SQLERRM返回的信息是:ORA-06510: PL/SQL: unhandled user-defined exception。
也可以这样理解:用户自定义的异常默认与错误代号为1的错误进行关联,而错误代号为1的错误信息文本是:ORA-06510: PL/SQL: unhandled user-defined exception。
两个相关例子:
SQL> DECLARE
2 e_test EXCEPTION;
3 BEGIN
4 RAISE e_test;
5 EXCEPTION WHEN OTHERS THEN
6 DBMS_OUTPUT.PUT_LINE(SQLCODE);
7 DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_STACK);
8 END;
9 /
1
ORA-06510: PL/SQL: unhandled user-defined exception
PL/SQL过程已成功完成。
SQL> DECLARE
2 e_test EXCEPTION;
3 PRAGMA EXCEPTION_INIT(e_test ,-20001);
4 BEGIN
5 RAISE_APPLICATION_ERROR(-20001,'This is a test.');
6 EXCEPTION
7 WHEN e_test THEN
8 DBMS_OUTPUT.PUT_LINE(SQLCODE);
9 DBMS_OUTPUT.PUT_LINE(SQLERRM);
10 WHEN OTHERS THEN
11 NULL;
12 END;
13 /
-20001
ORA-20001: This is a test.
PL/SQL过程已成功完成。
6、使用RAISE_APPLICATION_ERROR方法引发异常并创建错误代号与错误消息。语法:
RAISE_APPLICATION_ERROR(error_number,error_message[,keep_errors]);
其中,error_number是在-20000到-20999之间的一个值。error_message是与该错误关联的文本.keep_errors的值为TRUE或FALSE,如为TRUE,新产生的错误就会追加到已引发错误的列表中(如果已经有错误的话)。如为FALSE(FALSE也是默认值),新发生的错误就会替换当前的错误列表。
SQL> BEGIN
2 BEGIN
3 BEGIN
4 RAISE_APPLICATION_ERROR(-20001,'This is a test.',TRUE);
5 EXCEPTION WHEN OTHERS THEN
6 RAISE_APPLICATION_ERROR(-20002,'I raised by 20001.',TRUE);
7 END;
8 EXCEPTION WHEN OTHERS THEN
9 RAISE_APPLICATION_ERROR(-20003,'I raised by 20002.',TRUE);
10 END;
11 EXCEPTION WHEN OTHERS THEN
12 DBMS_OUTPUT.PUT_LINE(SQLCODE);
13 DBMS_OUTPUT.PUT_LINE(SQLERRM);
14 END;
15 /
-20003
ORA-20003: I raised by 20002.
ORA-20002: I raised by 20001.
ORA-20001: This is a test.
PL/SQL过程已成功完成。
7、异常的传播
1、声明部分和异常部分引发的异常都会立即传播到该封装块。
2、使用不带任何参数的RAISE语句,再次引发当前异常。该语句只能在异常处理部分出现,通常是为了异常能从已被捕获的处理块中再次传出。
8、异常与事务
引发异常不会结束某个事务,就像终止某个代码块不会终止一个事务一样。
但是如果顶层的代码块以一个未处理异常而终止,该异常就会传播到调用环境,代码中产生的相应事务就会立即由服务器进行回滚。
9、异常可当作控制语句使用(如跳过某段程序的执行、终止整个程序的执行等)。
Error Message while executing the script:
Error code:-932Script error message:ORA-00932: inconsistent datatypes: expected - got -
possible solution:
1. check the parmaters type match the column type in select clause
2. check the result table type definition match the source table column type
3. copy part of the script to another editor window, try to run to get more determined error messages
--check the number of index and type
select index_name,index_type,table_name from user_indexes where table_name=upper('&table_name');
--check the indexed column
select * from user_ind_columns where index_name=upper('&index_name');
-check the size of index
select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&index_name');
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
此外,通过Log4j其他语言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。
二,使用前的准备。
1、下载log4j 地址为:http://jakarta.apache.org/log4j/docs/download.html.
2、你可能要用到的jar文件有: 如果需要将日志发送到邮箱,则需要javamail API,JAF API (the JavaBeans Activation Framework)
下载地址: http://java.sun.com/products/javamail/
http://java.sun.com/beans/glasgow/jaf.html
如果需要jms的支持,则需要jms API 下载地址为:http://java.sun.com/products/jms/vendors.html
三, Log4j介绍
Log4j由三个重要的组件构成:日志信息的优先级 priority,日志信息的输出目的地Appender,日志信息的输出格式(布局)layout。
日志的优先级,
从低到高,依次有:DEBUG,INFO,WARN,ERROR,分别用来指定这条日志信息的重要程度;如果定义了了输入的级别为INFO,则只有等于及高于这个级别的才进行处理,此时将输入INFO,WARN,ERROR。值得注意的是,级别中还有两个关键字,
ALL:打印所有的日志,
OFF:关闭所有的日志输出。
1、 Loggers
org.apache.log4j.DailyRollingFileAppender,将日志信息输出到一个,并且每天输出到一个新的日志文件,按照不同的配置可以定义每月一个日志文件,或者每周,每天,每小时,每分钟等输出一个新的日志文件。
org.apache.log4j.RollingFileAppender,将日志信息输出到一个文件,通过指定文件的的尺寸,当文件大小到达指定尺寸的时候会自动把文件改名,如名为example.log的文件会改名为example.log.1,同时产生一个新的example.log文件。如果新的文件再次达到指定尺寸,又会自动把文件改名为example.log.2,同时产生一个example.log文件。依此类推,直到example.log. MaxBackupIndex,MaxBackupIndex的值可在配置文件中定义。
org.apache.log4j.WriterAppender,将日志信息以流格式发送到任意指定的地方。
org.apache.log4j.jdbc.JDBCAppender,通过JDBC把日志信息输出到数据库中。
org.apache.log4j.net.SMTPAppender,将日志信息以邮件的方式发送到指定的邮箱。
3、输出格式(布局)layout
通过appender可以控制输出的目的地,而如果要控制输出的格式,就可通过log4j的layout组件来实现。通过配置文件定义一个appender的输出格式,Log4j提供的布局模式有以下几种:
org.apache.log4j.ConsoleAppender,输出到控制台
org.apache.log4j.HTMLLayout,以HTML表格形式布局
org.apache.log4j.PatternLayout,可以灵活地指定布局模式
org.apache.log4j.SimpleLayout,包含日志信息的级别和信息字符串
1.HTMLLayout 选项
LocationInfo=true:默认值是false,输出java文件名称和行号
Title=my app file: 默认值是 Log4J Log Messages.
2.PatternLayout 选项
ConversionPattern=%m%n :指定怎样格式化指定的消息。
3.XMLLayout 选项
LocationInfo=true:默认值是false,输出java文件和行号
实际应用:
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
值得一提的是org.apache.log4j.PatternLayout 以Pattern方式的布局,使用Pattern的方式来指定布局。
pattern 的参数如下:ConversionPattern参数的格式含义
格式名 含义
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28 ;比如 %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}.
格式可以参考 java类 SimpleDateFormat,不过 按照此类的设置会影响速度。你可以选择更快的方式 %d{ISO8601},%d{ABSOLUTE}, %d{RELATIVE}.或者使用log4j的ISO8601DateFormat, AbsoluteTimeDateFormat,RelativeTimeDateFormat 和 DateTimeDateFormat 方式.
%f 输出日志信息所属的类的类名
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
%m 输出代码中指定的信息,如log(message)中的message
%M 输出日志信息中所发生的方法名。
%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
-------------------------------------------------------------------
(1). 输出方式appender一般有5种:
org.apache.log4j.RollingFileAppender(滚动文件,自动记录最新日志)
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文件)
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
(2). 日记记录的优先级priority,优先级由高到低分为
OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。
Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这五个级别。
(3). 格式说明layout中的参数都以%开始,后面不同的参数代表不同的格式化信息(参数按字母表顺序列出):
%c 输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的维(如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName)
%d 输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
%l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
%n 换行符
%m 输出代码指定信息,如info(“message”),输出message
%p 输出优先级,即 FATAL ,ERROR 等
%r 输出从启动到显示该log信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
参考资料
1.http://www.vipan.com/htdocs/log4jhelp.html
Don't Use System.out.println! Use Log4j - Vipan Singla
2.http://jakarta.apache.org/log4j/docs/manual.html
Short introduction to log4j - Ceki Gülcü - March 2002
3.http://www-128.ibm.com/developerworks/cn/java/jw-log4j/
log4j提供了对日志记录的控制
4.http://logging.apache.org/log4j/docs/documentation.html
log4j提供的文档。
5. http://wc-stone.javaeye.com/blog/134854
6. http://www.blogjava.net/hua/archive/2006/08/29/66420.html
7. http://zhangxiang390.javaeye.com/blog/258455
-----------------------------------------------------
Log4j比较全面的配置 <<<<
LOG4J的配置之简单使它遍及于越来越多的应用中了:Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了,
log4j.rootLogger=DEBUG,CONSOLE,A1,im
log4j.addivity.org.apache=true
# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
#应用于文件
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis
# 应用于文件回滚
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用变量${java.home}、rolling.log
log4j.appender.ROLLING_FILE.Append=true //true:添加 false:覆盖
log4j.appender.ROLLING_FILE.MaxFileSize=10KB //文件最大尺寸
log4j.appender.ROLLING_FILE.MaxBackupIndex=1 //备份数
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#应用于socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
# Log Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
# 发送日志给邮件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=web@www.wusetu.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 用于数据库
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
#自定义Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n