If you think the Android project jepldroid listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code
package jepl.impl.nonjta.android;
//fromwww.java2s.comimport java.math.BigDecimal;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import jepl.JEPLException;
import jepl.impl.JEPLDALImpl;
import jepl.impl.JEPLPreparedStatementImpl;
publicclass JEPLPreparedStatementSQLDroidImpl extends JEPLPreparedStatementImpl
{
public JEPLPreparedStatementSQLDroidImpl(JEPLNonJTAConnectionSQLDroidImpl jcon,JEPLDALImpl dal,PreparedStatement stmt,String key) throws SQLException
{
super(jcon,dal,stmt,key);
}
public JEPLNonJTAConnectionSQLDroidImpl getJEPLNonJTAConnectionSQLDroid()
{
return (JEPLNonJTAConnectionSQLDroidImpl)jcon;
}
@Override
protectedvoid setObject(PreparedStatement stmt,int column,Object param) throws SQLException
{
// Llamamos al mtodo ms apropiado de acuerdo con el tipo de datos esperado
// algunos de ellos no estn implementados pero los llamamos por sistema
// Obviamente no puede ser un primitivo
if (param == null)
{
stmt.setNull(column, -1); // El tipo da igual
return;
}
Class<?> targetType = param.getClass();
if (Number.class.isAssignableFrom(targetType))
{
if (targetType.equals(Byte.class))
stmt.setByte(column,(Byte)param);
elseif (targetType.equals(Short.class))
stmt.setShort(column,(Short)param);
elseif (targetType.equals(Integer.class))
stmt.setInt(column,(Integer)param);
elseif (targetType.equals(Long.class))
stmt.setLong(column,(Long)param);
elseif (targetType.equals(Float.class))
stmt.setFloat(column,(Float)param);
elseif (targetType.equals(Double.class))
stmt.setDouble(column,(Double)param);
elseif (targetType.equals(BigDecimal.class))
stmt.setBigDecimal(column,(BigDecimal)param);
elsethrownew JEPLException("Not supported data type:" + targetType); // Puede ser BigInteger
}
elseif (targetType.equals(Boolean.class))
stmt.setBoolean(column,(Boolean)param);
elseif (targetType.equals(Character.class))
stmt.setString(column,new String(param.toString()));
elseif (targetType.equals(String.class))
stmt.setString(column,(String)param);
elseif (targetType.equals(java.sql.Date.class))
stmt.setDate(column,(java.sql.Date)param);
elseif (targetType.equals(java.sql.Time.class))
stmt.setTime(column,(java.sql.Time)param);
elseif (targetType.equals(java.sql.Timestamp.class))
stmt.setTimestamp(column,(java.sql.Timestamp)param);
elsethrownew JEPLException("Not supported data type:" + targetType);
}
@Override
public ResultSet executeUpdateGetGeneratedKeys(String sqlJDBC) throws Exception
{
// SQLDroid no soporta getGeneratedKeys
PreparedStatement stmt = getPreparedStatement();
stmt.executeUpdate();
// No chequeamos que el resultado de executeUpdate() sea 1 pues SQLDroid siempre devuelve 0
// nos tenemos que fiar.
Statement stmtLastId = jcon.getConnection().createStatement();
ResultSet res = stmtLastId.executeQuery("SELECT LAST_INSERT_ROWID()");
// La alternativa sera: select max(id) from sometable
// pero exige conocer el nombre del atributo id y la tabla
return res;
}
@Override
publicvoid moveResultSetAbsolutePosition(ResultSet result,int position) throws SQLException
{
getJEPLNonJTAConnectionSQLDroid().moveResultSetAbsolutePosition(result,position);
}
@Override
publicboolean isExecuteUpdateReturnCorrect()
{
// executeUpdate() siempre devuelve 0 en SQLDroid
return false;
}
}