Escolar Documentos
Profissional Documentos
Cultura Documentos
http://www.lsi.dsc.ufcg.edu.br/
Introduo
Arquiteturas JDBC
JDBC bsico
JDBC avanado
Caractersticas:
fcil mapeamento objeto para relacional;
independncia de banco de dados;
independente de plataforma;
Exemplo:
Connection con =
DriverManager.getConnection(jdbc:meuDriver:meuDB,
meuLogin, minhaPassword);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(
Select matricula, nome from Empregado);
While (rs.next()) {
int mat = rs.getInt(matricula);
String nome = rs.getString(nome);
System.out.println( mat + , + nome );
}
rs.close();
Class.forName ("oracle.jdbc.driver.OracleDriver");
Ponte JDBC-ODBC:
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
Exemplo de URL:
"jdbc:oracle:thin:@localhost:1521:MyDB"
stmt.executeUpdate(
INSERT INTO Empregado values+
(1000, Biliu, Rua das Cruzetas, Sem
Futuro, Brasil, 30.000)
);
ResulSet rs = stmt.executeQuery(
Select * from empregado);
while(rs.next()) {
Mtodos getXXX()
while (rs.next()) {
int mat = rs.getInt(Matricula);
String nome = rs.getString(Nome);
String endereco = rs.getString(Endereco);
float salario = rs.getFloat(Salario);
}
Mtodos getXXX()
while rs.next()) {
int mat = rs.getInt(1);
String nome = rs.getString(2);
String endereco = rs.getString(3);
float salario = rs.getFloat(4);
}
String updateString =
Update Empregado set salario = salario *
1.1 where salario < 1000.00;
stmt.executeUpdate(updateString);
Mapeamento
entre tipos
SQL e tipos
Java:
SQL type
Java Type
CHAR
String
VARCHAR
String
LONGVARCHAR
String
NUMERIC
java.math.BigDecimal
DECIMAL
java.math.BigDecimal
BIT
boolean
TINYINT
byte
SMALLINT
short
INTEGER
int
BIGINT
long
REAL
float
FLOAT
double
BINARY
byte[]
DATE
java.sql.Date
TIME
java.sql.Time
TIMESTAMP
java.sql.Timestamp
Exemplo:
Equivalente a :
Outro exemplo:
PreparedStatement updateSalarios;
String updateString =
UPDATE Empregado set salario = ? where matricula = ?;
updateSalarios = con.prepareStatement(updateString);
int [] novosSalarios = {2000, 1500, 3000, 500};
int [] matriculas = {1000, 1050, 2000, 1078};
int tam = matriculas.length;
for( i = 0 ; i < tam; i++) {
updateSalarios.setfloat(1, novosSalarios[i]) ;
updateSalarios.setInt(2, matriculas[i]);
updateSalarios.executeUpdate();
}
Pacote javax.sql.*
A API JDBC possui caractersticas como:
scroll para frente e para trs num result set
realizao de updates em tabelas do BD usando mtodos
Java (ao invs de SQL)
Enviar comandos batch
Usar novos tipos de dados SQL3
Criar novos tipos definidos pelo usurio (SQL UDT)
Mapear um SQL UDT para uma classe em Java
Fazer uma conexo que pode ser usada num transao
distribuda
Etc.
resultSetConcurrency
ResultSet.CONCUR_READ_ONLY
ResultSet.CONCUR_UPDATABLE
Exemplo:
Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet srs = stmt.executeQuery(
select * from empregado);
first();
last();
beforeFirst();
afterLast();
absolute(i);
relative(i);
Exemplos:
srs.absolute(-4): move para a 4 tupla do final do
ResultSet, ou seja, se srs tiver 500 tuplas, ento
move para tupla 497
srs.absolute(4): // move cursor para a quarta linha
srs.relative(-3): // move o cursor para a primeira
linha
srs.relative(2): // move o cursor para a terceira
linha
srs.absolute(4);
int linhaCorrente = srs.getRow();
retorna 4
Outras funes:
isFirst();
isLast();
isBeforeFirst();
isAfterLast();
Exemplo:
if(!srs.isAfterLast()) {
DriverManager.getConnection(jdbc:meuSubProtocolo:me
usDados, user, password);
Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet. CONCUR_UPDATABLE);
ResultSet uprs = stmt.executeQuery(
Select nome, salario from Empregado);
uprs.last();
uprs.updateDouble(Salario, 1000.00);
uprs.updateRow(); // leva o update para o BD
uprs.absolute(4);
uprs.deleteRow();
try {
// Comandos
} catch (SQLException e) {
System.out.println(
SQLException:+e.getMessage());
}
Mensagem impressa:
SQLException: There is already an object called
Empregado in the database.
try {
// comandos
} cacth(SQLException e) {
System.out.println(SQLException capturada:);
while (e != null) {
System.out.println(Mensagem: + e.getMessage());
System.out.println(SQLState: + e.getSQLState());
System.out.println(ErrorCode: + e.getErrorCode());
e = e.getNextException();
}
}
Exemplo:
SQLException capturada:
Mensagem: ORA-00942: a tabela ou view no existe
SQLState: 42000
ErrorCode: 942
Exemplo:
Exemplo:
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.addBatch(insert into empregado values
Engenheiro, 1500.00));
stmt.addBatch(insert into empregado values
Engenheiro, 1800.00));
stmt.addBatch(insert into empregado values
Motorista, 500.00));
stmt.addBatch(insert into empregado values
Mecanico, 800.00));
int [] updateCounts = stmt.executeBatch();
con.commit();
con.setAutoCommit(true);
(100, Joao,
(200, Maria,
(300, Pedro,
(400, Jose,
Atributos de um RowSet
A interface RowSet fornece um conjunto de
propriedades que permite que uma instncia seja
configurada para conectar ao DataSource e obter
um conjunto de linhas
Exemplo:
rset.setDataSourceName("jdbc/SomeDataSourceName");
rset.setUsername(fernanda);
rset.setPassword(secret);
rset.setQueryTimeout(20);
rset.setMaxRows(1024);
rset.setTransactionIsolation(
Connection.TRANSACTION_READ_COMMITTED);
rset.setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
rset.setCommand("SELECT NAME, SALARY FROM EMPLOYEES");
Usando parmetros:
rset.setCommand(SELECT NAME, SALARY FROM EMPLOYEES
WHERE DEPT = ? OR DEPT= ?);
rset.setString(1, SALES);
rset.setString(2, MARKETING)
...
rset.beforeFirst();
while(rset.next()){
System.out.println(rset.getString(1) + +
rset.getFloat(2);
}
...
Evento
Trs tipos de eventos podem ocorrer:
O cursor pode mover;
Suas linhas podem mudar (insert, delete ou update);
O contedo inteiro do RowSet pode mudar
RowSetListener
Aplicao
add
cursorMoved(RowSetEvent)
RowSet
addRowSetListener
rowChanged(RowSetEvent)
removeRowSetListener
rowSetChanged(RowSetEvent)
evento
Metadados
A interface RowSetMetaData contem informaes
sobre as colunas de um objeto RowSet;
Essa interface uma extenso de
ResultSetMetaData;
Exemplo:
RowSetMetaData rsetmd = rset.getMetaData();
int columnCount = rsetmd.getColumnCount();
String colName = rsetmd.getColumnName(intcolumn);
JdbcRowSet
CachedRowSet
WebRowSet
FilteredRowSet
JoinRowSet
Exemplo:
ResultSet rs = stmt.executeQuery(
SELECT * FROM EMP);
CachedRowSet crset = new CachedRowSet();
crset.populate(rs);
...
crset.last();
String name = crset.getString(1);
Atualizando dados:
Exemplo:
Escrevendo um XML
Exemplo:
Lendo um XML
WebRowSetImpl wrs = new WebRowSetImpl();
FileReader fReader = new FileReader(output.xml);
wrs.readXML(fReader);
wrs.absolute(2);
String str = wrs.getString(1);
um extenso de CachedRowSet;
Permite ao usurio filtrar um subconjunto
de dados de um RowSet;
Por exemplo: supondo que o FilteredRowSet
contm todos os empregados de uma
empresa e queremos informaes dos
empregados que estejam entre Ana e Lee.
Exemplo:
Exemplo:
http://www.oracle.com/technology/documentation
/index.html