これは、SQLで複雑なリレーショナルデータベースを設定するよりもJavaでファイル管理システムをセットアップするほうがずっと簡単に思えるからです。JavaクラスはSQLリレーショナルデータベースの良い代替品ですか?
例:Javaで同じ製品のための変数価格は
ことができます製品のファイル:
public class Product implements Serializable {
public static int productCount = 0;
private final int productID;
private final long productRegisterDate;
private String productDescription;
private List<ProductPrice> productPrices;
Product (String desc) {
productID = ++productCount;
productRegisterDate = Calendar.getInstance().getTimeInMillis();
productDescription = desc;
productPrices = new ArrayList<ProductPrice>();
}
public Product addPrice(double price, String priceDesc) {
productPrices.add(new ProductPrice(price, priceDesc);
return this;
}
public void updateProduct(String desc, ArrayList<ProductPrice> prices) {
productDescription = desc;
productPrices = prices;
}
public int getID() return productID;
public long getDateRegistered() return productRegisterDate;
public String getDescription() return productDescription;
public ArrayList<ProductPrice> getPrices() return productPrices;
}
public class ProductPrice implements Serializable {
private double price;
private String priceDescription;
ProductPrice(double price, String priceDesc) {
this.price = price;
priceDescription = priceDesc;
}
}
は製品を挿入する:
何がSQLリレーショナルデータベースは、次の例の上に私の利益になるだろう...
List<Product> myProducts = new ArrayList<Product>();
myProducts.add(new Product("product a")
.addPrice(1.99,"250g pack")
.addPrice(2.99,"500g pack");
Productオブジェクトを見つける:
対象と問い合わせ製品情報:
...
String productDescription = p.getDescription();
オブジェクトなしで更新製品情報:
public boolean updateProductByID(int pid, String desc, ArrayList<ProductPrice> prices) {
Product p = null;
try {
p = findProductById(pid);
p.updateProduct(desc, prices);
} catch (NullPointerException e) {
return false;
}
return true;
}
負荷データ/保存:
...
private final String SAVE_PATH = "C:/";
private final String PRODUCTS_FILE = "Products.dat";
public static boolean saveProducts(ArrayList<Product> myProducts) {
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(new FileOutputStream(SAVE_PATH+PRODUCTS_FILE));
out.writeObject(myProducts);
out.close();
} catch (IOException e) {
return false;
}
return true;
}
public static boolean loadProducts(ArrayList<Product> myProducts) {
ObjectInputStream in = null;
try {
in = new ObjectInputStream(new FileInputStream(SAVE_PATH+PRODUCTS_FILE));
myProducts = (ArrayList<Product>) in.readObject();
return true;
} catch (IOException e1) {
return false;
} catch (ClassNotFoundException e2) {
return false;
}
}
私に教えてください、私が知りたいですすべての詳細。 クラスオブジェクト(つまり、製品、受注など)を持つJavaアプリケーションが既にあります。ローカルファイルシステムではなくデータを提供して格納する必要があるかどうか疑問に思っています。
したがって、ファイルベースのオプションでは、データベースと並行処理とACIDを処理できますか? RDBMSが行うことができるアドホッククエリを処理できますか? – Oded
これは任意のDB /レポートツールからアクセスできますか? –
'find product by id'メソッドを使うつもりならば、インデックスを持つべきでしょう。 Javaでは、あなたが自分でそれをやろうとしたら、ハッシュマップをお勧めします。 – corsiKa