Я создал базу данных Sqlite с помощью DB Browser для Sqlite v3.10.1 с тремя таблицами: Book, Patron и Loan.Я успешно добавил некоторые примеры данных в таблицы Book и Patron, но когда я пытаюсь вставить некоторые данные в Loans, я получаю сообщение об ошибке, сообщающее, что ограничение внешнего ключа не выполнено.
- Я попытался вставитьданные как из браузера БД, так и из Java-программы (включая код)
SQL-код для создания таблиц:
CREATE TABLE `Book` (
`BookID` INTEGER PRIMARY KEY AUTOINCREMENT,
`ISBN` TEXT NOT NULL,
`Title` TEXT NOT NULL,
`Author` TEXT NOT NULL
);
CREATE TABLE `Patron` (
`PatronID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`Name` TEXT NOT NULL,
`Address` INTEGER NOT NULL
);
CREATE TABLE `Loan` (
`LoanID` INTEGER NOT NULL,
`BookID` INTEGER NOT NULL,
`PatronID` INTEGER NOT NULL,
`BorrowDate` TEXT NOT NULL,
`DueDate` TEXT NOT NULL,
FOREIGN KEY(`BookID`) REFERENCES `Book`(`BookID`),
FOREIGN KEY(`PatronID`) REFERENCES `Patron`(`PatronID`),
PRIMARY KEY(`LoanID`)
);
Java-программа:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class LibraryDatabase
{
public static Connection connect() throws SQLException
{
Connection conn = null;
// db parameters
String url = "jdbc:sqlite:database.db";
// create a connection to the database
conn = DriverManager.getConnection(url);
System.out.println("Connection to SQLite has been established.");
return conn;
}
public static void main(String[] args) throws SQLException
{
Connection c = connect();
Statement stmt = c.createStatement();
String sql = "INSERT INTO Book (ISBN, Title, Author) VALUES ('978-1-4842-3272-9', 'Programming PIC Microcontrollers with XC8', 'Armstrong Subero');";
stmt.execute(sql);
stmt.close();
String sql2 = "INSERT INTO Loans (BookID, PatronID, BorrowDate, DueDate) VALUES (1, 1, '23/06/2019', '23/07/2019')";
stmt.execute(sql2);
}
}
Сообщение об ошибке из браузера БД:
Error adding record:
FOREIGN KEY constrained failed (INSERT INTO
'Loan'() VALUES(1,0,0,",");)
Трассировка стека из программы Java:
Connection to SQLite has been established.
Exception in thread "main" java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such table: Loans)
at org.sqlite.DB.newSQLException(DB.java:383)
at org.sqlite.DB.newSQLException(DB.java:387)
at org.sqlite.DB.throwex(DB.java:374)
at org.sqlite.NativeDB.prepare(Native Method)
at org.sqlite.DB.prepare(DB.java:123)
at org.sqlite.Stmt.execute(Stmt.java:113)
at LibraryDatabase.main(LibraryDatabase.java:32)