pdf / 2-JDBC
.pdfEscape Syntax
●Calling stored procedures
{call <procedure_name> [(<argument-list>)]}
{? = call <procedure_name> [(<argument-list>)]}
●Escape characters for LIKE clauses
{escape '<escape-character>'}
stmt.executeQuery("SELECT name FROM Identifiers WHERE Id LIKE '\\_%' {escape '\\'}");
Auto Generated Keys
String keyColumn[] = {"ORDER_ID"};
...
Statement stmt = conn.createStatement();
int rows = stmt.executeUpdate(
"INSERT INTO ORDERS (ISBN, CUSTOMERID) VALUES (1502, 1)", keyColumn);
ResultSet rs = stmt.getGeneratedKeys();
boolean b = rs.next(); if (b == true) {
// retrieve the new key value
...
}
ResultSet
Виды курсоров
•TYPE_FORWARD_ONLY (default) Возможно движение только вперёд
•TYPE_SCROLL_INSENSITIVE
Движение в обоих направлениях и в абсолютное положение
•TYPE_SCROLL_SENSITIVE
Движение в обоих направлениях и в абсолютное положение. Можно видеть изменение данных.
ResultSet Concurrency
•CONCUR_READ_ONLY (default)
•CONCUR_UPDATABLE
ResultSet Holdability
•HOLD_CURSORS_OVER_COMMIT
•CLOSE_CURSORS_AT_COMMIT
Modifying ResultSet
●Updating a Row
Вдва этапа
rs.updateString
rs.updateRow Связанные методы:
rs.rowUpdated
DatabaseMetaData.ownUpdatesAreVisible(int type)
DatabaseMetaData.updatesAreDetected(int type)
●Deleting a Row
rs.deleteRow() Связанные методы:
rs.rowDeleted
DatabaseMetaData.othersDeletesAreVisible(int type)
DatabaseMetaData.ownDeletesAreVisible(int type)
●Inserting a Row
rs.moveToInsertRow()
rs.insertRow()
Связанные методы:
DatabaseMetaData.ownInsertsAreVisible(int type)
DatabaseMetaData.insertsAreDetected(int type)
Batch Updates
// turn off autocommit con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.addBatch("INSERT INTO employees VALUES (1000, 'Joe Jones')"); stmt.addBatch("INSERT INTO departments VALUES (260, 'Shoe')"); stmt.addBatch("INSERT INTO emp_dept VALUES (1000, 260)");
// submit a batch of update commands for execution int[] updateCounts = stmt.executeBatch();
SQL Types
●SQL92 built-in types—the familiar SQL ‘column types’
CHAR
FLOAT
DATE
and so on
●New built-in types — new types added by SQL99
BOOLEAN — a truth value
BLOB — a Binary Large OBject
CLOB — a Character Large OBject
●User Defined Types
Structured type (CREATE TYPE PLANE_POINT AS (X FLOAT, Y FLOAT) NOT FINAL)
DISTINCT type (CREATE TYPE MONEY AS NUMERIC(10,2) FINAL)
●Constructed types
REF(structured-type)
base-type ARRAY[n]
●Locators
●Datalink (Type for managing data external to the data source)
Custom mapping
java.util.Map map = conn.getTypeMap(); map.put("mySchemaName.AUTHORS", Class.forName("Authors")); conn.setTypeMap(map);
//-------------------------------------------------------
class Authors implements SQLData{ public String name;
public Date birth; private String sql_type;
public String getSQLTypeName() { return sql_type;
}
public void readSQL (SQLInput data, String type) throws SQLException{
sql_type = type;
name = data.readString();
birth = data.readDate();
}
public void writeSQL (SQLOutput data) throws SQLException { data.writeString(name); data.writeDate(birth);
}
}
CREATE TYPE AUTHOR AS (NAME VARCHAR(20), BIRTH DATE) NOT FINAL;
INSERT INTO AUTHORs (id, info) VALUES
(
1, NEW AUTHOR (‘Name', someDate), );
Mapping of SQL99 Types
●DISTINCT — the type to which the base type is mapped
●BLOB - the Blob interface Blob blob = rs.getBlob(1);
●CLOB - the Clob interface
●ARRAY - the Array interface Array a = rs.getArray(1);
●Structured types - the Struct interface Struct struct = (Struct)rs.getObject(1);
●REF(structured type) - the Ref interface Ref ref = rs.getRef(1);
Address addr = (Address)ref.getObject();
●DATALINK — a java.net.URL object. java.net.URL url = rs.getURL(1);
Database Metadata
●Общая информация о DataSource
●Информация об поддержке различных возможностей
●Предельные значения
●Информация об объектах и их атрибутах в базе данных
●Поддержка транзакций