AddData
a second time. When you created the table,
your SQL statement
said NAME VARCHAR(32) NOT NULL PRIMARY KEY
. A primary key is a value that can't have duplicates in the table.
The first time you run the AddData
program, you add a row with the name Barry Burd
to the table.
That's okay. But the second time you run the AddData
program, you try to add a second row with the same
name Barry Burd
to the table. But since NAME
is a primary key, having two rows with the
same NAME
(Barry Burd
)
is not allowed. So the program refuses to add the data.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class CreateTable { public static void main(String args[]) { final String CONNECTION = "jdbc:sqlite:AccountDatabase.db"; try (Connection conn = DriverManager.getConnection(CONNECTION); var statement = conn.createStatement()) { statement.executeUpdate(""" create table ITEMS (NAME VARCHAR(32) NOT NULL PRIMARY KEY, PRICE FLOAT, TAXRATE FLOAT)"""); System.out.println("ITEMS table created."); } catch (SQLException e) { System.out.println(e.getMessage()); } } } import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class AddData { public static void main(String args[]) { final String CONNECTION = "jdbc:sqlite:AccountDatabase.db"; try (Connection conn = DriverManager.getConnection(CONNECTION); var statement = conn.createStatement()) { statement.executeUpdate(""" insert into ITEMS values ('Food', 10.00, 0.05)"""); statement.executeUpdate(""" insert into ITEMS values ('Clothing', 20.00, 0.07)"""); System.out.println("Rows added."); } catch (SQLException e) { System.out.println(e.getMessage()); } } } import static java.lang.System.out; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.text.NumberFormat; public class GetData { public static void main(String args[]) { NumberFormat currency = NumberFormat.getCurrencyInstance(); final String CONNECTION = "jdbc:sqlite:AccountDatabase.db"; try (Connection conn = DriverManager.getConnection(CONNECTION); var statement = conn.createStatement(); var resultset = statement.executeQuery("select * from ITEMS")) { while (resultset.next()) { out.print(resultset.getString("NAME")); out.print(", "); double price = resultset.getFloat("PRICE"); double taxRate = resultset.getFloat("TAXRATE"); out.println(currency.format(price * (1 + taxRate))); } } catch (SQLException e) { e.printStackTrace(); } } } import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DropTable { public static void main(String[] args) { final String CONNECTION = "jdbc:sqlite:AccountDatabase.db"; try (Connection conn = DriverManager.getConnection(CONNECTION); var statement = conn.createStatement()) { statement.executeUpdate("drop table ITEMS"); System.out.println("ITEMS table dropped."); } catch (SQLException e) { e.printStackTrace(); } } }