Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpRlOtm 223 of 299 menu
◀ ▶

Связь один ко многим в Kotlin

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

Два автора и три книги с общими внешними ключами оформляют так:

import java.sql.DriverManager fun main() { DriverManager.getConnection("jdbc:sqlite:otm_books.db") .use { connection -> connection.createStatement().execute( "PRAGMA foreign_keys = ON" ) connection.createStatement().use { statement -> statement.execute( """ CREATE TABLE IF NOT EXISTS authors ( id INTEGER PRIMARY KEY, name TEXT NOT NULL ) """ ) statement.execute( """ CREATE TABLE IF NOT EXISTS books ( id INTEGER PRIMARY KEY, author_id INTEGER NOT NULL, title TEXT NOT NULL, FOREIGN KEY (author_id) REFERENCES authors (id) ) """ ) } val author = connection.prepareStatement( "INSERT INTO authors (name) VALUES (?)" ) author.setString(1, "Mira Cole") author.executeUpdate() author.setString(1, "Jon Reed") author.executeUpdate() val book = connection.prepareStatement( """ INSERT INTO books (author_id, title) VALUES (?, ?) """ ) book.setInt(1, 1) book.setString(2, "Quiet Harbor") book.executeUpdate() book.setInt(1, 1) book.setString(2, "Stone Path") book.executeUpdate() book.setInt(1, 2) book.setString(2, "Wide Field") book.executeUpdate() } }

Подсчёт книг у автора выполняют фильтром по author_id. У первого автора в примере получается две строки:

import java.sql.DriverManager fun main() { DriverManager.getConnection("jdbc:sqlite:otm_books.db") .use { connection -> connection.createStatement().execute( "PRAGMA foreign_keys = ON" ) connection.createStatement().use { statement -> statement.execute( """ CREATE TABLE IF NOT EXISTS authors ( id INTEGER PRIMARY KEY, name TEXT NOT NULL ) """ ) statement.execute( """ CREATE TABLE IF NOT EXISTS books ( id INTEGER PRIMARY KEY, author_id INTEGER NOT NULL, title TEXT NOT NULL, FOREIGN KEY (author_id) REFERENCES authors (id) ) """ ) } val author = connection.prepareStatement( "INSERT INTO authors (name) VALUES (?)" ) author.setString(1, "Mira Cole") author.executeUpdate() val book = connection.prepareStatement( """ INSERT INTO books (author_id, title) VALUES (?, ?) """ ) book.setInt(1, 1) book.setString(2, "Quiet Harbor") book.executeUpdate() book.setInt(1, 1) book.setString(2, "Stone Path") book.executeUpdate() val count = connection.prepareStatement( """ SELECT COUNT(*) AS total FROM books WHERE author_id = ? """ ) count.setInt(1, 1) val result = count.executeQuery() result.next() println(result.getInt("total")) } }

В otm_books.db добавьте автора "Eva Nash" и две его книги. Выведите число книг с author_id этого автора.

Создайте otm_brands.db с таблицами brands и models. Одной марке сопоставьте три модели и выведите их названия.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить