夢見館

描述什么的最讨厌了

 
 
 
 
 
 

[置顶] 个人整理的东方音乐列表

2010-1-25 0:45:58 阅读(41) 评论(2)

虽然本人停止东方MP3资源发布已经很长一段时间了,但是该下载的还得继续下载这是不会改变的,与日俱增的列表自然也得继续整理下去。本来这个列表只是纯粹自用的,现在既然有人提起干脆就把它公开吧,希望能够帮到继续收集或者查找资料的朋友(转载请注明出处)。但是要先说明一点,这个只是本人手上的东方音乐的列表,请不要以“齐全”的眼光去看待。当然,有人能补充列表里的遗漏我无任欢迎,发现了错误也可以随时向我提出,总之大家一起来完善这个列表吧。

列表太长不方便直接贴出来,因此决定以文件形式保存在SkyDrive空间,用更新时间命名并且不删旧档。列表以XLS文档格式提供,请大家用好Excel的搜索及排序功能(没有Office的同学自重= =),团体、名称、年份这3项不用解释了,次序的作用是区分相同团体时的发行先后,每次更新的记录会在新增项用new字样标识。列表默认以“团体+次序”排序,这样比较接近以前在论坛里发布的样子,其他排序方式应当考虑收藏者的命名规则,反正自己做主吧。

点击进入列表下载页面
(2010.2.8更新,包括C76至C77之间大小展会191张)

阅读(41) | 评论(2) | 阅读全文>>

从Excel到SQLite

2010-2-1 9:36:24 阅读(5) 评论(0)

又是无聊的上班时间,继续敲代码娱乐去吧。上次说到要写个程序,把Excel的数据读出来再写到SQLite里去,其实一点都不难,十来行代码就可以做到。代码我贴出来好了,有JAVA开发环境的同学可以拿去试试(随便建个类,写到main方法里运行即可,注意处理异常),测试用的XLS就是置顶那里的东方音乐列表。
PS:程序需要用到的JXL(解出zip里的jxl.jar即可)和SQLite的JDBC驱动

long start = System.currentTimeMillis();
//设置编码方式解决某些×字符不能正确显示的问题
WorkbookSettings ws = new WorkbookSettings();
ws.setEncoding("ISO-8859-1");
Workbook workbook = Workbook.getWorkbook(new File("C:/20100201.xls"), ws);
Sheet sheet = workbook.getSheet(0);
System.out.println("XLS文档载入完成,耗时" + (System.currentTimeMillis() - start) + "毫秒");
start = System.currentTimeMillis();
Class.forName("org.sqlite.JDBC");
Connection cn = DriverManager.getConnection("jdbc:sqlite:C:/20100201.db");
cn.setAutoCommit(false);    //取消自动提交,设置回滚点
cn.createStatement().executeUpdate("drop table if exists album");
cn.createStatement().executeUpdate("create table album(id, team, name, year, seq, rise)");
System.out.println("数据库初始化完成,耗时" + (System.currentTimeMillis() - start) + "毫秒");
start = System.currentTimeMillis();
PreparedStatement ps = cn.prepareStatement("insert into album values(?, ?, ?, ?, ?, ?)");
int rows = sheet.getRows();
for (int i=1; i<rows; i++) {
 ps.setInt(1, i);    //以递增行数作为id列的值
 ps.setString(2, sheet.getCell(0, i).getContents());
 ps.setString(3, sheet.getCell(1, i).getContents());
 ps.setString(4, sheet.getCell(2, i).getContents());
 ps.setString(5, sheet.getCell(3, i).getContents());
 ps.setString(6, sheet.getCell(4, i).getContents());
 ps.addBatch();
 }
ps.executeBatch();    //通过预编译的SQL及传入参数实现批量插入数据
cn.commit();
cn.close();
System.out.println((rows - 1) + "条记录写入完成,耗时" + (System.currentTimeMillis() - start) + "毫秒");

运行的结果类似下图,如果你想浏览那个db文件,我可以推荐一个图形界面的管理软件,小而精的SQLiteSpy。

从Excel到SQLite - SAZABI - 夢見館

阅读(5) | 评论(0) | 阅读全文>>

浅谈JAVA读写Excel的几种途径

2010-1-29 19:19:58 阅读(22) 评论(0)

这几天工作比较清闲,为了打发时间所以试着写一个解析XLS的程序。前面说过,XLS除了是个电子表格外,还是个虚拟的数据库,现在要做的就是把这个数据库的记录读出来。C/C++放下太久忘得差不多了,还是用现在的工作语言JAVA吧,Excel本身是微软的东西,可以供JAVA操作的手段并不多,昨天我尝试了应该是所有网上可以找到的方法,今天在这里列出来做个总结。

JDBC-ODBC:这个是最容易想到的方法,载入驱动建立连接后就跟普通数据库操作没两样了,需要注意的是SQL里的表名为XLS内工作表的名称加上$符号并用[]包起来,列名则是该工作表标题行里的各列名称。如果要把第1列所有的值打印出来,代码看起来会是这样
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection cn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=C:/test.xls");
ResultSet rs =cn.createStatement().executeQuery("select * from [Sheet1$]");
while (rs.next()) System.out.println(rs.getString(1));    //数值型数据应该用getInt、getFloat等方法,否则会返回null

非常简单对不对?而且它还支持where查询和order by排序,完全就是我想实现的效果,但是有个严重问题让我不得不放弃,因为XLS里要是有汉字的话它就给你乱码了= =|||

POI:Apache这个东西是专门处理OLE2文档的,其中操作Excel的API叫做HSSF,它把XLS文件视为一个Workbook对象,往下还有工作表Sheet、行记录Row和单元格Cell等子对象。同样是把第1列所有的值打印出来,代码看起来会是这样
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("C:/test.xls"));
HSSFSheet sheet = workbook.getSheet("Sheet1");
int rows = sheet.getPhysicalNumberOfRows();    //行记录总数,包括标题行
for (int i=1; i<rows; i++) System.out.println(sheet.getRow(i).getCell(0));

乱码问题完美解决,但是没有SQL那些方便的查询和排序了,难道要在读取的时候对记录进行筛选,然后再放到一个List里去排序?另外跟JDBC类似,如果同一列存在多种数据类型的Cell的话,还需要进行判断处理(上面代码没有显式指定,POI会自动返回相应类型的值)。

JXL:感觉像是一个简化版的POI,使用方法很接近但功能要弱一点,它同样定义了Workbook、Sheet以及Cell等对象(注意没有Row),但是列记录数是对应整个工作表的,所以取Cell需要用到二维坐标,而且是奇怪的列、行顺序= =b
Workbook workbook = Workbook.getWorkbook(new FileInputStream("C:/test.xls"));
Sheet sheet = workbook.getSheet("Sheet1");
int rows = sheet.getRows();    //行记录总数,包括标题行
for (int i=1; i<rows; i++) System.out.println((sheet.getCell(0, i)).getContents());

跟POI的代码大同小异,同样没有乱码,也没有SQL可用,不过Cell有个getContents方法,可以将任何类型的值都以字符串返回,在某些应用场合里很是便利。

XLSJDBC:一个用于访问XLS文件的只读JDBC驱动,需要依赖POI,网上可以参考的资料相当少。特别注意连接的URL最后是指定到你放置XLS的目录,而SQL里的表名才是实际的文件名。继续是打印第1列所有的值,代码看起来会是这样
Class.forName("org.aarboard.jdbc.xls.XlsDriver");
Connection cn = DriverManager.getConnection("jdbc:aarboard:xls:C:/");
ResultSet rs =cn.createStatement().executeQuery("select * from test");
while (rs.next()) System.out.println(rs.getString(0));    //可能是使用POI的缘故,列计数是从0算起

没有乱码,但是SQL应有的查询和排序不知为何没起作用(表名没有确定到Sheet的关系么),这样用起来同样不方便。而且只读驱动顾名思义只有select功能,万一我要用到insert、update、delete不就傻逼了?

XLSQL:又是一个JDBC驱动,需要依赖JXL及更多乱七八糟的东西,参考资料比XLSJDBC更加稀缺,在使用方法上最大的区别是表名格式为“XLS文件名.工作表名称”。最后也是打印第1列所有的值,代码看起来会是这样
Class.forName("com.nilostep.xlsql.jdbc.xlDriver");
Connection cn = DriverManager.getConnection("jdbc:nilostep:excel:C:/");
ResultSet rs =cn.createStatement().executeQuery("select * from \"test.Sheet1\"");
while (rs.next()) System.out.println(rs.getString(1));

这个东西非常诡异,我用两个Excel测试一个能读,一个却报出SQL异常,说Table找不到,目前只可以排除数据多少和有无汉字的原因。不过老实说,看到要加一堆jar进去才能用的时候我就决定放弃它了,只是顺手试试而已。

看来看去,JAVA读写Excel还是问题多多(可能只是我水平有限,高手路过的话麻烦指导一下m(_ _)m),真要用的话感觉还是JXL比较适合,如果要做的软件实在需要应用SQL的话,还是老老实实搭个类似SQLite的数据库吧。或许我可以考虑写个程序,先用JXL把数据从Excel读出来、再用JDBC写到SQLite里面去,不过那是后话了(我可不想在数据库里面整理自己的东方音乐列表,而且从数据库导出的XLS效果也不怎么好)。

阅读(22) | 评论(0) | 阅读全文>>

只有列表,没有资源!

2010-1-25 9:21:25 阅读(15) 评论(0)

今天应某人要求把自己的东方列表“开源”了,其实一直以来都是用记事本整理的,现在要放出来供人参考于是花了几天做成Excel,不过为了自由排序这点也值了。要是从长远角度来说,以后自己写个音乐管理软件,如果要找个充当数据库的角色,XLS也是仅次于XML的最佳文档格式啊(越扯越远了,职业病……好吧我自重= =)。刚开始就不要跑太快了,先把列表还原到停止发布的那个状态吧,然后一周后更新C76那堆,春节前再更新C77前面的……反正进度会慢慢跟上来的(应该……)

现在算起来快有半年没去发布了吧,论坛不时也有人问东方MP3合集还有没有复活的机会,但我只能苦笑着回答没了。我又何尝不想把它们重新上传呢(明显是骗人的,那累死人的活谁想做- -|||),前提是你能找到一个长期稳定的FTP、并且愿意免费提供几百G空间,找不到的话,老老实实自力更生吧。

阅读(15) | 评论(0) | 阅读全文>>

光の旋律

2010-1-20 14:58:10 阅读(66) 评论(0)

光の旋律 - SAZABI - 夢見館

其实空之音的OP单曲昨天就已偷跑,不过刚刚经历完通宵加班,也就没啥力气爬上来码字了= =|||

Kalafina本身是为空之境界的主题歌演唱而成立的组合,但是并没有随着空之境界的完结而解散,这次空之音的OP正好有力证明了这一点。Kalafina的成员是不固定的,只是献声的都是梶浦由记旗下的歌姬,像Wakana、Keiko、Hikaru等等。梶浦的曲子非常好认,要么大气要么宛转,虽然经常有人说她啃老本换汤不换药,但我似乎就正好吃她这一套。记得刚看空之音听到OP的时候,我马上就为这首光之旋律所震撼,略带跳跃感的前奏比以往增加了一点新鲜感,随着歌声的深入逐步把旋律反复,到了后半部分就是典型的梶浦风格了,整首听下来就是个泪流满面啊。

虽然空之境界的几首主题歌都很不错,但个人感觉Kalafina在空之音OP的表现要更为出色一些,可谓1月新番最强音!(明明还没看下几部的家伙

阅读(66) | 评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
 

  SAZABI

广东省 广州市

 发消息  写留言

 
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
日志评论
评论列表加载中...
 
 
 
 
 

日历

 
 
模块内容加载中...
 
 
 
 
 

天气

 
 
模块内容加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2010