我有一个名为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);
}
}
}
答案 0 :(得分:0)
我不建议这样做。您怎么知道Integer + Varchar(20)是否超过20个字符?
答案 1 :(得分:0)
正如@Connor所说,无法确保结果少于20个字符,因此使用BigInteger字段要好得多,但是如果该字段必须为varchar(20),我建议选择数据库中的字段,使用Java进行加法,然后将结果存储回数据库中。
答案 2 :(得分:0)
如果我正确理解了该问题,则要根据项目代码更新数据库中的记录。因此,您只需将现有值转换为数字,然后添加附加值(使用+
),然后将其转换回即可。
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
}
也-您应该使用在类顶部定义的类变量,因此以后不必重新创建连接。
但是,如果您添加更多的AddStockDAO
,它们中的每一个都会创建新的连接,因此建议您创建一个数据库类,在其中设置连接,然后将一些数据或查询传递给在该方法上运行的方法现有连接。