A API Java Database Connectivity (JDBC) é uma série de interfaces que permitem aos programadores Java acessar bancos de dados. As interfaces de vários desenvolvedores não são exatamente as mesmas. Depois de usar o JDBC da Oracle por muitos anos, acumulei muitas habilidades que podem nos permitir utilizar melhor o desempenho do sistema e obter mais funções.
1. Use drivers finos no desenvolvimento de software cliente
Em termos de desenvolvimento de software Java, o banco de dados Oracle fornece quatro tipos de drivers, dois dos quais são usados para software cliente, como software aplicativo, miniaplicativos e servlets, e os outros dois são usados para. software cliente, como software de aplicativo, applets e servlets, como procedimentos armazenados Java em bancos de dados. No desenvolvimento de software do lado do cliente, podemos escolher o driver OCI ou o driver Thin. O driver OCI utiliza a Java Localization Interface (JNI) para se comunicar com o banco de dados por meio do software cliente Oracle. O driver Thin é um driver Java puro que se comunica diretamente com o banco de dados. Para desempenho máximo, a Oracle recomenda o uso de drivers OCI no desenvolvimento de software cliente, e isso parece estar correto. Mas eu recomendo usar o driver Thin, porque através de muitos testes foi descoberto que o desempenho do driver Thin excede o do driver OCI em circunstâncias normais.
2. Desligue a função de envio automático para melhorar o desempenho do sistema
Ao estabelecer uma conexão com o banco de dados pela primeira vez, por padrão, a conexão está no modo de envio automático. Para melhor desempenho, você pode desativar a função autocommit chamando o método setAutoCommit() da classe Connection com um parâmetro booleano false, como segue:
conn.setAutoCommit
(false);
, precisamos gerenciar manualmente a transação chamando os métodos commit() e rollback() da classe Connection.
3. Use objetos Statement em SQL dinâmico ou comandos com limite de tempo
Ao executar comandos SQL, temos duas opções: você pode usar objetos PreparedStatement ou objetos Statement. Não importa quantas vezes você use o mesmo comando SQL, PreparedStatement apenas o analisa e compila uma vez. Ao usar o objeto Statement, cada vez que um comando SQL é executado, ele é analisado e compilado. Isso pode fazer você pensar que usar objetos PreparedStatement é mais rápido do que usar objetos Statement. No entanto, os testes que fiz mostram que no software cliente esse não é o caso. Portanto, em operações SQL com tempo limitado, a menos que os comandos SQL sejam processados em lotes, devemos considerar o uso de objetos Statement.
Além disso, o uso de objetos Statement também facilita a gravação de comandos SQL dinâmicos porque podemos concatenar strings para construir um comando SQL válido. Portanto, acredito que o objeto Statement pode facilitar a criação e execução de comandos SQL dinâmicos.
4. Use a função auxiliar para formatar comandos SQL dinâmicos
Ao criar comandos SQL dinâmicos executados usando objetos Statement, precisamos lidar com alguns problemas de formatação. Por exemplo, se quisermos criar um comando SQL que insira o nome O'Reilly em uma tabela, devemos substituir o sinal "'" em O'Reilly por dois sinais "''" consecutivos. A melhor maneira de realizar essas tarefas é criar um método auxiliar que execute a operação de substituição e, em seguida, usar o método auxiliar criado quando a cadeia de conexão for expressa como um comando SQL usando uma fórmula. Da mesma forma, podemos fazer com que o método auxiliar aceite um valor de Data e, em seguida, gerar uma expressão de string baseada na função to_date() do Oracle.
5. Use objetos PreparedStatement para melhorar a eficiência geral do banco de dados.
Ao usar objetos PreparedStatement para executar comandos SQL, os comandos são analisados e compilados pelo banco de dados e, em seguida, colocados no buffer de comando. Então, sempre que o mesmo objeto PreparedStatement for executado, ele será analisado novamente, mas não compilado novamente. Comandos pré-compilados são encontrados no buffer e podem ser reutilizados. Em aplicativos de nível empresarial com um grande número de usuários, os mesmos comandos SQL são frequentemente executados repetidamente. A redução no número de compilações provocada pelo uso de objetos PreparedStatement pode melhorar o desempenho geral do banco de dados. A menos que criar, preparar e executar tarefas PreparedStatement no lado do cliente demore mais do que tarefas Statement, eu recomendaria usar objetos PreparedStatement em todos os casos, exceto para comandos SQL dinâmicos.
6. Use objetos PreparedStatement para processar operações repetidas de inserção ou atualização em lotes.
Se você processar operações de inserção e atualização em lotes, poderá reduzir significativamente o tempo necessário. O Statement e o CallableStatement fornecidos pela Oracle não oferecem suporte ao processamento em lote. Somente o objeto PreparedStatement realmente oferece suporte ao processamento em lote. Podemos escolher o processamento em lote JDBC padrão usando os métodos addBatch() e executeBatch(), ou escolher o método proprietário da Oracle mais rápido, utilizando o método setExecuteBatch() do objeto PreparedStatement e o método executeUpdate() padrão. Para usar o mecanismo de lote proprietário da Oracle, você pode chamar setExecuteBatch() da seguinte maneira:
PreparedStatement pstmt3D null;
try {
(
(OraclePreparedStatement)
pstmt
).setExecuteBatch
(30)
;
() é um limite superior. Quando esse valor for atingido, a execução do comando SQL será acionada automaticamente e o método executeUpdate() padrão será enviado ao banco de dados como um processo em lote. Podemos transferir tarefas em lote a qualquer momento chamando o método sendBatch() da classe PreparedStatement.
7. Use o método localizador Oracle para inserir e atualizar objetos grandes (LOB). A
classe PreparedStatement do Oracle não oferece suporte total ao processamento de objetos grandes, como BLOB e CLOB. Em particular, o driver Thin não oferece suporte à configuração usando setObject(). e setBinaryStream() do objeto PreparedStatement O valor de BLOB não suporta a configuração do valor de CLOB usando o método setCharacterStream(). Somente métodos no próprio localizador podem obter valores do tipo LOB do banco de dados. Você pode usar objetos PreparedStatement para inserir ou atualizar LOBs, mas é necessário usar um localizador para obter o valor do LOB. Devido a esses dois problemas, recomendo utilizar o método locator para inserir, atualizar ou obter valores LOB.
8. Use a sintaxe SQL92 para chamar procedimentos armazenados
. Ao chamar procedimentos armazenados, podemos usar SQL92 ou Oracle PL/SQL. Não há benefícios práticos em usar Oracle PL/SQL e isso trará problemas para os desenvolvedores que manterão seu aplicativo. o futuro traz problemas, portanto, recomendo usar SQL92 ao chamar procedimentos armazenados.
9. Use Object SQL para transferir o esquema do objeto para o banco de dados.
Como o banco de dados Oracle pode ser usado como um banco de dados orientado a objetos, você pode considerar a transferência do esquema orientado a objetos do aplicativo para o banco de dados. A abordagem atual é criar Java beans como objetos de banco de dados disfarçados, mapear suas propriedades em tabelas relacionais e então adicionar métodos a esses beans. Embora não haja problema em fazer isso em Java, porque as operações são realizadas fora do banco de dados, outros softwares aplicativos que acessam o banco de dados não podem tirar vantagem do modelo de objeto. Se você aproveitar a tecnologia orientada a objetos da Oracle, poderá simular seus dados e operações no banco de dados criando um novo tipo de objeto de banco de dados e, em seguida, usar ferramentas como JPublisher para gerar suas próprias classes de bean Java. Se você usar esse método, não apenas os aplicativos Java poderão usar o modelo de objeto do software aplicativo, mas outros softwares aplicativos que precisem compartilhar os dados e operações em seu aplicativo também poderão usar o modelo de objetos do software aplicativo.
10. Use SQL para concluir operações no banco de dados
A experiência mais importante que quero apresentar a você é fazer uso completo da abordagem orientada a conjuntos do SQL para resolver as necessidades de processamento de banco de dados, em vez de usar linguagens de programação procedimentais como Java.
Se o programador procurasse muitas linhas em uma tabela, cada linha do resultado procuraria dados em outras tabelas. Finalmente, o programador criou comandos UPDATE separados para atualizar os dados na primeira tabela em lotes. Uma tarefa semelhante a esta pode ser realizada em um comando UPDATE usando uma subconsulta de múltiplas colunas na cláusula set. Por que permitir que os dados fluam pela Internet quando você pode realizar a tarefa com um único comando SQL? Recomendo que os usuários aprendam cuidadosamente como maximizar o poder do SQL.
Autor: picva Fonte: Comunidade de Tecnologia CCID