Java tutorial
/** * Copyright (c) 2010 Yahoo! Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. See accompanying * LICENSE file. */ package com.yahoo.ycsb; import java.util.*; import java.io.FileInputStream; import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import com.google.common.collect.Lists; import com.yahoo.ycsb.workloads.*; /** A simple command line client to a database, using the appropriate com.yahoo.ycsb.DB implementation. */ public class CommandLine { public static final String DEFAULT_DB = "com.yahoo.ycsb.BasicDB"; public static void usageMessage() { System.out.println("YCSB Command Line Client"); System.out.println("Usage: java com.yahoo.ycsb.CommandLine [options]"); System.out.println("Options:"); System.out.println(" -P filename: Specify a property file"); System.out.println(" -p name=value: Specify a property value"); System.out.println(" -db classname: Use a specified DB class (can also set the \"db\" property)"); System.out.println(" -table tablename: Use the table name instead of the default \"" + CoreWorkload.TABLENAME_PROPERTY_DEFAULT + "\""); System.out.println(); } public static void help() { System.out.println("Commands:"); System.out.println(" read key [field1 field2 ...] - Read a record"); System.out.println(" scan key recordcount [field1 field2 ...] - Scan starting at key"); System.out.println(" insert key name1=value1 [name2=value2 ...] - Insert a new record"); System.out.println(" update key name1=value1 [name2=value2 ...] - Update a record"); System.out.println(" delete key - Delete a record"); System.out.println(" table [tablename] - Get or [set] the name of the table"); System.out.println(" quit - Quit"); } public static void main(String[] args) { int argindex = 0; Properties props = new Properties(); Properties fileprops = new Properties(); String table = CoreWorkload.TABLENAME_PROPERTY_DEFAULT; while ((argindex < args.length) && (args[argindex].startsWith("-"))) { if ((args[argindex].compareTo("-help") == 0) || (args[argindex].compareTo("--help") == 0) || (args[argindex].compareTo("-?") == 0) || (args[argindex].compareTo("--?") == 0)) { usageMessage(); System.exit(0); } if (args[argindex].compareTo("-db") == 0) { argindex++; if (argindex >= args.length) { usageMessage(); System.exit(0); } props.setProperty("db", args[argindex]); argindex++; } else if (args[argindex].compareTo("-P") == 0) { argindex++; if (argindex >= args.length) { usageMessage(); System.exit(0); } String propfile = args[argindex]; argindex++; Properties myfileprops = new Properties(); try { myfileprops.load(new FileInputStream(propfile)); } catch (IOException e) { System.out.println(e.getMessage()); System.exit(0); } for (Enumeration e = myfileprops.propertyNames(); e.hasMoreElements();) { String prop = (String) e.nextElement(); fileprops.setProperty(prop, myfileprops.getProperty(prop)); } } else if (args[argindex].compareTo("-p") == 0) { argindex++; if (argindex >= args.length) { usageMessage(); System.exit(0); } int eq = args[argindex].indexOf('='); if (eq < 0) { usageMessage(); System.exit(0); } String name = args[argindex].substring(0, eq); String value = args[argindex].substring(eq + 1); props.put(name, value); //System.out.println("["+name+"]=["+value+"]"); argindex++; } else if (args[argindex].compareTo("-table") == 0) { argindex++; if (argindex >= args.length) { usageMessage(); System.exit(0); } table = args[argindex]; argindex++; } else { System.out.println("Unknown option " + args[argindex]); usageMessage(); System.exit(0); } if (argindex >= args.length) { break; } } if (argindex != args.length) { usageMessage(); System.exit(0); } for (Enumeration e = props.propertyNames(); e.hasMoreElements();) { String prop = (String) e.nextElement(); fileprops.setProperty(prop, props.getProperty(prop)); } props = fileprops; System.out.println("YCSB Command Line client"); System.out.println("Type \"help\" for command line help"); System.out.println("Start with \"-help\" for usage info"); //create a DB String dbname = props.getProperty("db", DEFAULT_DB); ClassLoader classLoader = CommandLine.class.getClassLoader(); DB db = null; try { Class dbclass = classLoader.loadClass(dbname); db = (DB) dbclass.newInstance(); } catch (Exception e) { e.printStackTrace(); System.exit(0); } db.setProperties(props); try { db.init(); } catch (DBException e) { e.printStackTrace(); System.exit(0); } System.out.println("Connected."); //main loop BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); for (;;) { //get user input System.out.print("> "); String input = null; try { input = br.readLine(); } catch (IOException e) { e.printStackTrace(); System.exit(1); } if (input.compareTo("") == 0) { continue; } if (input.compareTo("help") == 0) { help(); continue; } if (input.compareTo("quit") == 0) { break; } String[] tokens = input.split(" "); long st = System.currentTimeMillis(); //handle commands if (tokens[0].compareTo("table") == 0) { if (tokens.length == 1) { System.out.println("Using table \"" + table + "\""); } else if (tokens.length == 2) { table = tokens[1]; System.out.println("Using table \"" + table + "\""); } else { System.out.println("Error: syntax is \"table tablename\""); } } else if (tokens[0].compareTo("read") == 0) { if (tokens.length == 1) { System.out.println("Error: syntax is \"read keyname [field1 field2 ...]\""); } else { Set<String> fields = null; if (tokens.length > 2) { fields = new HashSet<String>(); for (int i = 2; i < tokens.length; i++) { fields.add(tokens[i]); } } HashMap<String, String> result = new HashMap<String, String>(); int ret = db.read(table, tokens[1], fields, result); System.out.println("Return code: " + ret); for (Map.Entry<String, String> ent : result.entrySet()) { System.out.println(ent.getKey() + "=" + ent.getValue()); } } } else if (tokens[0].compareTo("scan") == 0) { if (tokens.length < 3) { System.out.println("Error: syntax is \"scan keyname scanlength [field1 field2 ...]\""); } else { Set<String> fields = null; if (tokens.length > 3) { fields = new HashSet<String>(); for (int i = 3; i < tokens.length; i++) { fields.add(tokens[i]); } } List<Map<String, String>> results = Lists.newArrayList(); int ret = db.scan(table, tokens[1], Integer.parseInt(tokens[2]), fields, results); System.out.println("Return code: " + ret); int record = 0; if (results.size() == 0) { System.out.println("0 records"); } else { System.out.println("--------------------------------"); } for (Map<String, String> result : results) { System.out.println("Record " + (record++)); for (Map.Entry<String, String> ent : result.entrySet()) { System.out.println(ent.getKey() + "=" + ent.getValue()); } System.out.println("--------------------------------"); } } } else if (tokens[0].compareTo("update") == 0) { if (tokens.length < 3) { System.out.println("Error: syntax is \"update keyname name1=value1 [name2=value2 ...]\""); } else { HashMap<String, String> values = new HashMap<String, String>(); for (int i = 2; i < tokens.length; i++) { String[] nv = tokens[i].split("="); values.put(nv[0], nv[1]); } int ret = db.update(table, tokens[1], values); System.out.println("Return code: " + ret); } } else if (tokens[0].compareTo("insert") == 0) { if (tokens.length < 3) { System.out.println("Error: syntax is \"insert keyname name1=value1 [name2=value2 ...]\""); } else { HashMap<String, String> values = new HashMap<String, String>(); for (int i = 2; i < tokens.length; i++) { String[] nv = tokens[i].split("="); values.put(nv[0], nv[1]); } int ret = db.insert(table, tokens[1], values); System.out.println("Return code: " + ret); } } else if (tokens[0].compareTo("delete") == 0) { if (tokens.length != 2) { System.out.println("Error: syntax is \"delete keyname\""); } else { int ret = db.delete(table, tokens[1]); System.out.println("Return code: " + ret); } } else { System.out.println("Error: unknown command \"" + tokens[0] + "\""); } System.out.println((System.currentTimeMillis() - st) + " ms"); } } }