outString += "sailing = " + this. sailing + "\n";
outString += "numberOfTickets = " + this. numberOfTickets + "\n";
outString += "------------------------------------------" + "\n";
return outString;
}
public String retrieveFromDB()
{
java. sql. Connection dbConn = null;
Statement statement1 = null;
String createStatement;
String insertStatement;
try
{
// ============== Make connection to database ==================
//load the driver class
Class. forName("sun. jdbc. odbc. JdbcOdbcDriver");
//Specify the ODBC data source
String sourceURL = "jdbc:odbc:TicketRequest";
//get a connection to the database
dbConn = DriverManager. getConnection(sourceURL);
//If we get to here, no exception was thrown
System. out. println("The database connection is " + dbConn);
System. out. println("Making connection...\n");
//Create the statement
statement1 = dbConn. createStatement();
custID = 17;
//Populate the bean
String getBeanString =
"SELECT * FROM TicketRequest " +
"WHERE CustID = " + custID;
ResultSet results = statement1.executeQuery(getBeanString);
while (results. next())
{
custID = results. getInt("custID");
lastName = results. getString("lastName");
firstName = results. getString("firstName");
cruiseID = results. getInt("cruiseID");
destination = results. getString("destination");
port = results. getString("port");
sailing = results. getString("sailing");
numberOfTickets = results. getInt("numberOfTickets");
System. out. println(this);
}
return "Successful Retrieval";
} catch (Exception e)
{
System. out. println("Exception was thrown: " + e. getMessage());
return "UnSuccessful Retrieval";
} finally
{
try
{
if (statement1 != null)
statement1.close();
if (dbConn!= null)
dbConn. close();
} catch (SQLException sqle)
{
System. out. println("SQLException during close(): " +
sqle. getMessage());
}
}
}
public static void main(String[] args)
{
TestTicketRequest2 ttr = new TestTicketRequest2();
System. out. println("The contents of the database:");
System. out. println(ttr. retrieveFromDB());
}
}
Этот пример открывает базу данных с использованием драйвера JDBC-ODBC. Здесь мы получаем одну запись по custID:
custID = 17;
//Populate the bean
String getString =
"SELECT * FROM TicketRequest " +
"WHERE CustID = " + custID;
Заметим, что мы все еще используем оператор while, хотя получаем всего одну запись. Причина этого в том, что оператор while определяет факт, что вернулись в результате запроса несколько записей или ни одной. Если нет ни одной записи, то ошибка не выбрасывается. Если возвратилось несколько записей, то без цикла обрабатывается только одна – последняя. Использование while упрощает обработку запросов. Результат запуска программы показан ниже.
The contents of the database:
The database connection is sun. jdbc. odbc. *****@***
Making connection...
-----------------------------------------
custID = 17
lastName = Glance
firstName = Harvey
-----------------------------------------
cruiseID = 3001
destination = Caribbean
port = Miami
sailing = 1/1/2004
numberOfTickets = 3
-----------------------------------------
Successful Retrieval
Заметим, что получена всего одна запись из базы..
Создание таблиц с JDBC
Теперь попробуем выполнить более сложную задачу. Создадим с помощью JDBC таблицу и укажем, какие колонки она будет содержать. Обычно разработчики баз данных предоставляют графический интерфейс, пользуясь которым пользователи могут создавать таблицы, но, если пользователи не очень квалифицированные, то возможны ошибки. Мы попробуем создать приложение, в котором будет создаваться вполне определенная таблица, ввод данных от пользователя о колонках не требуется, и тогда ошибки при создании таблиц минимальны.
Подобные программы можно запускать для создания целого набора таблиц для конкретных приложений. Листинг 19.4 показывает, как использовать JDBC для создания таблицы TicketRequest в базе данных TicketRequest.
Листинг 19.4 Файл TestTableCreation. java
/*
* TestTableCreation. java
*/
import java. sql.*;
public class TestTableCreation
{
/** Конструктор TestTableCreation */
public TestTableCreation()
{
}
public static void main(String[] args)
{
String createStatement;
try
{
//Загрузка класса драйвера
Class. forName("sun. jdbc. odbc. JdbcOdbcDriver");
//Указать источник ODBC
String sourceURL = "jdbc:odbc:TicketRequest";
//Установить соединение с базой данных
Connection dbConn =
DriverManager. getConnection(sourceURL);
//Все в порядке
System. out. println("The database connection is " + dbConn);
//Создать предложение
Statement statement1 = dbConn. createStatement();
////////////////////////////////////////////////////////////
// Создаем таблицу ////////////////////////////////////////////////////////////
try
{
statement1.execute("drop table TicketRequest");
} catch (SQLException e)
{
System. out. println("table doesn't need to be dropped.");
}
//Добавление таблицы
createStatement =
"CREATE TABLE TicketRequest(CustID int PRIMARY KEY, "
+ "LastName VARCHAR(30), FirstName VARCHAR(30), "
+ "CruiseID int, destination VARCHAR(30), port VARCHAR(30), "
+ "sailing VARCHAR(30), numberOfTickets VARCHAR(30))";
System. out. println(createStatement);
statement1.executeUpdate(createStatement);
System. out. println("Table TicketRequest created.");
//Закрыть соединение
dbConn. close();
}catch(ClassNotFoundException cnfe)
{
System. err. println(cnfe);
}
catch (SQLException sqle)
{
System. err. println(sqle);
}
catch (Exception e)
{
System. err. println(e);
}
}//main
}//class
В этом примере весь код для JDBC помещен в метод main(). Вначале мы удаляем таблицу, если она есть в базе данных. Код для удаления таблицы мы помещаем в блок try/catch, потому что мы не знаем заранее, есть ли такая таблица в базе. Мы отметим в выводе, что таблица не удаляется, если она не существует.
try
{
statement1.execute("drop table TicketRequest");
} catch (SQLException e)
{
System. out. println("table doesn't need to be dropped.");
}
А теперь мы создаем строку с SQL запросом:
createStatement =
"CREATE TABLE TicketRequest(CustID int PRIMARY KEY, "
+ "LastName VARCHAR(30), FirstName VARCHAR(30), "
+ "CruiseID int, destination VARCHAR(30), port VARCHAR(30), "
+ "sailing VARCHAR(30), numberOfTickets VARCHAR(30))";
Выполняем созданный запрос:
statement1.executeUpdate(createStatement);
System. out. println("Table TicketRequest created.");
В заключение мы закрываем соединение с базой данных.
dbConn. close();
Мы используем MS Access для проверки того, что таблица создана. На рис. 19.7 показан результат.
Рис. 19.7. Создание таблиц с помощью JDBC.

Отметим, что типы данных отличаются от тех, что заданы в запросе. Мы просили тип int, а Access создал поле типа long integer. Мы просили VARCHAR(30), а получили поле типа "text". На самом деле, драйвер JDBC отвечает за перевод SQL запроса в форму, которую получает и выполняет система управления базой данных.
Заполнение базы данных
Теперь мы можем добавлять данные в таблицу. Мы также открываем соединение с базой данных, создаем запросы и выполняем их. Листинг 19.5 показывает, как это делается.
Листинг 19.5 Файл TestTablePopulate. java
/*
* TestTablePopulate. java
*/
import java. sql.*;
public class TestTablePopulate
{
/** Конструктор TestTablePopulate */
public TestTablePopulate()
{
}
public static void main(String[] args)
{
String createStatement;
try
{
//Загрузка класса драйвера
Class. forName("sun. jdbc. odbc. JdbcOdbcDriver");
//Указать источник ODBC
String sourceURL = "jdbc:odbc:TicketRequest";
//Получить соединение с базой данных
Connection dbConn =
DriverManager. getConnection(sourceURL);
//Все в порядке
System. out. println("The database connection is " + dbConn);
//Создать предложение
Statement statement1 = dbConn. createStatement();
String insertStatement;
//Добавить информацию в базу
insertStatement = "INSERT INTO TicketRequest VALUES(" +
" 13, 'Beasley', 'Demarcus', 3001, "
+ "'Caribbean', 'Miami', '1/1/2004', '3')";
statement1.executeUpdate(insertStatement);
// Добавить информацию в базу
insertStatement = "INSERT INTO TicketRequest VALUES(" +
" 17, 'Glance', 'Harvey', 3001, "
+ "'Caribbean', 'Miami', '1/1/2004', '3')";
statement1.executeUpdate(insertStatement);
// Добавить информацию в базу
insertStatement = "INSERT INTO TicketRequest VALUES(" +
" 29, 'White', 'Byron', 20010, "
+ "'South America', 'San Juan', '10/3/02', '3')";
statement1.executeUpdate(insertStatement);
// Добавить информацию в базу
insertStatement = "INSERT INTO TicketRequest VALUES(" +
" 1001, 'Carter', 'Joesph', 2001, "
+ "'Alaska', 'Vancouver', '1/1/1993', '3')";
statement1.executeUpdate(insertStatement);
// Добавить информацию в базу
insertStatement = "INSERT INTO TicketRequest VALUES(" +
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |


