10月29日

今天想做修改字段的功能,

sql语句修改字段信息是这样的:

alter table 表名称 change 字段原名称 字段新名称 字段类型 [是否允许非空]

要实现这个功能需要将旧字段名称也传递过来,于是我需要在js中额外申明一个变量来存储这个旧的字段名称

var oldname=data.zdname;

下面是我根据sql语句写的dao层修改函数,
public void gaizd(String tbname,String zdname,String zdkind,String zdlength,String kong,String zdcn,String oldname)
{
if(kong.equals("t")||kong.equals("T")||kong.equals("YES")){
kong=" NULL";
}else {
kong=" NOT NULL";
}
String sql="";
if(zdkind.equals("int")||zdkind.equals("double")){
//准备sql语句,添加字段
sql= "alter table "+tbname+" change column "+oldname+" "+zdname+" "+zdkind+kong+" comment '"+zdcn+"'" ;
}else{
sql= "alter table "+tbname+" change column "+oldname+" "+zdname+" "+zdkind+" ( "+zdlength+") "+kong+" comment '"+zdcn+"'" ;
}
System.out.println(sql);
//获得链接对象
Connection connection = Util.getConnection();
PreparedStatement preparedStatement = null;//定义在try外用于在finally中释放,因为在try中是局部变量
try {
//创建语句传输对象
preparedStatement = connection.prepareStatement(sql);
preparedStatement.executeUpdate();//执行sql
// System.out.println("1次");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//关闭资源
Util.close(preparedStatement);
Util.close(connection);
}


在实际使用功能进行修改的时候报了sql错误,一个是Data truncation: Invalid use of NULL value,这个需要注意的是如果表中已经存进去数据,
再将一个null字段改为Not Null 就是不可以的,会产生矛盾,因为有数据存在,就意味着允许null的字段的值如果是空就会插入NULL,但是当该字段类型
修改not null 这个已经存在的NULL 就会产生冲突。

还有一个错误是Data truncated for column,我百度查找的结果是说修改字段的长度要比原来的长度短,但是我后来尝试并没有这个限制,
在修改了上述的错误之后这个错误也就没有了,所以我认为这是设置空值的关联问题,解决设置为空问题就可以了。

学习时间:17:54到22:37

 
原文地址:https://www.cnblogs.com/buyaoya-pingdao/p/15487716.html