Выбор части столбцов в SQLite
Звёздочка * в SELECT тянет все колонки.
Чаще перечисляют явный список - так меньше данных
и проще читать результат.
Таблица может хранить служебные поля, которые в отчёт не попадают. В запросе оставляют только нужные имена:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Main {
public static void main(String[] args) throws Exception {
try (Connection connection = DriverManager.getConnection("jdbc:sqlite:partial_view.db")) {
try (Statement statement = connection.createStatement()) {
statement.execute("""
CREATE TABLE IF NOT EXISTS devices (
id INTEGER PRIMARY KEY,
serial TEXT NOT NULL,
note TEXT,
warranty_until TEXT
)
""");
statement.executeUpdate("""
INSERT INTO devices (serial, note, warranty_until)
VALUES ('SN-44', 'lab unit', '2027-01-01')
""");
ResultSet result = statement.executeQuery("SELECT serial, warranty_until FROM devices");
while (result.next()) {
System.out.println(result.getString("serial"));
System.out.println(result.getString("warranty_until"));
}
}
}
}
}
}
Порядок имён в списке задаёт порядок столбцов в
ResultSet. Можно читать по индексу, но
имена надёжнее при изменении запроса:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class Main {
public static void main(String[] args) throws Exception {
try (Connection connection = DriverManager.getConnection("jdbc:sqlite:partial_view.db")) {
PreparedStatement query = connection.prepareStatement(
"SELECT note FROM devices WHERE serial = ?"
);
query.setString(1, "SN-44");
var result = query.executeQuery(); if (result.next()) {
System.out.println(result.getString("note"));
}
}
}
}
}
Создайте таблицу lots в batch.db
с полями code, qty и comment,
добавьте партию и выведите только code
и qty.
Выведите comment для партии с кодом
"B-12", не выбирая остальные столбцы.