Как добавить целое число и Varchar (20) и сохранить как Varchar (20) в MySQL

0

У меня есть БД с именем spareparts, в которой все значения хранятся как varchar (20). Я принимаю ввод от пользователя через jtextfield в качестве числа, а затем преобразовать в целое число. s1 (который является itemcode) и s2 (который является количеством, которое нужно добавить к фактическому количеству) являются входными данными. Теперь я хочу добавить эти входные данные в "количество" (которое также является 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
    Не могли бы вы уточнить? Вы хотите сохранить этот номер в «NUM_EnteredByUser» или хотите получить этот номер из выбора БД? Для чего нужен пример кода?
  • 0
    Я считаю, что op пытается получить от пользователя два значения: число, которое нужно добавить к количеству, и код товара.
Показать ещё 1 комментарий
Теги:
user-interface
jframe

3 ответа

0

Я бы не рекомендовал это. Как бы вы узнали, если Integer + Varchar (20) больше 20 символов?

  • 0
    Этого не может быть. Смотрите максимальное значение целого числа
  • 0
    @ Matt Я знаю, что в Java есть максимальное значение для целого числа, но число в БД - это varchar (20). Я бы порекомендовал использовать BigInteger для дополнения.
Показать ещё 3 комментария
0

Если я правильно понимаю проблему, вы хотите обновить запись в БД в соответствии с кодом товара. Таким образом, вы делаете оператор обновления, где вы устанавливаете quantity виде строки (просто добавьте ' вокруг числа.

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, каждое из них создаст новое соединение, поэтому я бы предложил создать класс базы данных, в котором вы устанавливаете соединение, и просто передаете некоторые данные или запрос методу, чтобы запустить его на существующем соединении.

  • 0
    Этот запрос просто обновляет значение. Я хочу, чтобы этот запрос добавил значение в уже существующее значение.
  • 0
    О, так что, если есть значение 3, а человек поставил 4, вы хотите обновить до 7?
Показать ещё 3 комментария
0

Как сказал @Connor, нет способа убедиться, что результат меньше 20 символов, поэтому использование поля BigInteger намного лучше, но если поле ДОЛЖНО быть varchar (20), я бы порекомендовал выбрать это поле из базы данных, делая сложение в Java, а затем сохраняя результат обратно в базе данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню