??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
try {
logger.info("start to registerDriver...");
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
logger.info(pros.getProperty("dbURL")+"--"+pros.getProperty("user")+"--"+ pros.getProperty("password"));
con = DriverManager.getConnection(pros.getProperty("dbURL"), pros.getProperty("user"), pros.getProperty("password"));;
if (con != null) {
st = con.createStatement();
rs = st.executeQuery("select 1 from dual");
rs.next();
if (rs.getInt(1) == 1) {
res = true;
}
}
}
然后我做了一?/span>java application桌面应用程序(extends FrameViewQ,在小应用E序中点M件触发此D代码,如下Q?/span>
private void dbTestMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
//从配|文件中dq接相关属?/span>
String info = "数据库连接异常,L认配|文件是参数是否正确?/span>";
Properties per = new Properties();
try {
logger.info("start to test the db connection...");
per.load(new FileInputStream(Content.configFile));
logger.info("system have loaded the config files successfully");
DbOper db = new DbOper();
if (db.checkDBConnect(per)) {
info = "数据库连接正?/span>";
}
logger.info("数据q接试l果Q?/span>" + info);
} catch (Exception e) {
logger.error("Exception when test the DB connection, ",e);
}
if (aboutBox == null) {
JFrame mainFrame = AnalyseExcelApp.getApplication().getMainFrame();
aboutBox = new DBTestResultBox(mainFrame, info);
aboutBox.setLocationRelativeTo(mainFrame);
}
AnalyseExcelApp.getApplication().show(aboutBox);
}
但在q行ӞE序头也不回地直接死了,调试时发现程序是?/span>
con = DriverManager.getConnection(pros.getProperty("dbURL"), pros.getProperty("user"), pros.getProperty("password"));;
q一行,不行了,也不报错Q就直接在此行一直呆着Q啥也不?/span>...
另外q有二种情况Q也让我比较奇怪:
1. 若同栯用此D|试代码,但不是在java application中,而是直接在一个普通的javacȝmainҎ中,可以测试通过?/span>
2. 若数据库边的是本机的数据库,那么此段试代码也可以通过Q在java application?/span>javacȝmainҎ中均可以?/span>
Z么,q接q程数据Ӟ?/span>java application中会无故down掉呢Q?/span>
ps. 排除数据库地址Q用户名Q密码等错误Q我的JDBC驱动是ojdbc14.jarQJDK 1.5
StringUtil.getUTF8Bytes是自写的一个类Q因为xmlhttp中传数据的时候默认是UTF-8传的?br> q样可以防止q出现?br>
在客LJS中:
在server中假如返回一些字W串q样很方便,但如何想动态组合成一些list的optionӞ可能不太方便了,
q时可以通过JS的evalҎ直接取一个页面内宏V具体如下:
在server中返回的是一个页面,如在spring MVC中可能如下:
return new ModelAndView("redirect:data.html");
在返回前d以做一些别的手术,典型的如request.setAttribute(name,value);
然后在JSP中进行解?如JSP?q种情况下,把它当时在js文gOK?Q?br>
myForm的定义要弄清楚,它应该在你所(发?h的页面的document里的对象
JS?没什么好想的)
其它Q?br>以上都是通过xmlhttp来用AJAX的,q样可以通过参数直接控制同步q是异步?br>
最q用DWR用感觉不错,挺好的!它的util中还提供了不的有用 & 常用的方法。不q一直不知道DWR中如何同步传输,今天扑ֈ了:
在DWR的engine.js文gQ有setAsyncҎQ就是设|调用是否是同步的,q是异步的?/p>
js 代码
在执行过E中在eclpise的consoleC可以看到hibernatel过底层其译成SQL后成?
select ... from Customer user where 1=1 and userr.hh like '%??????%'
的样子。我试过其以不同的方式~码Q可是都没有其最l以正确的结果返回。暂且不谈此Ҏ应该如何写,我主要是惌通过用另外一U查询方?在HQL中绑定参数预~译机制来解册个ؕ码问题?br />
参数l定机制有如下优点:
a 安全感,防止恶意用户非法调用DB的存储过E?br /> b 利用底层数据库编译SQL的功能,提高数据库查询性能。预~译是指底层数据库系l只能编译SQL语句一ơ,把编译出来的可执行代码保存在~存中,如果有多ơ执行相同的SQL语句Q不需要重新编译,只要从缓存中d卛_?br />
上面的执行q程Ҏ如下Q?br />
q样可以看到在console中最后所执行的SQL:
select ... from Customer user where 1=1 and userr.mc like '%惠止南国%'
在上面中有这L语句Q?br />
qry.setParameter(i, objs[i]);
q是属于按参C|绑定中的绑定Q意的参数cd?br />
org.hibernate.Query的参数绑定Ş式可以分?br />
1 按参C|绑?br />
2 按参C|绑?br />
Queryl定参数cd可以分ؓQ?br />
1 参数与持久化cd体绑?br />
2 l定Lcd参数
上面中的qry.setParameter(...)是q种cd,我们qry.setParameter(i, objs[i]);中是省略了第三个参数即Hibernate映射cd,如:
qry.setParameter(i, objs[i],Hibernate.STRING);
对于有些参数QHibernate能根据参数值的javacd推断出对应的映射cdQ此时不再要在setParameter()中显式指定映类型。如?br />
3 命名参C一个对象属性绑?br />
setProperties()Ҏ
个h觉得q个跟ORM技术的ibatis中的SQLMAP有些许相伹{它是用setProperties()Ҏ。如Q?/p>
AttentionQ对于日期型数据不能用setProperties()Ҏ通过实体来绑定?/font>
开始配|cvsntQ?br />
a 查看q行状态:
在about面板有个cvsnt ?cvsnt lock二个选项Q这儿可以对其进行start,stop服务
b d资源
在repository config面板中可以添加删除资源,q儿主要讑֮了repository 的name and root倹{如我在q儿name讄为\mycvsQroot为e:\mycvs。创建后会在对应的目录下生成cvsroot文g夹及cvs相关配置文g。 OK,定。这个地方可以要重启服务才能生效
c 兼容Q?br /> 在conpatibility option 面板上选择兼容的版本,注意一定要勾上respond as cvs 1.11.2 to version requestQؓ了与eclipse中的cvs兼容(在eclipse中的cvs版本很可能与你cvsnt版本不同)?br />
好了Q现在服务器上的资源路径已经讑֮好了?br />
通过IDE׃n一个工E?/strong>
打开eclipse新徏一个项目,然后在项目上叛_/team/share project Q小l?׃n目Q,在弹出的share project whith cvs reposity对话框中选择一个cvs路径(W一ơ当然是新徏?Q在host中填入CVSNT的主机地址如:192.168.12.17Q在repository path中填入cvsnt中的name值如Q?mycvs。user中写cvsnt所分配的用户名Qpassword中写入密?下面会讲些cvs中如何管理用?。在connection type中一般选择pserverq接cd。然后就是记住密码什么的... :-)。OK ,NEXT提示一路完成!
在客L从cvs上导入共享工E:
在客L的eclipse中打开cvs视图Q根据CVSNT的\径及其给你所分配的用L关信息新Z个CVS的资源\径。ok,开始引入共享工E了Q?br />
可以直接从cvs中check out出来Q也可以从new/project/cvs/projects from cvs。选中你刚刚把建立cvsnt资源路径,你可以在use an existing module中看到所有的׃n目了。然后选择一个你惛_入的目check out出来到本?...
全部完成^_^Q本来想剪几个图上来的,有些ȝQ太不方便了。不q过E比较简单,很快可以搞定。客Lcvsnt上的工程出是比较单的。主要是在cvsnt上的相关配置。我在网上找了些资料Q完成了如添加不同的用户。介l有个cvsnt的GUI工具可以直接囑Ş化操作。看介绍很easy ,下蝲URL:http://www.kdeopen.com(偶一直打不开Q郁P希望各位q气比我? 。我只好在控制台下添加删除用户了?br />
cvsnt用户理
在用L理中以下是cvs的一些命令参?br /> Usage: cvs passwd [-a] [-x] [-X] [-r real_user] [-R] [-D domain] [username]
-a Add user
-x Disable user
-X Delete user
-r Alias username to real system user
-R Remove alias to real system user
-D Use domain password
服务器工作在CVSNT用户单一验证方式下的时候,文gpasswd定义了CVSNT的用户信息,q里面保存着用户名,用户密码Q以及别名信息。默认状态下 没有该文Ӟ但是我们可以在CVSNTq工作在混合验证方式下时Q用pȝ理员登录,通过d用户命o来让CVSNT自动建立一个passwd文g?br />
dQlogin
cvs -d :pserver:administrator@127.0.0.1:/mycvs login
d用户
cvs -d :pserver:administrator@127.0.0.1:/mycvs passwd -a zyx
之后pȝ提示输入密码Q输入后服务器会新徏一个passwd文g。该文g的内容很单,形式如下Q?br />
zyx:YT2p2NmdmUlEg:
以第一行ؓ例:zyx为用户名QYT2p2NmdmUlEg为CVS使用UNIX标准加密函数对密码进行加密后的结果?br />
若想以合验证的方式验证得对应一个window的系l用户名(zyinxin)Q这时就用参?r来指?如:
cvs -d :pserver:administrator@127.0.0.1:/mycvs passwd -r zyinxin -a zyx
q时生成文g内容如下Q?br /> zyx:YT2p2NmdmUlEg:zyinxin
zyinxin用户的别?它是参考系l用?Q?br />
注意Q这个文件是不能在客Lq行修改的,不能checkout出来?/p>
d完成后你可以通过login来测试用户zyx是否创徏成功
删除用户:
cvs -d :pserver:administrator@127.0.0.1:/mycvs passwd -x zyx
附:参考了|上一些资料,刚刚学习Q愿一赯步。谢谢!
select
round(sysdate,'month') RM,
round(sysdate,'year') RY,
trunc(sysdate,'month') TM,
trunc(sysdate,'year') TY
from dual;
RM RY TM TY
---------- ---------- ---------- ----------
01-8?-06 01-1?-07 01-7?-06 01-1?-06
4>转换函数
隐式转换:pȝ自动转换,如:
varchar2 or char to number
varchar2 or char to date
number to varchar2
date to varchar2
昑ּ转换QhZ函数加以转换
日期Q字W,数据三者之间可以相互{?日期<-->字符<-->数据
日期格式:YYYY
日期-->字符
select to_char(sysdate,'yyyy-mm-dd') ch from dual
CH
----------
2006-07-28
数字-->字符
to_char(number,'format_model'),oramat_model有如下:
9---用对应数字表C?br />0---强制用0表示
$---加一$W号
L---前加本地货币单位表示
.---十进制点
,---千进制点
select to_char(0917,'l9999.99') local from dual
LOCAL
------------------
RMB917.00
字符-->日期
tselect to_date('19830917','yyyy-mm-dd') bir from dual
BIR
----------
17-9?-83
字符-->数字
select to_number('19821217','999999999') mybr from dual
MYBR
----------
19821217
注:所有函数均可以嵌套使用
5>通用函数
nvl(expr1,expr2)---expr1为空则显Cexpr2,否则昄expr1
nvl2(expr1,expr2,expr3)---expr1为空则显Cexpr2,否则昄expr3
nullif(expr1,expr2)---二个相等则显C空W?否则昄expr1
coalesce(expr1,expr2,...,exprn)---从expr1开始依ơ找C为空的exprQ找到就昄Q直到最后,否则?/p>
Cexprn
case表达式,如下?
6>多表查询
Ҏ通的多表查询Q也是不加where条g的时候实际上查询l果是各表的W卡集
外连接:oracle实现外连接时?L二边?号就OKQ当+在左ҎUCؓ双接,反之为左q接,它常常用来当要求未受限制对象的表数据也要求显C时Q如下:
select * from student
ID NAME ADDRESS
-------------------- --------------
1 zhangshan zhejiang
3 lishi hangzhou
7 lily guangzhou
select * from person
ID NAME ADDRESS
- -------------------- -----------
1 zhangshan zhejiang
3 lishi hangzhou
7 lily guangzhou
select p.id,p.sex,s.id,s.name,s.address from person p ,student s where p.id(+) = s.id
ID SEX ID NAME ADDRESS
-- ---- ---------- -------------------- ------------
1 boy 1 zhangshan zhejiang
3 girl 3 lishi hangzhou
7 lily guangzhou
select p.id,p.sex,s.id,s.name,s.address from person p ,student s where p.id = s.id(+)
ID SEX ID NAME ADDRESS
-- ---- ---------- -------------------- --------------
1 boy 1 zhangshan zhejiang
2 girl
3 girl 3 lishi hangzhou
4 boy
5 girl
self-joinQ就是同一张表q接Q用自连接的时候要注意排除重复的记录(自nQ@环重复等Q,比如说找出student表中所有住在同一个地方的人?br />select * from student
ID NAME ADDRESS
--- -------------------- ---------
1 zhangshan zhejiang
3 lishi hangzhou
7 lily guangzhou
2 name2 guangzhou
4 name4 guangzhou
5 name5 hangzhou
6 name6 shanghai
8 name8 shanghai
没有排除重复记录时的l果Q?br /> select t1.name,t2.name
from student t1, student t2
where t1.address = t2.address
NAME NAME
-------------------- --------------
lily lily
name2 lily
name4 lily
lily name2
name2 name2
name4 name2
lily name4
name2 name4
name4 name4
lishi lishi
name5 lishi
NAME NAME
-------------------- --------------
lishi name5
name5 name5
name6 name6
name8 name6
name6 name8
name8 name8
zhangshan zhangshan
已选择18?/p>
排除重复与@环记录之后:
select t1.name,t2.name,t1.address
from student t1, student t2
where t1.address = t2.address
and t1.id > t2.id
NAME NAME ADDRESS
-------------------- -------------------- -------------------
lily name2 guangzhou
name4 name2 guangzhou
lily name4 guangzhou
name5 lishi hangzhou
name8 name6 shanghai
cross join,无条件连接,实际上跟不带where时一样得到的是笛卡尔?/p>
natural joinQ也可以直接CjoinQ,Ҏ表中同名栏位来连接记?若表中可能出现多个同名栏位,则用using(col_name)来指定所栏位。colname不能指定表的别名Q限制条件用on来指?br />select id,p.sex,id,s.name from person p join student s using(id);
ID SEX ID NAME
---- ---- ---------- --------------------
1 boy 1 zhangshan
2 girl 2 name2
3 girl 3 lishi
4 boy 4 name4
5 girl 5 name5
在sql标准语法???q接用left(right) out join,限制条g用on可以了?/p>
full out join完全外连?思义是左外q接与右外连接都?br />select id,p.sex,id,s.name from person p full join student s using(id);
ID SEX ID NAME
---- ---- ---------- ------------------
1 boy 1 zhangshan
3 girl 3 lishi
2 girl 2 name2
4 boy 4 name4
5 girl 5 name5
8 8 name8
6 6 name6
7 7 lily