package nebula.data.n; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import nebula.data.n.PHelper.OpRead; import nebula.persistor.NebulaContext; import nebula.persistor.Persistor; import nebula.persistor.PersistorException; import nebula.persistor.db.ConnectionProvider; import com.google.inject.Inject; public class CompanyDbPersistor implements Persistor<VV> { final NebulaContext context; final ConnectionProvider cp; final OpRead[] o; @Inject protected CompanyDbPersistor(ConnectionProvider cp, NebulaContext context) { this.context = context; this.cp = cp; // String name; // String fullName; // String since; int i=0; ArrayList<PHelper.OpRead> ol = new ArrayList<PHelper.OpRead>(); ol.add(new PHelper.OpString(i++,i));//name ol.add(new PHelper.OpString(i++,i));//fullName ol.add(new PHelper.OpTimestamp(i++,i));//Timestamp o = ol.toArray(new OpRead[0]); } @Override public VV get(String... keys) { try { PreparedStatement p; ResultSet r; //int i; p = cp.get().prepareStatement("select name,fullName,lastModified from company where name = ?"); p.setString(1, keys[0]); r = p.executeQuery(); if (!r.next()) { throw new PersistorException(); } Object[] al = new Object[10]; for(int i=0;i<o.length;i++){ o[i].reader(context,al, r); } r.close(); return new VV(al); } catch (SQLException e) { throw new PersistorException(e); } } @Override public VV merge(VV v) { return v; } @Override public void persist(VV v) { try { PreparedStatement p = cp.get().prepareStatement("insert into company(name,fullName,lastModified) values(?,?,?)"); Object[] data = v.data; for(int i=0;i<o.length;i++){ o[i].write(context,data, p); } // .name .fullName context.getTime() boolean result = p.execute(); if (result) {// if is result then error throw new PersistorException(); } int updateCount = p.getUpdateCount(); if (updateCount != 1) { throw new PersistorException(); } } catch (SQLException e) { throw new PersistorException(e); } } @Override public void remove(VV v) { try { PreparedStatement p; p = cp.get().prepareStatement("delete from company where company.name = ?"); p.setString(1, (String) v.data[0]); boolean result = p.execute(); if (result) {// if is result then error throw new PersistorException(); } } catch (SQLException e) { throw new PersistorException(e); } } @Override public void removeAll() { try { PreparedStatement p; p = cp.get().prepareStatement("delete from company"); boolean result = p.execute(); if (result) {// if is result then error throw new PersistorException(); } } catch (SQLException e) { throw new PersistorException(e); } } @Override public List<VV> list() { try { Statement p = cp.get().createStatement(); ResultSet r = p.executeQuery("select name,fullname,lastModified " + "from company p order by p.lastModified desc \n"); ArrayList<VV> ps = new ArrayList<VV>(); while (r.next()) { // ------ start Object[] al = new Object[10]; for(int i=0;i<o.length;i++){ o[i].reader(context,al, r); } // ------ end ps.add(new VV(al)); } r.close(); return ps; } catch (SQLException e) { throw new PersistorException(e); } } @Override public List<VV> query(String cause, Object... params) { // TODO Auto-generated method stub return null; } }