美国虚拟主机Hostease

Mediawiki中文技术论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5789|回复: 1

[技术文档] 用kyotocabinet备份MediaWiki数据

[复制链接]
发表于 2011-8-22 10:05:28 | 显示全部楼层 |阅读模式
RAKsmart美国服务器
01 package jay;  

02   

03 import static java.lang.System.out;  

04   

05 import java.io.InputStream;  

06 import java.sql.Connection;  

07 import java.sql.DriverManager;  

08 import java.sql.ResultSet;  

09 import java.sql.Statement;  

10   

11 import kyotocabinet.Cursor;  

12 import kyotocabinet.DB;  

13   

14 public class TakeBack {  

15     static Connection conn;  

16     static {  

17         try {  

18             Class.forName("com.mysql.jdbc.Driver");  

19             conn = DriverManager.getConnection(  

20                     "jdbc:mysql://DBServer:3306/wiki", "user", "passwd");  

21         } catch (Exception e) {  

22             e.printStackTrace();  

23         }  

24     }  

25   

26     static void showHashDB() {  

27         DB db = new DB();  

28         if (!db.open("witube.kch", DB.OWRITER | DB.OCREATE)) {  

29             System.err.println("open error: " + db.error());  

30         }  

31   

32         Cursor cur = db.cursor();  

33         cur.jump();  

34         String[] rec;  

35         while ((rec = cur.get_str(true)) != null) {  

36             System.out.println(rec[0] + ":" + rec[1]);  

37             break;  

38         }  

39         cur.disable();  

40         if (!db.close()) {  

41             System.err.println("close error: " + db.error());  

42         }  

43     }  

44   

45     static void backupMediawiki() throws Exception {  

46         DB db = new DB();  

47         if (!db.open("witube.kch", DB.OWRITER | DB.OCREATE)) {  

48             System.err.println("open error: " + db.error());  

49         }  

50   

51         String sql = "SELECT page_title, old_text FROM `page` p, revision r, text t WHERE page_latest = r.rev_id and r.rev_text_id = t.old_id and page_namespace = 0";  

52         Statement stmt = conn.createStatement();  

53         ResultSet rs = stmt.executeQuery(sql);  

54         while (rs.next()) {  

55             InputStream in = rs.getBlob(1).getBinaryStream();  

56             byte[] bytes = new byte[89200000];  

57             int len = in.read(bytes);  

58             String title = new String(bytes, 0, len, "UTF-8");  

59             in.close();  

60   

61             in = rs.getBlob(2).getBinaryStream();  

62             len = in.read(bytes);  

63             if (len == -1) {  

64                 out.println("标题:" + title + " 没有内容。");  

65                 continue;  

66             }  

67             String content = new String(bytes, 0, len, "UTF-8");  

68             in.close();  

69             // out.println("title: " + title + " content: " + content);  

70   

71             db.set(title, content);  

72         }  

73   

74         rs.close();  

75         stmt.close();  

76         conn.close();  

77         if (!db.close()) {  

78             System.err.println("close error: " + db.error());  

79         }  

80     }  

81   

82     public static void main(String[] args) throws Exception {  

83         backupMediawiki();  

84         showHashDB();  

85     }  

86 }


回复

使用道具 举报

发表于 2011-9-2 05:37:48 | 显示全部楼层
RAKsmart美国服务器
真的谢谢了!













回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

美国HostEase虚拟主机一年198元

Archiver|手机版|小黑屋|Mediawiki中文技术论坛

GMT+8, 2024-4-24 01:01 , Processed in 0.035801 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表