// Path: kamikeDivide/src/com/kamike/db/GenericReader.java
// public abstract class GenericReader<T> {
// 
//     public abstract long count();
// 
//   
// 
//     protected GenericReader() {
//         
// 
//     }
// 
//     public abstract ArrayList<T> find();
// 
//     public abstract ArrayList<T> find(T t);
// 
//     public abstract T get(T t);
// 
// }
// 
// Path: kamikeDivide/src/com/kamike/db/DbInst.java
// public class DbInst {
// 
//     private static volatile DbInst dbinst = new DbInst();
//     private Database database;
// 
//     public void destroy() {
//         if (database != null) {
//             database.destroy();
//         }
// 
//     }
// 
//     private DbInst() {
// 
//     }
// 
//     public static DbInst getInstance() {
// 
//         return dbinst;
//     }
// 
//     /**
//      * @return the DATABASE_URL
//      */
//     public Database getDatabase(boolean newDatabase) {
//         if (newDatabase) {
// 
//            String ip = SystemConfig.DB_IP;
//             String port = SystemConfig.DB_PORT;
//             String name = SystemConfig.DB_NAME;
//             String user = SystemConfig.DB_USER;
//             String password = SystemConfig.DB_PASSWORD;
// 
//             database = new MySQLDatabase(ip, port, name, user, password);
//         }
//         return database;
//     }
// 
//     public Database getDatabase() {
//         if (database == null) {
// 
//             String ip = SystemConfig.DB_IP;
//             String port = SystemConfig.DB_PORT;
//             String name = SystemConfig.DB_NAME;
//             String user = SystemConfig.DB_USER;
//             String password = SystemConfig.DB_PASSWORD;
// 
//             database = new MySQLDatabase(ip, port, name, user, password);
//         }
//         return database;
//     }
// 
// }


import com.kamike.db.GenericReader;
import com.kamike.db.DbInst;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.kamike.db.generic;


/**
 *
 *
 * @author brin hubinix@gmail.com
 */
public abstract class BaseReader<T> extends GenericReader<T> {

    protected BaseReader() {

    }

    public abstract GenericSelect<T> createSelect();

    public abstract GenericSelect<T> createSelect(T t);

    @Override
    public long count() {
        GenericSelect<T> select = createSelect();

        ResultSet rs = null;
        PreparedStatement ps = null;
        Connection conn = null;

        long ret = 0;
        try {
// Path: kamikeDivide/src/com/kamike/db/GenericReader.java
// public abstract class GenericReader<T> {
// 
//     public abstract long count();
// 
//   
// 
//     protected GenericReader() {
//         
// 
//     }
// 
//     public abstract ArrayList<T> find();
// 
//     public abstract ArrayList<T> find(T t);
// 
//     public abstract T get(T t);
// 
// }
// 
// Path: kamikeDivide/src/com/kamike/db/DbInst.java
// public class DbInst {
// 
//     private static volatile DbInst dbinst = new DbInst();
//     private Database database;
// 
//     public void destroy() {
//         if (database != null) {
//             database.destroy();
//         }
// 
//     }
// 
//     private DbInst() {
// 
//     }
// 
//     public static DbInst getInstance() {
// 
//         return dbinst;
//     }
// 
//     /**
//      * @return the DATABASE_URL
//      */
//     public Database getDatabase(boolean newDatabase) {
//         if (newDatabase) {
// 
//            String ip = SystemConfig.DB_IP;
//             String port = SystemConfig.DB_PORT;
//             String name = SystemConfig.DB_NAME;
//             String user = SystemConfig.DB_USER;
//             String password = SystemConfig.DB_PASSWORD;
// 
//             database = new MySQLDatabase(ip, port, name, user, password);
//         }
//         return database;
//     }
// 
//     public Database getDatabase() {
//         if (database == null) {
// 
//             String ip = SystemConfig.DB_IP;
//             String port = SystemConfig.DB_PORT;
//             String name = SystemConfig.DB_NAME;
//             String user = SystemConfig.DB_USER;
//             String password = SystemConfig.DB_PASSWORD;
// 
//             database = new MySQLDatabase(ip, port, name, user, password);
//         }
//         return database;
//     }
// 
// }


// Path: kamikeDivide/src/com/kamike/db/generic/BaseReader.java
import com.kamike.db.GenericReader;
import com.kamike.db.DbInst;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.kamike.db.generic;


/**
 *
 *
 * @author brin hubinix@gmail.com
 */
public abstract class BaseReader<T> extends GenericReader<T> {

    protected BaseReader() {

    }

    public abstract GenericSelect<T> createSelect();

    public abstract GenericSelect<T> createSelect(T t);

    @Override
    public long count() {
        GenericSelect<T> select = createSelect();

        ResultSet rs = null;
        PreparedStatement ps = null;
        Connection conn = null;

        long ret = 0;
        try {
            conn = DbInst.getInstance().getDatabase().getSingleConnection();