- JDBC
// Oracle String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://地址:端口(默认3306)/数据库名?useUnicode=true&characterEncoding=utf8"; //MySql String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@地址:端口(默认1521):数据库名"; //Sql Server 2000 String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; String url = "jdbc:microsoft:sqlserver://地址:端口(默认1433);DatabaseName=数据库名;"; // Sql Server 2005 String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; String url = "jdbc:sqlserver://地址:端口(默认1433);databaseName=数据库名"; String user = "登录名"; String password = "密码"; Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, password);
- 取值范围
public static void main(String[] args) { byte maxByte = 0x7f; byte minByte = (byte)0x80; System.out.println("maxByte = " + maxByte + ", minByte = " + minByte); short maxShort = 0x7fff; short minShort = (short) 0x8000; System.out.println("maxShort = " + maxShort + ", minShort = " + minShort); int maxInt = 0x7fffffff; int minInt = 0x80000000; System.out.println("maxInt = " + maxInt + ", minInt = " + minInt); long maxLong = Long.decode("0x7fffffffffffffff"); long minLong = Long.decode("-0x8000000000000000"); // bug?! 应该不需要再添加-号的 System.out.println("maxLong = " + maxLong + ", minLong = " + minLong); // float表示方式(32bit): 1bit(符号位, S) + 8bit(指数位, 无符号, E) + 23bit(尾数位, M) // 指数位为127的偏移值. 如00000001 = 1 - 127 = -126; 11111110 = 254 - 127 = 127; // 当指数位为11111111(255)时, 用于表示NaN,正负无穷数.具体见下列相关代码 // float计算: 符号位 * (2^指数位) * 尾数位 // 最大正单精度浮点数 0 11111110 1111111111111111111111111 float maxPositiveNumber = Float.intBitsToFloat(0x7f7fffff); // 最小正单精度浮点数 0 00000001 0000000000000000000000000 float minPositiveNumber = Float.intBitsToFloat(0x08000000); System.out.println("maxPositiveNumber = " + maxPositiveNumber + ", minPositiveNumber = " + minPositiveNumber); // 0. IEEE754规定 E=0, M=0, 则值为0. // 正0: 0 00000000 00000000000000000000000 float positiveZero = Float.intBitsToFloat(0x00000000); // 负0: 1 00000000 00000000000000000000000 float negativeZero = Float.intBitsToFloat(0x80000000); System.out.println("positiveZero = " + positiveZero + ", negativeZero = " + negativeZero); // 最大负单精度浮点数 1 00000001 0000000000000000000000000 float maxNegativeNumber = Float.intBitsToFloat(0x88000000); // 最小负单精度浮点数 1 11111110 1111111111111111111111111 float minNegativeNumber = Float.intBitsToFloat(0xff7fffff); System.out.println("maxNegativeNumber = " + maxNegativeNumber + ", minNegativeNumber = " + minNegativeNumber); // NaN, 非数值. E=255 M<>0 // 例子: 0 11111111 00000000000000000000001 float NaN = Float.intBitsToFloat(0x7f800001); System.out.println("nan = " + NaN); // 正无穷 S=0, E=255, M=0. 0 11111111 00000000000000000000000 float POSITIVE_INFINITY = Float.intBitsToFloat(0x7f800000); // 负无穷 S=1, E=255, M=0. 1 11111111 00000000000000000000000 float NEGATIVE_INFINITY = Float.intBitsToFloat(0xff800000); System.out.println("POSITIVE_INFINITY = " + POSITIVE_INFINITY + ", NEGATIVE_INFINITY = " + NEGATIVE_INFINITY); /* Consider the bit representation of an IEEE-754 binary64 format: s_eee_eeee_eeee_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm IEEE-754 binary64 values are derived as such: If e is more than 0 and less than 2047 (2047 is 111_1111_1111 in binary), then value is equal to (-1)s × 2e-1023 × (1 + m × 2-52). (These are the normal numbers.) If e equals 0, then value equals (-1)s × 2(e+1)-1023 × (0 + m × 2-52). (Besides zero, these are the subnormal numbers.) If e equals 2047 and m equals 0, then value equals (-1)s × infinity. If e equals 2047 and m not equals 0, then value equals NaN. (Unrelated fact: thus there is 2 × (252 - 1) different bit representations for NaN; cf. doubleToRawLongBits.) Therefore, the smallest positive IEEE-754 binary64 normal number is equal to: (-1)0 × 21-1023 × (1 + 0 × 2-52) = 2-1022 And the smallest positive IEEE-754 binary64 subnormal number is equal to: (-1)0 × 2(0+1)-1023 × (0 + 1 × 2-52) = 2-1022 × 2-52 = 2-1074 */ }
- url参数处理
URL特殊符号及对应的十六进制值编码: 1. + URL 中+号表示空格 %2B 2. 空格 URL中的空格可以用+号或者编码 %20 3. / 分隔目录和子目录 %2F 4. ? 分隔实际的 URL 和参数 %3F 5. % 指定特殊字符 %25 6. # 表示书签 %23 7. & URL 中指定的参数间的分隔符 %26 8. = URL 中指定参数的值 %3D 将获取参数的方法从request.getParameter()改为request.getQueryString(), 然后对获取的字符串进行另外解析.
- java文件路径空格及中文处理
TestURL().class.getResource("").getPath()或TestURL().class.getResource("").getFile()获得的路径,不能被FileReader()和FileWriter()直接应用。 原因是URL对空格,特殊字符(%,#,[]等)和中文进行了编码处理。 例如:空格变为%20。 方法(1),使用repaceAll("%20",' ')替换后,只能解决空格问题。但是路径中包含%和中文就不行了。 方法(2),使用URLDecoder.decode(str,"UTF-8")解码,但是只能解决一部分,若路径中含有+,也是不能解决的,原因是URL并不是完全用URLEncoder.encode(str,"UTF-8")编码的,+号被解码后,却变成了空格。 方法(3),可以解决所有的问题,用TestURL().class.getResource("").toURI().getPath(),但是需要处理URISyntaxException异常,比较麻烦点。
- joda time
// 计算时间差
long ms = (long)(3.33 * 12 * 30 * 24 * 60 * 60 * 1000) ;
System.out.println(ms); // 103576319999
DateTime dt1 = DateTime.now();
DateTime dt2 = dt1.plus(ms);
log(Years.yearsBetween(dt1, dt2).getYears(), // {int} 3
Months.monthsBetween(dt1, dt2), // {Months} P39M
Days.daysBetween(dt2, dt1), // {Days} P-1198D
Seconds.secondsBetween(dt2, dt1).getSeconds()); // {int} -103576319
Period p = new Period(ms); // 根据一段时长创建Period
log(p.getYears() , p.getMonths(), p.getDays(), // 0 0 0
p.getHours(), p.getMinutes(), p.getSeconds()); // 28771 11 59
p = new Period(dt1, dt2); // 根据两个时间创建Period
log(p.getYears() , p.getMonths(), p.getDays(), // 3 3 3
p.getHours(), p.getMinutes(), p.getSeconds()); // 19 11 59