重温Java持久化(四)

2014-11-24 08:36:39 · 作者: · 浏览: 7
}
sb.delete(sb.length() - 2, sb.length() - 1);
sb.append(")");
String sql = sb.toString();
String checkSql = "SELECT 1 FROM USER_TABLES WHERE TABLE_NAME= ";
String dropSql = "DROP TABLE " + tableName.toUpperCase();
try {
RowSet rs = session.executeQuery(checkSql, tableName.toUpperCase());
// 如果存在则先删除
if (rs.next()) {
log.info("表[" + tableName.toUpperCase() + "]已经存在!");
// session.executeUpdate(dropSql);
// session.executeUpdate(sql);
} else {
session.executeUpdate(sql);
log.info("表[" + tableName.toUpperCase() + "]创建成功!");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private String getColumnType(Class< > fieldType) {
if (String.class == fieldType) {
return "VARCHAR";
}
if ((Integer.TYPE == fieldType) || (Integer.class == fieldType)) {
return "NUMBER";
}
if ((Long.TYPE == fieldType) || (Long.class == fieldType)) {
return "LONG";
}
if ((Float.TYPE == fieldType) || (Float.class == fieldType)) {
return "NUMBER";
}
if ((Double.TYPE == fieldType) || (Double.class == fieldType)) {
return "NUMBER";
}
if (Blob.class == fieldType) {
return "BLOB";
}
if (Date.class == fieldType) {
return "DATE";
}
return "VARCHAR";
}
/**
* 根据传入的类型返回对应的数据库字段类型 如果找不到匹配的则直接用其本身作为数据库列类型(type不允许为空)
* 备注:这里以后会扩展(根据不用的数据库创建不用的字段)
* @param type
* @return String
*/
private String getColumnType(String type) {
if (ColumnType.INTEGER.equals(type)) {
return "NUMBER";
}
if (ColumnType.STRING.equals(type)) {
return "VARCHAR";
}
if (ColumnType.LONG.equals(type)) {
return "LONG";
}
return type;
}
}
=====================================
/**
* 对外公开的数据库访问类
*
* @author ypf
*/
public interface Session {
/**
* 类加载
*/
public abstract void loadContext(ClassLoad c);
/**
* 添加
*/
public abstract Serializable insert(Object entity) throws IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException, Exception;
/**
* 删除
*/
public abstract Serializable delete(Object entity) throws SQLException, ClassNotFoundException;
/**
* 修改
*/
public abstract Serializable update(Object entity) throws SQLException, ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException;
/**
* 根据id获取对象
*/
public abstract Object getResource(Serializable id, Class clazz) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException;
/**
* 查询所有
*/
public abstract List query(Class clazz) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException;
/**
* 封装执行sql代码.
*/
public int executeUpdate(String sql, Object... params) throws SQLException, ClassNotFoundException;
/**
* 通过sql语句,进行查询操作
* @param sql sql预警
* @param params 参数
* @return RowSet
*/
public RowSet executeQuery(String sql, Object... params) throws SQLException, ClassNotFoundException;
/**
* 通过sql语句,进行增、删、改操作
* @param sql sql预警
* @param params 参数
* @return RowSet
*/
public Object executeQueryUnique(String sql, O