【原创】再谈谈行转列
今天碰到了个需求需要将数据表中数据行转列显示,也就是要将多行的数据放到同一列中。自己前几年也写过类似的文章,感觉行转列这种类似的问题及需求一直存在呀,连oracle在11g中都专门新加了个函数,专门用来处理这类需求。言归正传,先看看上面提到的oracle11g中的这个函数:listagg,在11g系统下实验了下,确实比较给力。代码内容: with c as( select 1 id,'a' name from dual union select 2,'b' from dual union select 2,'c' from dual) select id,listagg(name,',')within group(order by name) names from c group by id除了可以
记录sysbase碰到的一个小问题
sysbase客户端使用类似SELECT XXX INTO TEMPTABLE FROM TABLEA语句时很正常,但在java程序用jdbc连接后使用同样的语句报错:com.sybase.jdbc3.jdbc.SybSQLException: The 'CREATE TABLE' command is not allowed within a multi-statement transaction in the 'tempdb' database. 经查资料,只要用具有sa权限的用户登入,在master数据库下执行下列语句即可: sp_dboption tempdb, 'ddl in tran', true sp_dboption tempdb, 'allow nulls by default', true 字面上看应该就是修改下db的属性,生效后,java程序执行正常。 [@more@]
【原创】 谈谈数据仓库(一)
这个时间,脑子很清醒,带着耳塞听着歌,突然想总结下,小谈下数据仓库。有疏漏或错误的地方还请朋友及时指出来。今天之前的同事突然联系我,谈起现在的工作,谈到数据仓库,我又想起我以前的工作,虽然我目前暂时没有和数据仓库打交道。但是之前在厦门曾与建行一起搭建信贷数据仓库,之后在阿里软件也基本是我负责那边的数据仓库,所以对这玩意多少还是有点感情的。毕竟有人说自己学习的技术就好比自己的孩子,总会有一种特殊的情感。对于圈子之外的人,对数据仓库这份工作总觉得有些神秘,但如果踏入了这个领域,可能更多的人会说句:哦
分析表,分析列,分析分析分析
好像Oracle是8i后开始推CBO,9i就默认是CBO了,当然如果要让表走CBO,就先要分析分析分析表了。如果没有表的统计信息话,就自动走RBO了。分析表语句如下:analyze table name compute statistics,当然这是最简单的一种写法,详细写法上网查吧。只要对表分析了之后,下次访问表时就是走CBO了。当然在这里还没完,分析列分析列分析列,为什么要这么怨念的打上这么多,是因为有时光分析表还是不够的。比如表test上的a字段,100w条记录,99w是0,1w是1,这个时候如果只做表分析的话,访问test,条件where a=xxx时,不管xxx是0还是1,统统都是
写着玩 Oracle rowid
rowid也算是Oracle特有的一个东西,既然存在,肯定有存在的道理。rowid其实是对该row对应的物理地址的一个描述。就像tom说过:A rowid is assigned to a row upon insert and is imutable (never changing) unless the row is deleted and re-inserted (meaning it is another row, not the same row!) 既然rowid是对物理地址的一个描述,那么就选取一个rowid来拆分下具体含义。比如我从表中select出来的一个rowid: AAAM98AAEAAAAG0AAA 在这里,第一位到第六位AAAM98是指数据对象号。第七位到第十位AAE是指相对文件号。第十位到第十六位A
一个sql语句——使列数据转换为行数据
今天被人问及一个问题,大致如下:假设一张表 JOB,数据是这样的NAME JOB1 A1 B2 A2 B想通过编写sql,使最后达到这样的效果NAME JOB1 AB2 AB第一反应是最好建立一个中间表,通过编写存储过程使之最后出现这样的结果,大致代码如下:declarename1 varchar2(50);name2 varchar2(50);job char(500);job1 varchar2(50);cursor darmee_c isselect distinct darmee.name,job.job from darmee,job where darmee.name = job.name;beginopen darmee_c;loopfetch darmee_c into name2,job1;exit when sql%notfound;if (name2 <> name1 and nam
有关java中的notify
做个记号,最近碰到的问题,没弄明白,近期解决。ps:发现最近博客里面突然多了好几个月前的博客,汗……[@more@]
解惑ThreadLocal
在hibernate中,对Session管理采用ThreadLocal模式。ThreadLocal模式是java中一种较为特殊的线程绑定机制。通过ThreadLocal存取的数据,总是与当前线程相关。上面这些话是别人说的,下面的是我写的。===================================================许多人看到上面这些话,肯定总是迫不及待的打开搜索引擎想找到相关资料,或者说是活生生的例子。结果大部分都像我一样空手而归。怒了,只好自己写了个测试代码。代码及运行结果如下所示:【代码】public class ThreadLocalTest extends Thread{ public void run() { for ( int i = 0;
关于x:inputFileUpload
inputFileUpload是myfaces里的一个组件,用来上传文件的。本人这几天一直试着使用这个组件,结果均以失败告终。上网搜查资料,结果是千篇一律,更加郁闷。几经尝试,终于发现为什么这组件失效。第一点:在<h:form>里需加上enctype="multipart/form-data"第二点:需在web.xml文件中加上以下东东:<filter><filter-name>extensionsFilter</filter-name><filter-class>org.apache.myfaces.component.html.util.ExtensionsFilter</filter-class><init-param><param-name>uploadMax
又一个问题,跟myfaces有关
今天试着用myeclipse直接来弄一个myfaces,主要是想试试用那个inputFileUpload。以为很简单,木哈哈。容器是weblogic 8。第一步,新建一个web项目。第二步,选择myeclipse ->add JSF,选择myface1.1。这个过程出现了一个提示:是否加入jsp-2.0这个包。选是。然后自动生成了一些配置文件,就没去修改。然后新建一个最基本的jsp,算是自动生成的吧。第三步,部署上weblogic。打开网页,没出现想要的结果。却出现:java.lang.IllegalStateException: org.apache.myfaces.webapp.webxml.WebXml.init must be called before!。试了一晚上,还
一点个人的java学习笔记
FilterInputStream的构造方法为protected访问级别,外部程序不能创建这个类本身的实例。char是字符类型,JAVA语言对字符采用Unicode字符编码,String类的不带参数的getBytes()方法则使用本地操作系统默认字符编码。通过wirte()及read()在内存中与数据源中进行编码转换。如果要输入或输出采用特定类型编码字符串,可以使用InputStreamReader或OutputStreamWriter。在Component类中提供了3个和绘图有关的方法:paint(Graphics g) 绘制组件的外观;update(Graphics g)调用paint方法,刷新组件外观repaint() 调用u
求助: sql2000对象名无效(表存在)
今天去机房将SQL2000升级到sp4,然后用java写个访问文件就出现了这个错误。先做个记号,以后再想办法。不知道有没有人好办法。网上查到的一些相关材料:sp_changeobjectowner更改当前数据库中对象的所有者。语法sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'。[@more@]q=
读书杂记Head first EJB(3)
今天书要还了,最后总结一下实体bean。实体bean中除了要放来自home及组件接口的方法和来自EntityBean接口方法外,还有一样:虚持久字段。这个到时会和部署文件有关联。实体bean很大的不同点在于实体bean的create() 及 remove() 。容器不会建立一个新的实体bean,而是会从池中取出一个来运行ejbCreate() 方法。客户调用这个方法在数据库中插入一个新行,但对客户来说,最终结果还是一个EJB对象引用。你可以想象出一般create()都是有参数的,要不然插入了新行岂不是一片空白。另外会话bean上的remove()意味着客户用完了这个bean,而实体上的
读书笔记Head first EJB (2)
今天就记一下EJB中最重要的部分:三个bean。开头:三个bean都要实现各自的接口,消息驱动除了要实现MessageDrivenBean接口外,还要实现MessageListener接口。会话及实体bean都有相应的home及组件接口,而消息驱动则没有。因为消息驱动bean没有客户。会话bean:分为两种,一是有状态,一是无状态。有状态bean存在钝化和激活,而无状态没有。因为无状态不知道自己的客户是谁,没有必要保留客户信息,当完成自己的使命后,就回到了池中,而有状态bean保留客户信息,但如果客户长期没有调用bean的业务方法,bean在容器中将大大影响效率,于是就
谈谈BufferedImage与输出流(JAVA)
碰到一个问题,如何将BufferedImage对象存入到文件中?查了一下JDK,看到了这样一个方法。在java.imageio.ImageIO里有这样的一个静态方法 write(RenderedImage im, String formatName, File output) 。直接调用该方法就可以解决。但将问题扩展一下呢,如何将BufferedImage对象存入到OutputStream中呢?首先,当然你可以写一个方法,将内部细节封装,比如就先调用上面的方法,从文件转化成流。这里提供另外一种方法:OutputStream out = new 你的OutputStream;JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder( out ); / *Thi