如何添加整数和 Varchar(20) 并在 mysql 中存储为 Varchar(20)

How to add integer and Varchar(20) and store as Varchar(20) in mysql

我有一个名为 spareparts 的数据库,其中所有值都存储为 varchar(20)。 我通过 jtextfield 从用户那里获取输入作为数字,然后转换为整数。 s1(这是项目代码)和 s2(这是要添加到实际数量的数量)是输入 现在我想将此输入添加到 'quantity'(也是 varchar)中,如:

public class AddStockDAO{
   Connection connection;
   PreparedStatement preparedStatement;
   ResultSet resultSet;
   Statement statement;

   public AddStockDAO(String s1,String s2)
   {
       int num=Integer.parseInt(s2);
       String sql= "select "+
             " cast(quantity as INT) from spareparts"+
             "set quantity+= "+num+
             " cast(quantity as varchar(20))"+
             "where itemcode='?'";
       try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "")) {
           try (PreparedStatement stmt = conn.prepareStatement(sql)) {
               stmt.setString(1, s1);

               stmt.executeUpdate();
           }
       } catch (SQLException ex) {   
           Logger.getLogger(AddProductGUI.class.getName()).log(Level.SEVERE, null, ex);
       }

   } 
}

我不推荐这个。你怎么知道 Integer + Varchar(20) 是否超过 20 个字符?

正如@Connor 所说,无法确保结果少于 20 个字符,因此使用 BigInteger 字段要好得多,但如果字段必须是 varchar(20),我建议从数据库中选择该字段,在 java 中进行加法运算,然后将结果存储回数据库中。

如果我理解正确的话,你想根据itemcode更新数据库中的记录。因此,您只需将现有值转换为数字,添加您的附加值(使用 +)并将其转换回去。

int num = 0;
try {
    num = Integer.parseInt(s2);
} catch (Exception e) {
    System.out.println('Nope, that was not a number');
    //Do something else?
}
String insertQuery = "UPDATE spareparts SET quantity = cast(cast(quantity as integer)+"+num+" as char(20)) where itemcode = "+s1+";";

try {
    connection = DriverManager.getConnection(...); //add your data
    preparedStatement = connection.prepareStatement(sql)
    preparedStatement.executeUpdate();
} catch (Exception e) {
    //Something broke
}

此外 - 您应该使用在 class 顶部定义的 class 变量,这样您以后就不必重新创建连接。
但是如果你添加更多 AddStockDAO,它们中的每一个都会创建新的连接,所以我建议你创建一个数据库 class 在你设置连接的地方,然后将一些数据或查询传递给一个方法运行 它在现有连接上。