Bom dia, estou com dificuldades em concluir meu projeto para a faculdade.
Bom tenho uma conexao com o Banco de Dados Oracle 10g XE, essa parte esta OK, alias executando o projeto no Shell funciona perfeitamente. Minha duvida é em como utilizar os mesmos arquivos para WEB. As classes que usei estão abaixo:
ClasseSelect
import java.applet.Applet;
import java.sql.*;
public class ClasseSelect extends Applet{
public void insere_Select (String query, String user, String pass) {
Connection connection = null;
try
{
//Conecta com o Banco usando a FabricaDeConexao
Connection conecta = new FabricaDeConexao().getConnection(user, pass);
PreparedStatement stmt = conecta.prepareStatement(query);
ResultSet resultSet = stmt.executeQuery();
ResultSetMetaData metaData = resultSet.getMetaData();
int numberOfColumn = metaData.getColumnCount();
System.out.println("********** Tabela **********");
System.out.println();
for (int i = 1; i <= numberOfColumn; i++)
System.out.printf("%-20s\t", metaData.getColumnName(i));
System.out.println();
while (resultSet.next()) {
for (int i = 1; i <= numberOfColumn; i++)
System.out.printf("%-20s\t",resultSet.getObject(i));
System.out.println();
}
//select @@ ideting
//select max (campo id) from tabela
stmt.close();
}
catch (SQLException sqlException)
{
sqlException.printStackTrace();
System.exit(1);
}
}
}
ComandosSQL
import java.applet.Applet;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class ComandosSql extends Applet{
public void insereQuery (String query, String user, String pass) throws SQLException {
Connection conecta = new FabricaDeConexao().getConnection(user, pass);
PreparedStatement stmt = conecta.prepareStatement(query);
stmt.executeQuery();
System.out.println("Comando Executado com Sucesso.");
stmt.close();
conecta.close();
}
}
FabricaDeConexao
import java.applet.Applet;
import java.sql.*;
import oracle.jdbc.pool.OracleDataSource;
//Classe Responsavel por criar Conexão com o Banco de Dados Oracle e Retorna-la.
public class FabricaDeConexao extends Applet{
public Connection getConnection(String usuario, String senha) throws SQLException{
OracleDataSource ods = new OracleDataSource();
String url = "jdbc:oracle:thin:@//127.0.0.1:1521/XE";
String user = usuario;
String passwd = senha;
ods.setURL(url);
ods.setUser(user);
ods.setPassword(passwd);
Connection conecao = ods.getConnection();
return conecao;
}
}
Main
import java.applet.Applet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import javax.swing.JOptionPane;
public class Main extends Applet{
@SuppressWarnings("null")
public static void main (String args[]) throws SQLException, IOException {
//Criando Strings
String query = "";
String user = "";
String pass = "";
ResultSet idAtual = null;
int id = 0;
String[] arrayUsuario;
Date data;
UsuarioSenha userPass = new UsuarioSenha();
PalavrasReservadas palavra_reservada = new PalavrasReservadas();
TestePalavras palavra = new TestePalavras();
ClasseSelect select = new ClasseSelect();
ComandosSql comandos = new ComandosSql();
userPass.digite();
//Utiliza Array para usuario e senha.
user = userPass.retornaUsuario()[0];
pass = userPass.retornaUsuario()[1];
Connection conecta = new FabricaDeConexao().getConnection(user, pass);
System.out.println("Digite \"0\" para encerrar");
do {
query = JOptionPane.showInputDialog(null, "Digite Comando SQL: ");
query = query.replaceAll("\\*", " * ");
query = query.replaceAll("\t", " ");
query = query.replaceAll(",", ", ");
query = query.replaceAll(" , ", ", ");
data = new Date();
String comando =("insert into comandos (id, comand, usuario, horario) values (contador.nextval,'"+query+"','"+user+"','"+data+"')");
PreparedStatement stmt = conecta.prepareStatement(comando);
stmt.executeQuery();
ResultSet rs = stmt.executeQuery("select max(id) from comandos");
if (rs.next()) {
id = rs.getInt(1);
}
System.out.println(id);
palavra.testePalavras(palavra_reservada.palavras, query,user,pass, id);
//toUpperCase, método usado para deixar toda a String MAIUSCULA.
String queryMaiuscula = query.toUpperCase();
System.out.println(query);
if (query.equals("0")) {
System.out.println("Obrigado Por Usar a Aplicação.");
}else if (queryMaiuscula.substring(0, 6).equals("SELECT")) {
select.Insere_Select(queryMaiuscula, user, pass);
}else if(!queryMaiuscula.substring(0, 6).equals("SELECT") && !queryMaiuscula.substring(0,4).equals("DROP") && !queryMaiuscula.substring(0, 4).equals("DESC")) {
comandos.insereQuery(query, user, pass);
}else if (queryMaiuscula.substring(0,4).equals("DROP")) {
System.out.println("Seu usuario não tem Permissão para DROP TABLE");
}else if (queryMaiuscula.substring(0, 4).equals("DESC")) {
System.out.println("Aplicação não tem DESC disponivel.");
}
}while(!query.equals("0"));
System.out.println("THE END");
}
}
PalavrasReservadas
/*
* Nome: Gilmar Soares
* Data: 20/03
* Projeto: Buscar palavras reservadas Java
*/
public class PalavrasReservadas {
//String que contém "todas" as palavras reservadas do ORACLE (SQL)
//String palavras = "ADD DEFERRED INTO ROLLBACK ALL DELETE IS ROWS ALLOCATE DESC ISOLATION RTRIM ALTER DESCRIBE JOIN SCHEMA AND DIAGNOSTICS KEY SCROLL ANY DISCONNECT LAST SECOND ARE DISTINCT LEFT SELECT AS DOUBLE LIKE SESSION_USER ASC DROP LONGINT SET ASSERTION ELSE LOWER SMALLINT AT END LTRIM SOME AUTHORIZATION ENDEXEC MATCH SPACE AVG ESCAPE MAX SQL BEGIN EXCEPT MIN SQLCODE BETWEEN EXCEPTION MINUTE SQLERROR BIT EXEC NACAOAL SQLSTATE BOOLEAN EXECUTE NATURAL SUBSTR BOTH EXISTS NCHAR SUBSTRING BY EXPLAIN NVARCHAR SUM CALL EXTERNAL NEXT SYSTEM_USER CASCADE FALSE NO TABLE CASCADED FETCH NOT TEMPORARY CASE FIRST TIMEZONE_HOUR CAST FLOAT NULLIF TIMEZONE_MINUTE CHAR FOR NUMERIC TO CHARACTER FOREIGN OF TRAILING CHECK FOUND ON TRANSACTION CLOSE FROM ONLY TRANSLATE COLLATE FULL OPEN TRANSLATION COLLATION FUNCTION OPTION TRUE COLUMN GET OR UNION COMMIT GET_CURRENT_CONNECTION ORDER UNIQUE CONNECT GLOBAL OUT UNKNOWN CONNECTION GO OUTER UPDATE CONSTRAINT GOTO OUTPUT UPPER CONSTRAINTS GRANT OVERLAPS USER CONTINUE GROUP PAD USING CONVERT HAVING PARTIAL VALUES CORRESPONDING HOUR PREPARE VARCHAR COUNT IDENTITY PRESERVE VARYING CREATE IMMEDIATE PRIMARY VIEW CURRENT IN PRIOR WHENEVER CURRENT_DATE INDICATOR PRIVILEGES WHERE CURRENT_TIME INITIALLY PROCEDURE WITH CURRENT_TIMESTAMP INNER PUBLIC WORK CURRENT_USER INOUT READ WRITE CURSOR INPUT REAL XML DEALLOCATE INSENSITIVE REFERENCES XMLEXISTS DEC INSERT RELATIVE XMLPARSE DECIMAL INT RESTRICT XMLSERIALIZE DECLARE INTEGER REVOKE YEAR DEFERRABLE INTERSECT RIGHT";
String palavras = "SELECT FROM WHERE ORDER BY INSERT INTO JOIN";
}
TestePalavras
import java.applet.Applet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Hashtable;
public class TestePalavras extends Applet{
public void testePalavras ( String entrada_palavra, String query, String user, String pass, int id) throws IOException, SQLException
{
//Criação de Strings
String s = "";
PreparedStatement stmt = null;
Hashtable hash = new Hashtable();
//Conecta com o banco de dados Oracle
Connection conecta = new FabricaDeConexao().getConnection(user, pass);
//Método toUpperCase para deixar a query Maiuscula.
query = query.toUpperCase();
//Array de String que recebem palavras separadas por espaço, Query e Palavras Reservadas do Oracle (SQL)
String separa_palavra[] = entrada_palavra.split ("\\ ") ;
String arrayQuery[] = query.split("\\ ");
String idComandos = ("");
for ( int i = 0; i < arrayQuery.length ; i++ ) {
for ( int j = 0; j < separa_palavra.length ; j++ ) {
if ( arrayQuery[i].equals(separa_palavra[j])) {
//System.out.println ( separa_palavra[j] );
//txt.append(separa_palavra[j] + "\n");
hash.put(j, arrayQuery[i]);
s = (String) hash.get(j);
stmt = conecta.prepareStatement("insert into lexico (ident,token,id) values (contadorLex.nextval,'"+s+"',"+id+")");
stmt.executeQuery();
}
}
}
}
}
UsuarioSenha
import java.applet.Applet;
import javax.swing.JOptionPane;
public class UsuarioSenha extends Applet{
//Atributos Privados de Usuario e Senha.
private String user = "";
private String pass = "";
//Método pede ao Usuario login e senha.
void digite () {
this.user = "Integrador"; //JOptionPane.showInputDialog(null, "Digite Usuario BD: ");
this.pass = "Integrador";//JOptionPane.showInputDialog(null, "Digite Senha BD: ");
}
//Método retorna Login e Senha.
String[] retornaUsuario() {
String[] array = new String [2];
array[0] = this.user;
array[1] = this.pass;
return array;
}
}
Como consigo utilizar esse projeto pronto em um projeto WEB aproveitando toda essa parte funcional?
Bom para que entendam, o usuario digita seu nome e senha do Banco de Dados, no caso Oracle.
Então ele precisa digitar a query que deseja ser executada, essa mesma passa por um processo de compilador (lexico, sintatito e semantico).
Então passando pelos processos a query é executada no Banco retornando assim sua função.
Mas gostaria de fazer essa funcionalidade via WEB.
Obrigado desde ja pela ajuda.