亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? recover.java

?? 非常棒的java數(shù)據(jù)庫(kù)
?? JAVA
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/*
 * Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0
 * (http://h2database.com/html/license.html).
 * Initial Developer: H2 Group
 */
package org.h2.tools;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import org.h2.command.Parser;
import org.h2.engine.Constants;
import org.h2.engine.Database;
import org.h2.engine.DbObject;
import org.h2.engine.MetaRecord;
import org.h2.log.LogFile;
import org.h2.message.Message;
import org.h2.result.SimpleRow;
import org.h2.security.SHA256;
import org.h2.store.DataHandler;
import org.h2.store.DataPage;
import org.h2.store.DiskFile;
import org.h2.store.FileLister;
import org.h2.store.FileStore;
import org.h2.store.FileStoreInputStream;
import org.h2.util.ByteUtils;
import org.h2.util.FileUtils;
import org.h2.util.IOUtils;
import org.h2.util.ObjectArray;
import org.h2.util.ObjectUtils;
import org.h2.util.RandomUtils;
import org.h2.util.SmallLRUCache;
import org.h2.value.Value;
import org.h2.value.ValueLob;

/**
 * Dumps the contents of a database file to a human readable text file. This
 * text file can be used to recover most of the data. This tool does not open
 * the database and can be used even if the database files are corrupted. A
 * database can get corrupted if there is a bug in the database engine or file
 * system software, or if an application writes into the database file that
 * doesn't understand the the file format, or if there is a hardware problem.
 */
public class Recover implements DataHandler {

    private String databaseName;
    private boolean textStorage;
    private int block;
    private int blockCount;
    private int storageId;
    private int recordLength;
    private int valueId;
    private boolean log;
    private boolean lobFilesInDirectories;

    private void showUsage() {
        System.out.println("java "+getClass().getName()+" [-dir <dir>] [-db <database>] [-log true]");
        System.out.println("See also http://h2database.com/javadoc/org/h2/tools/Recover.html");
    }

    /**
     * The command line interface for this tool.
     * The options must be split into strings like this: "-db", "test",...
     * Options are case sensitive. The following options are supported:
     * <ul>
     * <li>-help or -? (print the list of options)
     * </li><li>-dir database directory (the default is the current directory)
     * </li><li>-db database name (all databases if no name is specified)
     * </li><li>-log {true|false} (log additional messages)
     * </li></ul>
     *
     * @param args the command line arguments
     * @throws SQLException
     */
    public static void main(String[] args) throws SQLException {
        new Recover().run(args);
    }

    private void run(String[] args) throws SQLException {
        String dir = ".";
        String db = null;
        boolean removePassword = false;
        for (int i = 0; args != null && i < args.length; i++) {
            if ("-dir".equals(args[i])) {
                dir = args[++i];
            } else if ("-db".equals(args[i])) {
                db = args[++i];
            } else if ("-removePassword".equals(args[i])) {
                removePassword = true;
                log = true;
            } else if ("-log".equals(args[i])) {
                log = Boolean.valueOf(args[++i]).booleanValue();
            } else {
                showUsage();
                return;
            }
        }
        if (removePassword) {
            removePassword(dir, db);
        } else {
            process(dir, db);
        }
    }

    /**
     * INTERNAL
     */
    public static Reader readClob(String fileName) throws IOException {
        return new BufferedReader(new InputStreamReader(readBlob(fileName)));
    }

    /**
     * INTERNAL
     */
    public static InputStream readBlob(String fileName) throws IOException {
        return new BufferedInputStream(new FileInputStream(fileName));
    }

    private void removePassword(String dir, String db) throws SQLException {
        ArrayList list = FileLister.getDatabaseFiles(dir, db, true);
        for (int i = 0; i < list.size(); i++) {
            String fileName = (String) list.get(i);
            if (fileName.endsWith(Constants.SUFFIX_DATA_FILE)) {
                removePassword(fileName);
            }
        }
    }

    private void log(String message) {
        if (log) {
            System.out.println(message);
        }
    }

    private void logError(String message, Throwable t) {
        System.out.println(message + ": " + t.toString());
        if (log) {
            t.printStackTrace();
        }
    }

    private void removePassword(String fileName) throws SQLException {
        setDatabaseName(fileName.substring(fileName.length() - Constants.SUFFIX_DATA_FILE.length()));
        textStorage = Database.isTextStorage(fileName, false);
        byte[] magic = Database.getMagic(textStorage);
        FileStore store = FileStore.open(null, fileName, "rw", magic);
        long length = store.length();
        int offset = FileStore.HEADER_LENGTH;
        int blockSize = DiskFile.BLOCK_SIZE;
        int blocks = (int) (length / blockSize);
        blockCount = 1;
        for (int block = 0; block < blocks; block += blockCount) {
            store.seek(offset + (long) block * blockSize);
            byte[] bytes = new byte[blockSize];
            DataPage s = DataPage.create(this, bytes);
            long start = store.getFilePointer();
            store.readFully(bytes, 0, blockSize);
            blockCount = s.readInt();
            storageId = -1;
            recordLength = -1;
            valueId = -1;
            if (blockCount == 0) {
                // free block
                blockCount = 1;
                continue;
            } else if (blockCount < 0) {
                blockCount = 1;
                continue;
            }
            try {
                s.checkCapacity(blockCount * blockSize);
            } catch (OutOfMemoryError e) {
                blockCount = 1;
                continue;
            }
            if (blockCount > 1) {
                store.readFully(s.getBytes(), blockSize, blockCount * blockSize - blockSize);
            }
            try {
                s.check(blockCount * blockSize);
            } catch (SQLException e) {
                blockCount = 1;
                continue;
            }
            storageId = s.readInt();
            if (storageId != 0) {
                continue;
            }
            recordLength = s.readInt();
            if (recordLength <= 0) {
                continue;
            }
            Value[] data;
            try {
                data = new Value[recordLength];
            } catch (Throwable e) {
                continue;
            }
            for (valueId = 0; valueId < recordLength; valueId++) {
                try {
                    data[valueId] = s.readValue();
                } catch (Throwable e) {
                    continue;
                }
            }
            if (storageId == 0) {
                try {
                    String sql = data[3].getString();
                    if (!sql.startsWith("CREATE USER ")) {
                        continue;
                    }
                    int idx = sql.indexOf("SALT");
                    if (idx < 0) {
                        continue;
                    }
                    String userName = sql.substring("CREATE USER ".length(), idx - 1);
                    if (userName.startsWith("\"")) {
                        // TODO doesn't work for all cases ("" inside user name)
                        userName = userName.substring(1, userName.length() - 1);
                    }
                    SHA256 sha = new SHA256();
                    byte[] userPasswordHash = sha.getKeyPasswordHash(userName, "".toCharArray());
                    byte[] salt = RandomUtils.getSecureBytes(Constants.SALT_LEN);
                    byte[] passwordHash = sha.getHashWithSalt(userPasswordHash, salt);
                    boolean admin = sql.indexOf("ADMIN") >= 0;
                    StringBuffer buff = new StringBuffer();
                    buff.append("CREATE USER ");
                    buff.append(Parser.quoteIdentifier(userName));
                    buff.append(" SALT '");
                    buff.append(ByteUtils.convertBytesToString(salt));
                    buff.append("' HASH '");
                    buff.append(ByteUtils.convertBytesToString(passwordHash));
                    buff.append("'");
                    if (admin) {
                        buff.append(" ADMIN");
                    }
                    byte[] replacement = buff.toString().getBytes();
                    int at = ByteUtils.indexOf(s.getBytes(), "CREATE USER ".getBytes(), 0);
                    System.arraycopy(replacement, 0, s.getBytes(), at, replacement.length);
                    s.fill(blockCount * blockSize);
                    s.updateChecksum();
                    store.seek(start);
                    store.write(s.getBytes(), 0, s.length());
                    if (log) {
                        System.out.println("User: " + userName);
                    }
                    break;
                } catch (Throwable e) {
                    e.printStackTrace();
                }
            }
        }
        closeSilently(store);
    }

    /**
     * Dumps the database.
     *
     * @param dir the directory
     * @param db the database name (null for all databases)
     * @throws SQLException
     */
    public static void execute(String dir, String db) throws SQLException {
        new Recover().process(dir, db);
    }

    private void process(String dir, String db) throws SQLException {
        ArrayList list = FileLister.getDatabaseFiles(dir, db, true);
        for (int i = 0; i < list.size(); i++) {
            String fileName = (String) list.get(i);
            if (fileName.endsWith(Constants.SUFFIX_DATA_FILE)) {
                dumpData(fileName);
            } else if (fileName.endsWith(Constants.SUFFIX_INDEX_FILE)) {
                dumpIndex(fileName);
            } else if (fileName.endsWith(Constants.SUFFIX_LOG_FILE)) {
                dumpLog(fileName);
            } else if (fileName.endsWith(Constants.SUFFIX_LOB_FILE)) {
                dumpLob(fileName, true);
                dumpLob(fileName, false);
            }
        }
    }

    private PrintWriter getWriter(String fileName, String suffix) throws IOException, SQLException {
        fileName = fileName.substring(0, fileName.length() - 3);
        String outputFile = fileName + suffix;
        log("Created file: " + outputFile);
        return new PrintWriter(new BufferedWriter(FileUtils.openFileWriter(outputFile, false)));
    }

    private void writeDataError(PrintWriter writer, String error, byte[] data, int dumpBlocks) throws IOException {
        writer.println("-- ERROR:" + error + " block:" + block + " blockCount:" + blockCount + " storageId:"
                + storageId + " recordLength: " + recordLength + " valueId:" + valueId);
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < dumpBlocks * DiskFile.BLOCK_SIZE; i++) {
            int x = (data[i] & 0xff);
            if (x >= ' ' && x < 128) {
                sb.append((char) x);
            } else {
                sb.append('?');
            }
        }
        writer.println("-- dump: " + sb.toString());
        sb = new StringBuffer();
        for (int i = 0; i < dumpBlocks * DiskFile.BLOCK_SIZE; i++) {
            int x = (data[i] & 0xff);
            sb.append(' ');
            if (x < 16) {
                sb.append('0');

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
最近日韩中文字幕| 日韩不卡一区二区| 91精品国产综合久久久久久漫画 | 欧美性一二三区| 久久99国产精品久久99| 亚洲人午夜精品天堂一二香蕉| 91精品国产麻豆国产自产在线| 成人午夜激情影院| 麻豆极品一区二区三区| 亚洲综合久久久久| 国产精品家庭影院| 2欧美一区二区三区在线观看视频| 欧美中文一区二区三区| 成人小视频免费在线观看| 久久精品av麻豆的观看方式| 亚洲高清不卡在线| 亚洲精品v日韩精品| 中文字幕在线一区二区三区| 亚洲精品一区二区三区精华液 | 亚洲三级久久久| 久久免费电影网| 日韩三级视频中文字幕| 欧美日本在线视频| 在线观看不卡一区| 一本色道亚洲精品aⅴ| 粗大黑人巨茎大战欧美成人| 韩国一区二区视频| 精品亚洲porn| 捆绑调教美女网站视频一区| 日本vs亚洲vs韩国一区三区| 午夜av区久久| 亚洲午夜精品一区二区三区他趣| 亚洲视频在线一区观看| 亚洲欧美自拍偷拍色图| 国产精品系列在线| 国产精品久久久久久久第一福利| 国产欧美日韩亚州综合| 国产亚洲污的网站| 国产清纯美女被跳蛋高潮一区二区久久w| 欧美一区二区精品| 日韩一区二区精品在线观看| 日韩视频国产视频| 欧美大片一区二区| 欧美电视剧在线看免费| 精品久久久久久最新网址| 欧美tickling网站挠脚心| 日韩欧美一二三| 久久免费看少妇高潮| 国产无遮挡一区二区三区毛片日本| 久久久777精品电影网影网 | 懂色av一区二区三区免费观看| 国产成人高清视频| 成人av免费在线观看| 99精品欧美一区二区三区小说| 91亚洲国产成人精品一区二区三| 色哟哟亚洲精品| 在线91免费看| 2021国产精品久久精品| 国产欧美日韩精品一区| 亚洲品质自拍视频| 亚洲成人自拍网| 日本成人在线网站| 国产精品一色哟哟哟| www.欧美色图| 欧美日韩免费一区二区三区视频| 欧美一二三在线| 久久久精品tv| 亚洲狠狠丁香婷婷综合久久久| 亚洲福利视频导航| 国内精品免费**视频| 91在线云播放| 69久久夜色精品国产69蝌蚪网| 欧美精品一区二区久久久| 中文字幕一区视频| 婷婷六月综合亚洲| 高清久久久久久| 欧美日本在线视频| 国产欧美精品区一区二区三区| 亚洲免费观看高清| 蜜臀久久久久久久| 91在线视频播放| 日韩一区二区三区电影在线观看| 国产精品午夜电影| 日本欧美一区二区| 成人免费高清视频| 日韩一级大片在线| 最近日韩中文字幕| 激情六月婷婷久久| 欧美日韩一级二级三级| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美成人性福生活免费看| 亚洲欧美一区二区在线观看| 婷婷夜色潮精品综合在线| 国产suv精品一区二区三区| 欧美视频在线播放| 欧美激情在线看| 日本特黄久久久高潮| 91在线观看视频| 久久天天做天天爱综合色| 亚洲精品亚洲人成人网| 国产精品一区二区男女羞羞无遮挡| 欧美综合久久久| 中文字幕乱码亚洲精品一区| 欧美a级一区二区| 中文字幕一区二区三区不卡| 日本人妖一区二区| 91精彩视频在线| 国产精品嫩草影院com| 久久成人免费日本黄色| 欧美午夜精品久久久| 国产精品乱人伦| 精品一二线国产| 91精品国产综合久久精品app| 亚洲人成影院在线观看| 高潮精品一区videoshd| 久久中文娱乐网| 久久9热精品视频| 欧美日韩亚洲综合在线| 亚洲人成伊人成综合网小说| 成人午夜精品在线| 国产日韩av一区| 国产乱码精品一区二区三区五月婷| 91麻豆精品国产综合久久久久久| 樱花影视一区二区| 色婷婷综合五月| 亚洲欧美国产77777| 波多野结衣91| 国产精品视频一区二区三区不卡 | 色欧美片视频在线观看在线视频| 国产精品沙发午睡系列990531| 精品一区二区三区蜜桃| 欧美一二三区精品| 久久国产精品72免费观看| 日韩一区二区在线观看视频播放| 首页综合国产亚洲丝袜| 欧美丰满少妇xxxbbb| 日本免费在线视频不卡一不卡二| 欧美美女喷水视频| 欧美a级一区二区| 日韩你懂的电影在线观看| 美日韩一区二区三区| 欧美videos中文字幕| 韩国v欧美v日本v亚洲v| 国产婷婷精品av在线| 成人精品视频网站| 亚洲精品久久嫩草网站秘色| 在线免费观看日本欧美| 亚洲午夜电影在线观看| 3atv在线一区二区三区| 久久精品99国产精品| 国产午夜精品一区二区三区视频| 国产精品99久久久久久有的能看| 国产精品网曝门| 日本电影亚洲天堂一区| 首页国产欧美久久| 26uuu亚洲| 9i在线看片成人免费| 一区二区成人在线视频| 91精品久久久久久久久99蜜臂| 国产最新精品精品你懂的| 国产精品狼人久久影院观看方式| 色哟哟一区二区在线观看| 香蕉影视欧美成人| 久久亚洲免费视频| 99久久精品国产导航| 五月激情综合婷婷| 久久综合久久综合九色| 99久久99久久精品免费观看| 亚洲午夜在线电影| 久久婷婷色综合| 色综合久久久久综合体| 日产欧产美韩系列久久99| 国产视频在线观看一区二区三区| 94色蜜桃网一区二区三区| 日韩中文字幕1| 国产精品视频线看| 欧美夫妻性生活| 成人免费高清在线观看| 日韩国产欧美在线播放| 欧美国产日产图区| 欧美老肥妇做.爰bbww| 岛国精品在线播放| 视频精品一区二区| 国产精品久久久久三级| 欧美精品久久天天躁| 成年人国产精品| 久久国产三级精品| 亚洲激情网站免费观看| 欧美精品一区二| 欧美视频一区二区在线观看| 国产成人亚洲精品青草天美| 婷婷夜色潮精品综合在线| 国产精品欧美精品| 欧美va亚洲va国产综合| 欧美在线观看视频一区二区 | 欧美网站大全在线观看| 丁香婷婷深情五月亚洲| 青青草精品视频| 亚洲亚洲人成综合网络| 国产精品全国免费观看高清 |