java.sql.SQLSyntaxErrorException:类型为“ INTEGER”的列不能保存类型为“ CHAR”的值

时间:2019-05-09 13:48:28

标签: java jdbc

我希望能够使用我尝试过的代码更新表,但是它总是像这样显示错误

我尝试了准备好的语句,但是我不知道我是否正确地执行了操作。

所以代码看起来像这样,

try{
    String sql = "update master.Employees set EmployeeName = '" + jTextField1.getText() + "'" + ",Address = '" + jTextField3.getText() + "'" + ",PhoneNumber = '" +
            jTextField4.getText() + "'" + ",EmailAddress = '" + jTextField5.getText() + "'" + "WHERE EmployeeID = " + jTextField1.getText();
    Statement update = myconObj.createStatement();
    update.executeUpdate(sql);
}
catch (SQLException e){
    e.printStackTrace();
}

我试图输入员工ID,这是我数据库的主键,以便能够更新,但它始终显示错误:

  

java.sql.SQLSyntaxErrorException:类型为'INTEGER'的列不能   保留“ CHAR”类型的值。

我想我弄乱了抓斗结构,因为它显示了这一点

¬í sr %org.netbeans.lib.ddl.impl.CreateTable¢”j ™   xr +org.netbeans.lib.ddl.impl.ColumnListCommand2›Œî]2)³ L columnst Ljava/util/Vector;xr )org.netbeans.lib.ddl.impl.AbstractCommandø8¦Œ·q•ª Z executionWithExceptionZ    newObjectL addpropst Ljava/util/Map;L formatt Ljava/lang/String;L nameq ~ L ownerq ~ L quoteStrq ~ L spect ,Lorg/netbeans/lib/ddl/DatabaseSpecification;xp pt :create table [{object.owner}.]{object.name}
(
    {columns}
)t  EMPLOYEESpppsr java.util.VectorÙ—}[€;¯ I capacityIncrementI elementCount[ elementDatat [Ljava/lang/Object;xp       ur [Ljava.lang.Object;ÎXŸs)l  xp   
sr %org.netbeans.lib.ddl.impl.TableColumn;¦±5‘b  I decsizeZ nullableI sizeI typeL checkeq ~ L constraintColumnsq ~ L defvalq ~ xr -org.netbeans.lib.ddl.impl.AbstractTableColumn¸Ô§y[k  Z   newColumnZ  newObjectL addpropsq ~ L cnameq ~ L formatq ~ L nameq ~ L otypeq ~ L refcolq ~ L reftabq ~ xppt 
EMPLOYEEIDt ³{column.name} {column.type}[({column.size}[,{column.decsize}])][ {column.type.suffix}][ default {default.value}][ {column.notnull}not null][ check ({check.condition})] primary keyt 
EMPLOYEEID_PKt PRIMARY_KEYpp        
   pppsq ~ pt EMPLOYEENAMEt §{column.name} {column.type}[({column.size}[,{column.decsize}])][ {column.type.suffix}][ default {default.value}][ {column.notnull}not null][ check ({check.condition})]q ~ t COLUMNpp       2   pppsq ~ pt ADDRESSq ~ q ~ q ~ pp       2   pppsq ~ pt PHONENUMBERq ~ q ~ q ~ pp       
   pppsq ~ pt EMAILADDRESSq ~ q ~ q ~ pp       2   pppsq ~ pt IMAGEq ~ q ~ !q ~ pp       2   pppppppx

6 个答案:

答案 0 :(得分:1)

尝试使用length(init),如下所示:

PreparedStatement

答案 1 :(得分:0)

函数调用jTextField1.getText()基本上返回一个String对象,并且数据库需要一个整数。尝试使用Integer.parseInt(jTextField1.getText())

答案 2 :(得分:0)

您需要转换-939524096 | 1100 1000 0000 0000 0000 0000 0000 0000 200 | 0000 0000 0000 0000 0000 0000 1100 1000 的值才能传递jTextField1.getText ()。 您可以按照以下方式进行更新

integer

答案 3 :(得分:0)

也许其他字段是Integer,您可以检查PhoneNumber是由Integer设计的吗?

答案 4 :(得分:0)

问题可能是间距。

代替

+ "WHERE EmployeeID = " + jTextField1.getText();

您应该写

+ " WHERE EmployeeID = " + jTextField1.getText();

答案 5 :(得分:0)

从整数值电话号码中删除 '',使您的代码看起来像这样

String sql = "update master.Employees set EmployeeName = '" + jTextField1.getText() + "'" + ",Address = '" + jTextField3.getText() + "'" + ",PhoneNumber = " +
        jTextField4.getText() + " + ",EmailAddress = '" + jTextField5.getText() + "'" + "WHERE EmployeeID = " + jTextField1.getText();
Statement update = myconObj.createStatement();

提示:

Char='123434'
Integer=12345