Вставка числового типа данных с использованием оператора SQL в Java

Я пишу метод, который позволяет пользователям хранить свои данные в моей базе данных.

Проблема заключается в хранении числового типа данных в моей базе данных для идентификатора пользователя.

Во-первых, как я могу узнать, является ли идентификационный номер автоинкрементным? Это его свойства:

Type: Numeric
Column size: 4
Decimal digits: 0
Part of primary key: true
Part of an index: true
Position: 1

Я уверен, что где-то я где-то читал, что установка его как части индекса (true) позволяет автоматически увеличивать. Может ли кто-нибудь подтвердить?

Что еще более важно, при вставке данных в таблицу я получаю сообщение об ошибке:

Columns of type 'NUMERIC' cannot hold values of type 'CHAR'. 

Это фрагмент моего кода вставки (я могу показать больше, если потребуется):

Statement pStatement = conn.createStatement();
String selectSQL = ("INSERT INTO APP.PERSON VALUES ('" + '3' + "','" + user + "','" + pass + "','" + fName + "','" + sName + "','" + sQuestion + "','" + sAnswer + "') ");
pStatement.executeUpdate(selectSQL);

Как вы видите, я устанавливаю ID (первое значение), 3 вручную. Я считаю, что это вызывает ошибку и хотел бы знать, как вставить числовое значение, используя команду INSERT.

Я кодирую на Java, используя Netbeans 7.3 Beta 2, в Mac OS X Mountain Lion. Я использую базу данных Derby.

1
nl ja de
Используйте заполнители: вы поблагодарите меня позже. Однако, как говорится в сообщении об ошибке, один из столбцов содержит недопустимое значение - например, будет ли javadb конвертировать '3' в 3 ? Я знаю, SQL Server будет, но .. также, чтобы сделать жизнь проще, убедитесь, что включить имена столбцов в INSERT .
добавлено автор user166390, источник
Это может быть другой столбец полностью - с использованием имен столбцов, например. INSERT INTO t (N1, N2) VALUES (V1, V2) может помочь «прояснить», какие значения сопоставляются с какими столбцами. Это разъяснение дополнительно совершено/усилено с помощью [типизированных] заполнителей, так что вся подпись может быть визуально проверена сверху (таблица) на дно (Java) быстро.
добавлено автор user166390, источник
Спасибо, спасибо. У меня есть другой метод, делающий то же самое по-другому, и я считаю, что я использую там заполнители - хотя я не знаю, что это такое, я предполагаю. Мои знания в программировании не удивительны! Я должен был упомянуть, я попробовал «3» - «3» и 3. Ни один из них не работает.
добавлено автор John Vasiliou, источник
Имеет смысл - у меня больше кода для реализации! Благодарю.
добавлено автор John Vasiliou, источник

3 ответы

Привет, я предлагаю вам использовать prepareStatement

String template = "INSERT INTO APP.PERSON VALUES (YOUR,TABLE,COLLUMN,NAME) values (?,?,?,?)";
           PreparedStatement stmt = yourConnection.prepareStatement(template);

Поэтому, если вы хотите установить свой ID как целое число, дайте java сделать это с помощью

       stmt.setInt(1, ID);
       stmt.setString(2, user);
       stmt.setString(3, fName);
       stmt.executeUpdate();

I dont know how is your table structure but this is an example if you want to use int use stmt.setInt(1, 3);

1--> position that u set up in string template

3--> maybe u want to hard coded the ID

вот мой пример шаблона для использования prepareStatement

String name = "shadrach"
Double price = "100.00"
int qty = 3;
    String template = "INSERT INTO PRODUCT (NAME,PRICE,QTY) values (?,?,?)";
                PreparedStatement stmt = connection.prepareStatement(template);
                stmt.setString(1, name);
                stmt.setDouble(2, price);
                stmt.setInt(3, qty);
                stmt.executeUpdate();
3
добавлено
В моем другом методе я написал его точно так, как это, но без «VALUES (ID, NAME, AGE)» и т. Д. Большое спасибо. Все ответы помогли - проблема еще не решена, но я думаю, что моя работа отключена. Я не знаю, какой ответ выбрать как правильный - все они!
добавлено автор John Vasiliou, источник
Полностью исправлено - отлично работает, спасибо вам всем. Это помогло, поэтому я выбрал его в качестве ответа после его небольшого редактирования из-за наличия «VALUE» после APP.PERSON, который не был нужен.
добавлено автор John Vasiliou, источник
Мое удовольствие помочь вам бросить :)
добавлено автор shadrachJabonir, источник

Вы не должны указывать одинарные кавычки вокруг номера. Я не уверен в типах других типов данных столбцов, но все, что является числовым, не должно содержать одинарных кавычек.

Statement pStatement = conn.createStatement();

String selectSQL = ("INSERT INTO APP.PERSON VALUES (3,'" + user + "','" + pass + "','" + fName + "','" + sName + "','" + sQuestion + "','" + sAnswer + "') ");

 pStatement.executeUpdate(selectSQL);

Вы также должны изучить возможность переключения на использование PreparedStatement , объединив строки для выполнения SQL, вы оставите вас уязвимыми для атаки SQL-инъекций. Подготовленные заявления помогут смягчить этот риск.

1
добавлено
Вы убедились, что вы выбрали одиночную кавычку, следуя ( и предшествуя , ?
добавлено автор Kevin Bowersox, источник
Я обновил, чтобы удалить ненужную конкатенацию
добавлено автор Kevin Bowersox, источник
Спасибо, но я все равно получаю ту же ошибку, что и «3», возможно, это не ошибка моего идентификатора, если это определенно правильный способ вставки числового значения. Как вы можете видеть, я назвал свое заявление pStatement, поскольку он был PreparedStatement, но у него были трудности, поэтому он изменился на данный момент - я поменяю его, как только закончите.
добавлено автор John Vasiliou, источник
Я буквально скопировал вашу одну строку выше (средний) - не повезло, такая же ошибка.
добавлено автор John Vasiliou, источник
Я просмотрел ваше обновление и скопировал его снова и попробовал - к сожалению, такую ​​же ошибку.
добавлено автор John Vasiliou, источник

Вы вставляете символ 3, когда таблица ожидает номер.

Вы можете указать, является ли столбец автоматическим приращением, используя Метод ResultSetMetaData isAutoIncrement. Надеюсь, это поможет....

1
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async