java hibernate执行多条SQL语句的问题
下面这个方法的作用是验证传入的参数是否是定义数据库字段类型的合法字符。简单的说我现在要做一个动态添加表字段的JAR包,用这个JAR需要用户传入包括字段名,字段类型,字段长...
下面这个方法的作用是验证传入的参数是否是定义数据库字段类型的合法字符。简单的说我现在要做一个动态添加表字段的JAR包,用这个JAR需要用户传入包括字段名,字段类型,字段长度。现在的问题是在验证字段类型时遇到了问题。关于验证字段类型,我的思路是先创建一张临时表,再用传入的参数作为定义字段的数据类型,随便添加一个字段,看一下代码吧:
public boolean validationColumnType(String columnType){
Session session = HibernateSessionFactory.getSession();
try {
StringBuffer sql = new StringBuffer();
if(validationTable("tempTestTable")){
sql.append("drop table tempTestTable; ");
}
sql.append("create table tempTestTable(a char(4)); ");
sql.append("alter table tempTestTable add test " + columnType + "(50);");
Transaction tr = session.beginTransaction();
tr.begin();
Query query;
query = session.createSQLQuery(sql.toString());
query.executeUpdate();
tr.commit();
session.close();
return !validationColumn("tempTestTable", "test");
} catch (Exception e) {
// TODO Auto-generated catch block
//e.printStackTrace();
} finally
{
if(session.isConnected())
session.close();
}
return false;
}
如果用SQL SERVER就没有问题,如果用MYSQL或ORACLE就一直返回false,后来测试发现是SQL语句的问题,就是这几行代码:
if(validationTable("tempTestTable")){
sql.append("drop table tempTestTable; ");
}
sql.append("create table tempTestTable(a char(4)); ");
sql.append("alter table tempTestTable add test " + columnType + "(50);");
请高手告诉我怎么解决这个问题。或者您有好的验证数据类型的思路也可以谢谢啦 展开
public boolean validationColumnType(String columnType){
Session session = HibernateSessionFactory.getSession();
try {
StringBuffer sql = new StringBuffer();
if(validationTable("tempTestTable")){
sql.append("drop table tempTestTable; ");
}
sql.append("create table tempTestTable(a char(4)); ");
sql.append("alter table tempTestTable add test " + columnType + "(50);");
Transaction tr = session.beginTransaction();
tr.begin();
Query query;
query = session.createSQLQuery(sql.toString());
query.executeUpdate();
tr.commit();
session.close();
return !validationColumn("tempTestTable", "test");
} catch (Exception e) {
// TODO Auto-generated catch block
//e.printStackTrace();
} finally
{
if(session.isConnected())
session.close();
}
return false;
}
如果用SQL SERVER就没有问题,如果用MYSQL或ORACLE就一直返回false,后来测试发现是SQL语句的问题,就是这几行代码:
if(validationTable("tempTestTable")){
sql.append("drop table tempTestTable; ");
}
sql.append("create table tempTestTable(a char(4)); ");
sql.append("alter table tempTestTable add test " + columnType + "(50);");
请高手告诉我怎么解决这个问题。或者您有好的验证数据类型的思路也可以谢谢啦 展开
1个回答
展开全部
要兼容,还是分开语句吧。多写几行代码而已。
sql.append("create table tempTestTable(a char(4)); ");
sql.append("alter table tempTestTable add test " + columnType + "(50);");
既然都是自己处理的,两句合成一句,不更方便
sql.append("create table tempTestTable(a " + columnType + "(50) ");
columnType 还要看可能输入的情况
sql.append("create table tempTestTable(a char(4)); ");
sql.append("alter table tempTestTable add test " + columnType + "(50);");
既然都是自己处理的,两句合成一句,不更方便
sql.append("create table tempTestTable(a " + columnType + "(50) ");
columnType 还要看可能输入的情况
追问
我这错误犯的真低级,谢谢你呀。
我是新手hibernate不是很熟,分开写也报错,能不能劳烦你把这段代段分开写一下让我抄抄,完整一点,谢谢啦
追答
public boolean validationColumnType(String tableName, String columnName, String columnType){
Connection conn = null;
try{
conn = getConn();
conn.setAutoCommit(false);
}catch(Exception e){
e.printStackTrace();
return false;
}
try{
String sql;
if(validationTable(tableName)){
sql = "DROP TABLE %s";
sql = String.format(sql, tableName);
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.executeUpdate();
}
sql="CREATE TABLE %s (%s " + columnType + "(50) )";
sql = String.format(sql, tableName, columnName, columnType);
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.executeUpdate();
conn.commit();
return true;
} catch (Exception e) {
try{conn.rollback();} catch (Exception e2) {e2.printStackTrace();}
e.printStackTrace();
} finally{
if(conn!=null){
try{conn.close();} catch (Exception e2) {e2.printStackTrace();}
}
}
return false;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询