Итак, у меня есть база данных (UserInfo) с атрибутами: имя пользователя, электронная почта, пароль и т. д. Но я пытаюсь ВЫБРАТЬ все значения из имени пользователя, но отдельно, чтобы я мог использовать их по отдельности как строки. Но я не могу найти синтаксиса, который позволяет вам выбирать из определенной строки.
пример:
SELECT Username FROM UserInfo WHERE **row number = 1**
так что он выбирает имя пользователя, где номер строки, например, равен 1. Любые идеи?
Вот код: Последний метод позволяет мне проверить количество полей под атрибутом Username, чтобы затем я мог создать размер массива с этим числом x.
public void declaringDataBase() throws SQLException{
conObj = DriverManager.getConnection
("jdbc:derby://localhost:1527/UserInfo","UserInfo","1234");
statObj = conObj.createStatement();
}
public void DisplayUsers() throws SQLException{
String query = "SELECT Username FROM WHERE rownum = 2";
declaringDataBase();
rsObj = statObj.executeQuery(query);
System.out.println(rsObj.getString(1));
}
public void returnNumberInUsernameColumn() throws SQLException{
String queryCount = "SELECT COUNT(Username) FROM UserInfo";
declaringDataBase();
rsObj = statObj.executeQuery(queryCount);
String x = null;
while(rsObj.next()){
x = rsObj.getString(1);
}
int returnValue = Integer.parseInt(x);
System.out.println(returnValue);
}
}
База данных выглядит примерно так:
Username(PK) EmailAddress Password
Joe01 [email protected] 34590834ffjfdnkdfd
Frank22 [email protected] ert543897ut034noegn
Ellie334 [email protected] 345903ejfbdvkdfvvdg
где хешируются пароли.
Я хочу выбрать, скажем, просто Frank22 или Joe01, используя какое-то целое число, чтобы я мог увеличивать его, чтобы получить другие значения в имени пользователя
Нет, я не буду знать имя пользователя, я пытаюсь заполнить массив (список) данными из имени пользователя, и для этого мне нужно заполнить каждый индекс каждым именем пользователя, и мне нужно разделить имена пользователей. Поскольку использование JDBC позволяет мне печатать имя пользователя всего столбца как 1 строку, мне нужно, чтобы они были разделены.
«Поскольку использование JDBC позволяет мне распечатать имя пользователя целого столбца как одну строку»… нет, он должен вернуть вам набор результатов. Все интерфейсы БД позволяют это, иначе они были бы совершенно бесполезны. Понятия не имею, как вам удалось заставить его возвращать одну строку для всего этого. SELECT Username from UserInfo должен вернуть вам набор результатов с одним столбцом, и вы сможете перебрать все строки в таблице. Я думал, что любое руководство по JDBC покажет вам основы. Возможно, покажите нам свой Java-код, и мы расскажем, как вы его напортачили, и поможем исправить.
Я преобразовал набор результатов в строку чувак
Не груби, я явно не эксперт Я студентка A-level
«Я преобразовал набор результатов в строку» ... почему? Не делайте этого, сохраните его как набор результатов, и вы можете использовать его по назначению. Затем вы можете получить каждую отдельную часть данных в виде строки и использовать ее. P.S. Извините, я не хочу показаться грубым, извиняюсь, если вы так думали. Вы утверждали, что это «разрешено использовать только как строку», что совсем не соответствует действительности, поэтому я просто указал на то, что вы, должно быть, неправильно поняли и / или где-то напортачили. Опять же, если вы покажете нам Java, мы будем рады помочь вам исправить это, если вы не уверены.
хорошо, я отредактирую и опубликую
Это: stackoverflow.com/questions/15517736/… может помочь вам понять, как структурировать код. Или это: herongyang.com/JDBC/sqljdbc-jar-ResultSet-Loop.html (игнорируйте тот факт, что это данные SQL Server, идея ResultSet должна быть такой же). В Интернете также есть десятки других примеров, если вы выполните поиск




Если вы этого не сделаете, добавьте атрибут ID в вашу таблицу db.
Затем вы можете выбрать любое имя пользователя по его ID.
Пример
SELECT Username FROM UserInfo WHERE ID = 1
если я добавляю идентификатор в свою базу данных, возникает вопрос, как разрешить тем, кто входит в систему, автоматически назначать правильный номер идентификатора их полям?
Думаю, вам придется заново заполнить базу данных
@ JérémySchaefer в коде OP. Имя пользователя уже является PK. Почему вы хотите добавить отдельный ключ? В любом случае, если вы прочитаете последние комментарии по основному вопросу, вы увидите, что то, о чем спрашивает OP, на самом деле не является реальной проблемой.
@ADyson Ясно, да ... Я думал, что единственная проблема заключалась в том, что этот PrimaryKey отсутствовал при первом редактировании сообщения, моя проблема!
Вы можете просто выделить их все и переместить курсор.
ResultSet rs = statement.executeQuery("SELECT Username FROM UserInfo");
rs.absolute(yourIndex);
String username = rs.getString(1);
Чтобы «получить другие значения в имени пользователя», вы можете перебирать набор.
rs.absolute(yourIndex);
System.out.printf("username at %d: %s%n", yourIndex, rs.getString(1));
while (rs.next()) {
yourIndex++;
System.out.printf("username at %d: %s%n", yourIndex, rs.getString(1));
}
Я попробую, кажется, что это слишком сложно
@FranklinMemet Не уверен, что вы имеете в виду, это настолько просто, насколько возможно.
Этот метод следует вызывать только для объектов ResultSet с возможностью прокрутки (тип TYPE_SCROLL_INSENSITIVE).
Используйте ключевое слово rownum.
Select username from userinfo where rownum = 1
Синтаксис ROWNUM не существует в JDBC
даже не в запросе? запрос не зависит от языка?
Столбец ROWNUM либо отсутствует в какой-либо таблице в списке FROM, либо отображается в спецификации соединения и выходит за рамки спецификации соединения, либо появляется в предложении HAVING и не входит в список GROUP BY. Если это оператор CREATE или ALTER TABLE, то «ROWNUM» не является столбцом в целевой таблице.
Нет базы данных JDBC, это API подключения, база данных, которую вы используете, называется Derby, эквивалент rownum для дерби - это функция ROW_NUMBER (), здесь документация: db.apache.org/derby/docs/10.9/ref/rreffuncrownumber.html
SELECT
*
FROM
mytable
ORDER BY
somefield
LIMIT 1 OFFSET 5;
этот пример дает вам 6-ю строку, смещение говорит ему пропустить первые 5 строк Работает в PostgreSQL и mySQL
где "somefield" - имя пользователя?
вы можете игнорировать порядок, если не хотите заказывать пример: ВЫБЕРИТЕ имя пользователя ИЗ UserInfo LIMIT 1 OFFSET 2; даст вам Ellie334
@FranklinMemet помог тебе?
Для этого вы должны использовать компенсировать.
Selects 1st
Usernameof tableTable1
SELECT Username FROM Table1 LIMIT 1 OFFSET 0;
Note that offset value starts at 0 and limit means how many row(s) you want to select at once.
Для моего удобства вы должны использовать еще один столбец ID для этого CREATE TABLE TABLE3(ID INT PRIMARY KEY AUTO_INCREMENT,Name TEXT, Age INT); И использовать ALTER TABLE TABLE3 AUTO_INCREMENT=1 И после этого получить доступ к каждой строке с идентификатором
он работает на sqlite и sqlplus ... Какой из них вы используете?
Используя JDBC, я не знаю, что это за СУБД, но MySQL - это синтаксис, который обычно подходит для него.
Для моего удобства вы должны использовать еще один идентификатор столбца для этого CREATE TABLE TABLE3 (ID INT PRIMARY KEY AUTO_INCREMENT, Name TEXT, Age INT);
"" где номер строки 1 "не имеет смысла, потому что в ваших строках нет чисел. Чего вы на самом деле пытаетесь достичь и почему? Конечно, поскольку имя пользователя является первичным ключом, поэтому оно уникально, поэтому оно делает имеет смысл выбирать этим, так как вы всегда получите ровно 1 или 0 строк. если это просто
where Username = 'Joe01'или что-то еще. В противном случае я не уверен, почему вы хотите выбирать любую старую строку или использовать число Можете ли вы пояснить, чего вы пытаетесь достичь, если не этого?