Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Chapter 25
Databases
Chapter Scope
•
•
•
•
Database concepts
Tables and queries
SQL statements
Managing data in a database
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 2
Databases
• A database is a potentially large repository of
data, organized for quick search and
manipulation
• A database management system (DBMS) is
software that interacts with the database
• Four primary operations: create, read, update,
and delete (CRUD)
• There are several underlying ways to organize a
database
• The most common type: a relational database
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 3
Database Tables
• Two examples of database tables:
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 4
Database Tables
• These tables are related using the locationID
field
• One location can be associated with multiple
people without duplicating data
• This saves space, reduces inconsistencies, and
makes updates easier
• We can query the database (ask it a question) to
determine things like
– How many people live in Maple Glen?
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 5
Database Connections
• Before we can interact with a database in a Java
program, we must first establish a connection
• The Java Database Connectivity (JDBC) API
provides software to establish the connection
• In addition, we need software called a driver for
the specific type of database used
• For example, if you're using a MySQL databse,
you'll need an appropriate MySQL driver
• SQL (Structured Query Language) is a language
for interacting with databases
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 6
import java.sql.*;
/**
* Demonstrates the establishment of a JDBC connector.
*
* @author Java Foundations
* @version 4.0
*/
public class DatabaseConnector
{
/**
* Establishes the connection to the database and prints an
* appropriate confirmation message.
*/
public static void main (String args[])
{
try
{
Connection conn = null;
// Loads the class object for the mysql driver into the DriverManager.
Class.forName("com.mysql.jdbc.Driver");
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 7
// Attempt to establish a connection to the specified database via the
// DriverManager
conn = DriverManager.getConnection("jdbc:mysql://comtor.org/" +
"javafoundations?user=jf2e&password=hirsch");
if (conn != null)
{
System.out.println("We have connected to our database!");
conn.close();
}
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
ex.printStackTrace();
} catch (Exception ex) {
System.out.println("Exception: " + ex.getMessage());
ex.printStackTrace();
}
}
}
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 8
Creating Databases
• A SQL statement called CREATE TABLE can be
used to add a new table to the database
• You specify the field names and sizes, among
other things
CREATE TABLE Student (student_ID INT UNSIGNED NOT
NULL AUTO_INCREMENT, PRIMARY KEY (student_ID),
firstName varchar(255), lastName varchar(255))
• This establishes that the student_ID field will
be the primary key, which must be unique
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 9
Creating Databases
• To execute this statement from a Java program,
you store it as a string and invoke the execute
method of the Statement class (from the
JDBC)
String myCommand = "CREATE TABLE …";
Statement stmt = conn.createStatement();
boolean result = stmt.execute(myCommand);
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 10
Altering Tables
• The structure of a database table can be changed
with the ALTER TABLE statement
• To add age and gpa fields to the Student
table:
ALTER TABLE Student ADD COLUMN (age tinyint UNSIGNED,
gpa FLOAT (3,2) unsigned)
• To eliminate a field and remove all of its data:
ALTER TABLE Student DROP COLUMN firstName
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 11
Queries
• Data from a query is returned in a ResultSet
object
• The SHOW COLUMNS statement returns the
structure (a list of fields and their attributes) of a
table
ResultSet rSet = stmt.executeQuery("SHOW COLUMNS
FROM Student");
• We can extract meta data from the result set:
ResultSetMetaData rsmd = rSet.getMetaData();
int numColumns = rsmd.getColumnCount();
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 12
Queries
• The metadata for the Student table:
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 13
Inserting Data
• The INSERT command is used to add a row of
data to a table
• It specifies the columns and their corresponding
values:
INSERT Student (lastName, age, gpa) VALUES
("Campbell", 19, 3.79)
• The studentID field is automatically
incremented, and therefore not specified
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 14
Inserting Data
• Some sample data for the Student class:
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 15
Retrieving Data
• The SELECT … FROM command is used to retrieve
specific data from the database
• To get a list of all student's names and GPAs:
SELECT lastName, gpa FROM Student
• A * can be used to get all fields
• The WHERE clause further specifies which data is
sought:
SELECT * FROM Student WHERE age >= 21 && gpa <= 3.0
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 16
Updating Data
• To update existing data in a table, we:
– Obtain a ResultSet and navigate to the row(s) to
update
– Update the ResultSet value(s)
– Update the database with the revised ResultSet
ResultSet rSet = stmt.executeQuery("SELECT * FROM
Student WHERE lastName = \"Jones\"");
rSet.first()
rSet.updateFloat("gpa", 3.41f);
rSet.UpdateRow();
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 17
import java.sql.*;
/**
* Demonstrates interaction between a Java program and a database.
*
* @author Java Foundations
* @version 4.0
*/
public class DatabaseModification
{
/**
* Carries out various CRUD operations after establishing the
* database connection.
*/
public static void main (String args[])
{
Connection conn = null;
try
{
// Loads the class object for the mysql driver into the DriverManager.
Class.forName("com.mysql.jdbc.Driver");
// Attempt to establish a connection to the specified database via the
// DriverManager
conn = DriverManager.getConnection("jdbc:mysql://comtor.org/" +
"javafoundations?user=jf2e&password=hirsch");
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 18
// Check the connection
if (conn != null)
{
System.out.println("We have connected to our database!");
// Create the table and show the table structure
Statement stmt = conn.createStatement();
boolean result = stmt.execute("CREATE TABLE Student " +
" (student_ID INT UNSIGNED NOT NULL AUTO_INCREMENT, " +
" PRIMARY KEY (student_ID), lastName varchar(255), " +
" age tinyint UNSIGNED, gpa FLOAT (3,2) unsigned)");
System.out.println("\tTable creation result: " + result);
DatabaseModification.showColumns(conn);
// Insert the data into the database and show the values in the table
Statement stmt2 = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_UPDATABLE);
int rowCount = stmt2.executeUpdate("INSERT Student " +
"(lastName, age, gpa) VALUES (\"Campbell\", 19, 3.79)");
DatabaseModification.showValues(conn);
// Close the database
conn.close();
}
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 19
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
ex.printStackTrace();
} catch (Exception ex) {
System.out.println("Exception: " + ex.getMessage());
ex.printStackTrace();
}
}
/**
* Obtains and displays a ResultSet from the Student table.
*/
public static void showValues(Connection conn)
{
try
{
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SELECT * FROM Student");
DatabaseModification.showResults("Student", rset);
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
ex.printStackTrace();
}
}
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 20
/**
* Displays the structure of the Student table.
*/
public static void showColumns(Connection conn)
{
try
{
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SHOW COLUMNS FROM Student");
DatabaseModification.showResults("Student", rset);
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
ex.printStackTrace();
}
}
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 21
/**
* Displays the contents of the specified ResultSet.
*/
public static void showResults(String tableName, ResultSet rSet)
{
try
{
ResultSetMetaData rsmd = rSet.getMetaData();
int numColumns = rsmd.getColumnCount();
String resultString = null;
if (numColumns > 0)
{
resultString = "\nTable: " + tableName + "\n" +
"=======================================================\n";
for (int colNum = 1; colNum <= numColumns; colNum++)
resultString += rsmd.getColumnLabel(colNum) + "
";
}
System.out.println(resultString);
System.out.println(
"=======================================================");
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 22
while (rSet.next())
{
resultString = "";
for (int colNum = 1; colNum <= numColumns; colNum++)
{
String column = rSet.getString(colNum);
if (column != null)
resultString += column + "
";
}
System.out.println(resultString + '\n' +
"-------------------------------------------------------");
}
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
ex.printStackTrace();
}
}
}
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 23
Deleting Data
• To delete specific data from a table:
DELETE FROM Student WHERE age >= 30
• To delete an entire table:
DROP TABLE Student
Java Foundations, 3rd Edition, Lewis/DePasquale/Chase
25 - 24