Пустое значение поля SQL
Значение NULL в SQL означает отсутствие данных, а не
пустую строку. Колонку без NOT NULL можно
оставить незаполненной при INSERT.
Метод getString после SQL NULL даёт в Java
null. Дополнительно проверяют wasNull
сразу после чтения:
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:nulls.db")) {
try (Statement statement = connection.createStatement()) {
statement.execute("""
CREATE TABLE IF NOT EXISTS memos (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
remark TEXT
)
""");
statement.executeUpdate(
"INSERT INTO memos (title) VALUES ('idea')"
);
ResultSet result = statement.executeQuery("SELECT remark FROM memos WHERE id = 1");
if (result.next()) {
String text = result.getString("remark");
if (result.wasNull()) {
System.out.println("missing");
} else {
System.out.println(text);
}
}
}
}
}
}
}
Тот же столбец можно прочитать через нуллабельный
результат getString без отдельной ветки,
если дальше работают только с проверкой на null:
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:nulls.db")) {
PreparedStatement insert = connection.prepareStatement(
"INSERT INTO memos (title, remark) VALUES (?, ?)"
);
insert.setString(1, "done");
insert.setString(2, "shipped");
insert.executeUpdate();
PreparedStatement query = connection.prepareStatement(
"SELECT remark FROM memos WHERE title = ?"
);
query.setString(1, "idea");
var result = query.executeQuery(); if (result.next()) {
String remark = result.getString("remark");
System.out.println(remark != null ? remark : "none");
}
}
}
}
}
Создайте таблицу items в stock.db
с обязательным sku и необязательным
comment, добавьте строку без комментария
и выведите "empty", если поле пустое.
Добавьте строку с комментарием "fragile"
и выведите текст комментария для обеих записей.