Oi, eu queria saber se é possível executar algo assim usando JDBC, pois atualmente fornece uma exceção, embora seja possível no navegador de consulta MySQL.
"SELECT FROM * TABLE;INSERT INTO TABLE;"
Embora eu saiba que é possível ter a string de consulta SQL sendo dividida e a instrução executada duas vezes, mas eu queria saber se existe uma abordagem única para isso.
String url = "jdbc:mysql://localhost:3306/";
String dbName = "databaseinjection";
String driver = "com.mysql.jdbc.Driver";
String sqlUsername = "root";
String sqlPassword = "abc";
Class.forName(driver).newInstance();
connection = DriverManager.getConnection(url+dbName, sqlUsername, sqlPassword);
allowMultiQueries=true
.Respostas:
Eu queria saber se é possível executar algo assim usando JDBC.
Sim, é possível. Existem duas maneiras, pelo que eu sei. Eles são
Os exemplos a seguir demonstram as duas possibilidades acima.
Exemplo 1 : (para permitir consultas múltiplas):
Ao enviar uma solicitação de conexão, você precisa anexar uma propriedade de conexão
allowMultiQueries=true
ao url do banco de dados. Este é propriedade de conexão adicional para aqueles que já existe alguns, comoautoReConnect=true
, etc .. Os valores aceitáveis paraallowMultiQueries
propriedade sãotrue
,false
,yes
, eno
. Qualquer outro valor é rejeitado em tempo de execução com umSQLException
.A menos que tal instrução seja passada, um
SQLException
é lançado.Você tem que usar
execute( String sql )
ou suas outras variantes para buscar os resultados da execução da consulta.Para iterar e processar os resultados, você precisa das seguintes etapas:
Exemplo 2 : etapas a seguir:
select
, eDML
consultas.CallableStatement
.ResultSet
s executados no procedimento.Os resultados de DML não podem ser capturados, mas podem emitir outro
select
para descobrir como as linhas são afetadas na tabela.
Tabela de amostra e procedimento :
Procedimento de chamada de Java :
fonte
Você pode usar a atualização em lote, mas as consultas devem ser de ação (ou seja, inserir, atualizar e excluir) consultas
fonte
Dica: se você tiver mais de uma propriedade de conexão, separe-as com:
Para lhe dar algo como:
Espero que isso ajude alguém.
Saudações,
Glyn
fonte
Com base em meus testes, o sinalizador correto é "allowMultiQueries = true"
fonte
Por que você não tenta escrever um
Stored Procedure
para isso?Você pode obter o
Result Set
para fora e no mesmoStored Procedure
você podeInsert
o que quiser.A única coisa é que você pode não obter as linhas recém-inseridas no
Result Set
seInsert
depois deSelect
.fonte
Eu acho que esta é a maneira mais fácil de selecionar / atualizar / inserir / excluir multy. Você pode executar quantas atualizações / inserções / exclusões desejar após a seleção (você deve fazer uma seleção primeiro (um fictício se necessário)) com executeUpdate (str) (apenas use new int (contagem1, contagem2, ...)) e se vc precisar de uma nova seleção feche 'instrução' e 'conexão' e faça uma nova para a próxima seleção. Por exemplo:
Espero que ajude
fonte