package message.datasource.helper;
import message.base.convert.ConvertGetter;
import message.datasource.convert.Convert;
import message.datasource.key.IDGenerator;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
/**
* 不同数据库处理的辅助类
*
* @author sunhao(sunhao.java@gmail.com)
* @version V1.0, 2012-4-10 上午01:23:20
*/
public interface SqlHelper {
/**
* 设置clob型值
*
* @param ps
* @param index
* @param value
* @throws SQLException
*/
public abstract void setClobValue(PreparedStatement ps, int index, String value) throws SQLException;
/**
* 获取long型值,并返回String
*
* @param rs
* @param index
* @return
* @throws SQLException
*/
public String getLongAsString(ResultSet rs, int index) throws SQLException;
/**
* 获取clob型值
*
* @param rs
* @param index
* @return
* @throws SQLException
*/
public String getClobAsString(ResultSet rs, int index) throws SQLException, IOException;
/**
* 获得查询所有条数的sql
*
* @param sql
* @return
*/
public String getCountSql(String sql);
public void setIdGenerator(IDGenerator idGenerator);
/**
* 获得分页的sql
* 由于各个数据库分页语句不同,故让子类自己实现此方法
*
* @param sql
* @param start
* @param num
* @return
*/
public String getPageSql(String sql, int start, int num);
/**
* 通过sequence获取下一个主键的值<br/>
* oracle:sequence<br/>
* mysql:模拟的sequence表的表名
*
* @param sequenceName
* @return
*/
public Long getNextId(String sequenceName);
/**
* 判断数据库中是否含有给定的表
*
* @param tableName 表名
* @param dataSource 数据源
* @return
*/
public String existTableSQL(String tableName, DataSource dataSource) throws Exception;
/**
* 设置类型转换
*
* @param convertBeans
*/
public void setConvertBeans(Map<Class<?>, Class<?>> convertBeans);
/**
* 获取类型转换
*
* @param clazz
* @param <T>
* @return
*/
public <T extends ConvertGetter> Convert<T> getConvert(Class<T> clazz);
}