mysql> create table t1(
-> name varchar(10));
Query OK, 0 rows affected (0.09 sec)
mysql> insert into t1 values('you'),('You'),('YOU');
Query OK, 3 rows affected (0.05 sec)
Records: 3 Duplicates: 0 Warnings: 0
對這個表,缺省情況下,下面兩個查詢的結果是一樣的:
+------+ | name | +------+ | you | | You | | YOU | +------+ 3 rows in set (0.00 sec) mysql> select * from t1 where name = 'YOU'; +------+ | name | +------+ | you | | You | | YOU | +------+ 3 rows in set (0.00 sec) |
如果想讓MYSQL知道你輸入的字母是大寫還是小寫的,修改表:
|
mysql> select * from t1 where name = binary 'YOU';
+------+
| name |
+------+
| YOU |
+------+
1 row in set (0.02 sec)
mysql> select * from t1 where name = binary 'you';
+------+
| name |
+------+
| you |
+------+
1 row in set (0.00 sec)
可以修改my.ini或者my.cnf
[mysqld]
lower_case_table_names=1
(0:區分;1:不區分)
然后重啟MYSQL服務。
mysql> show variables like '%case_table%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 1 |
+------------------------+-------+
1 row in set (0.00 sec)
注:WINDOWS系統不用修改,系統默認就是1
LINUX 系統默認是0。因為LINUX下的腳本都是區分大小寫的。
在使用MySQL-Front連接mysql的時候發生的這個錯誤
ERROR 1130: Host 192.168.88.160 is not allowed to connect to this MySQL server
更改 mysql 數據庫里的 user表里的 host項
localhost改稱%
mysql -u root -p
mysql>use mysql;
mysql>update user set host = '%' where user ='root';
mysql>flush privileges;
mysql>select 'host','user' from user where user='root';
現在就可以連接了!
權限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' with grant option;
簡介 在jsp頁面上經常遇到得到集合長度、字符長度、字符切取等應用需,在2.0以前這種需是許多程序員對JSTL及為不滿意的地方之一。為此在2.0 中添加了functions標簽,其提供對以上需求的支持。 使用方法 引用<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>函數說明: 函數 描述
fn:contains(string, substring) 如果參數string中包含參數substring,返回true
fn:containsIgnoreCase(string, substring) 如果參數string中包含參數substring(忽略大小寫),返回true
fn:endsWith(string, suffix) 如果參數 string 以參數suffix結尾,返回true
fn:escapeXml(string) 將有特殊意義的XML (和HTML)轉換為對應的XML character entity code,并返回
fn:indexOf(string, substring) 返回參數substring在參數string中第一次出現的位置
fn:join(array, separator) 將一個給定的數組array用給定的間隔符separator串在一起,組成一個新的字符串并返回。
fn:length(item) 返回參數item中包含元素的數量。參數Item類型是數組、collection或者String。如果是String類型,返回值是String中的字符數。
fn:replace(string, before, after) 返回一個String對象。用參數after字符串替換參數string中所有出現參數before字符串的地方,并返回替換后的結果
fn:split(string, separator) 返回一個數組,以參數separator 為分割符分割參數string,分割后的每一部分就是數組的一個元素
fn:startsWith(string, prefix) 如果參數string以參數prefix開頭,返回true
fn:substring(string, begin, end) 返回參數string部分字符串, 從參數begin開始到參數end位置,包括end位置的字符
fn:substringAfter(string, substring) 返回參數substring在參數string中后面的那一部分字符串
fn:substringBefore(string, substring) 返回參數substring在參數string中前面的那一部分字符串
fn:toLowerCase(string) 將參數string所有的字符變為小寫,并將其返回
fn:toUpperCase(string) 將參數string所有的字符變為大寫,并將其返回
fn:trim(string) 去除參數string 首尾的空格,并將其返回
示例
${fn.substring(string,begin,end)}
來一個我自己測試用的代碼
<%@ page contentType="text/html;charset=gbk"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<html>
<head>
<title>這個是 JSTL的 測試</title>
</head>
<body>
<c:set var="str" value="stringStRiNg"/>
<c:set var="t" value="tr"/>
<c:out value="${str} = ${fn:length(str)}"/>
<c:out value="${fn:toLowerCase(str)}"/>
<c:out value="${fn:toUpperCase(' ')}"/>
<c:out value="${fn:toUpperCase('AbCdEfg')}"/><br>
<c:out value="${fn:substring('asdfefg',0,3)}"/><br>
<c:out value="${fn:substringAfter('asdf','s')}"/><Br>
<c:out value="${fn:substringBefore(str,'g')}"/><Br>
<c:out value="${fn:trim(' sd dew e ')}"/><Br>
<c:out value=" d sd dew e "/><Br>
<c:out value="${fn:replace(str,'ing','IN')}"/><Br>
</body>
</html>
function delRepeat(arr){
var len = arr.length;
for(var i=len-1;i>=1;i--)
{
if(arr[i-1] == arr[i])
{
arr.splice(i,1);//splice()方法的應用
}
}
//return arr;
}
Array.prototype.delRepeat=function()
{
var tmpArr=[],rs=[],i,val;
for(i=this.length;i>0;i--)
{
val = this[i-1];
if(!tmpArr[val])
{
tmpArr[val]=1;
}else
{
rs.push(val);
this.splice(i-1,1);
}
}
tmpArr = null;
return rs;
}
兩個優點:
1、預先將this[i-1]保存在變量val中,減少訪問次數。
2、使用array.push方法,替換用變量保存數組長度的辦法。
























































































<HEAD>
<TITLE> New Document </TITLE>
<script>
//判斷當前頁面是刷新還是關閉
function a(){
if(event.clientX<=0&& event.clientY < 0){//>0是刷新,<=0是關閉當前頁
alert("開新的");
openwin();
}else{
alert("不開新的");
}
}
</script>
</HEAD>
<BODY onUnload="a();">
</BODY>
</HTML>

//if(friendnick.charCodeAt(i) < 0x4E00 || friendnick.charCodeAt(i) > 0x9FA5) {





java 中文字符長度判斷



















修改過的代碼



















1、OSCache是什么?
OSCache標記庫由OpenSymphony設計,它是一種開創性的緩存方案,它提供了在現有JSP頁面之內實現內存緩存的功能。OSCache是個一個被廣泛采用的高性能的J2EE緩存框架,OSCache還能應用于任何Java應用程序的普通的緩存解決方案。
2、OSCache的特點
(1) 緩存任何對象:你可以不受限制的緩存部分jsp頁面或HTTP請求,任何java對象都可以緩存。
(2) 擁有全面的API:OSCache API允許你通過編程的方式來控制所有的OSCache特性。
(3) 永久緩存:緩存能被配置寫入硬盤,因此允許在應用服務器的多次生命周期間緩存創建開銷昂貴的數據。
(4) 支持集群:集群緩存數據能被單個的進行參數配置,不需要修改代碼。
(5) 緩存過期:你可以有最大限度的控制緩存對象的過期,包括可插入式的刷新策略(如果默認性能不能滿足需要時)。
3、OSCache的安裝與配置
網上已經有一個不錯的使用教程:http://blog.csdn.net/ezerg/archive/2004/10/14/135769.aspx
4、有關“用OSCache進行緩存對象”的研究
這個是我今天要說的東西。網上對于OSCache緩存Web頁面很多說明和例子,但對于緩存對象方面說得不多,我就把自已寫得一些東西放出來,讓大家看一看是怎樣緩存對象的!
我基于GeneralCacheAdministrator類來寫的BaseCache類
- package com.klstudio.cache;
- import java.util.Date;
- import com.opensymphony.oscache.base.NeedsRefreshException;
- import com.opensymphony.oscache.general.GeneralCacheAdministrator;
- public class BaseCache extends GeneralCacheAdministrator {
- //過期時間(單位為秒);
- private int refreshPeriod;
- //關鍵字前綴字符;
- private String keyPrefix;
- private static final long serialVersionUID = -4397192926052141162L;
- public BaseCache(String keyPrefix,int refreshPeriod){
- super();
- this.keyPrefix = keyPrefix;
- this.refreshPeriod = refreshPeriod;
- }
- //添加被緩存的對象;
- public void put(String key,Object value){
- this.putInCache(this.keyPrefix+"_"+key,value);
- }
- //刪除被緩存的對象;
- public void remove(String key){
- this.flushEntry(this.keyPrefix+"_"+key);
- }
- //刪除所有被緩存的對象;
- public void removeAll(Date date){
- this.flushAll(date);
- }
- public void removeAll(){
- this.flushAll();
- }
- //獲取被緩存的對象;
- public Object get(String key) throws Exception{
- try{
- return this.getFromCache(this.keyPrefix+"_"+key,this.refreshPeriod);
- } catch (NeedsRefreshException e) {
- this.cancelUpdate(this.keyPrefix+"_"+key);
- throw e;
- }
- }
- }
通過CacheManager類來看怎樣緩存對象的,這個類中所用的News只是具體功能的類,我就不貼出來了,你可以自己寫一個!
- package com.klstudio;
- import com.klstudio.News;
- import com.klstudio.cache.BaseCache;
- public class CacheManager {
- private BaseCache newsCache;
- private static CacheManager instance;
- private static Object lock = new Object();
- public CacheManager() {
- //這個根據配置文件來,初始BaseCache而已;
- newsCache = new BaseCache("news",1800);
- }
- public static CacheManager getInstance(){
- if (instance == null){
- synchronized( lock ){
- if (instance == null){
- instance = new CacheManager();
- }
- }
- }
- return instance;
- }
- public void putNews(News news) {
- // TODO 自動生成方法存根
- newsCache.put(news.getID(),news);
- }
- public void removeNews(String newsID) {
- // TODO 自動生成方法存根
- newsCache.remove(newsID);
- }
- public News getNews(String newsID) {
- // TODO 自動生成方法存根
- try {
- return (News) newsCache.get(newsID);
- } catch (Exception e) {
- // TODO 自動生成 catch 塊
- System.out.println("getNews>>newsID["+newsID+"]>>"+e.getMessage());
- News news = new News(newsID);
- this.putNews(news);
- return news;
- }
- }
- public void removeAllNews() {
- // TODO 自動生成方法存根
- newsCache.removeAll();
- }
- }
之前大量的符合jsp1.2標準的項目中用到了${***},比如${1+2},但本意就是想顯示${1+2},而不是3,所以應該有控制是否解析el表達式的選項,我覺得分為三個級別:
1、設置整個應用服務器下的所有項目是否解析el表達式(控制所有項目)
(這個我還沒找到在哪,但應該有)。
2、設置整個項目使用el表達式,需要在web.xml中加上 (控制一個項目)
<jsp-config>
<jsp-property-group>
<el-ignored>false</el-ignored>
</jsp-property-group>
</jsp-config>
3、設置某個jsp頁面使用el表達式,需要在jsp頁面加上(控制單個頁面)
<%@ page isELIgnored="false"%>
你的應用服務器默認設為不解析el表達式了(我的tomcat5.0也是一樣),所以要用上面的方法修改,以在頁面/項目/應用服務器,級別解析el表達式。