Arquivo da categoria: java

Manipulação de dados com JDBC, com banco MySQL

A forma mais simples de manipular os dados de um banco em Java é utilizar API JDBC. Para demonstrar alguns exemplos de utilização, usaremos o banco de dados MySQL, com a tabela abaixo:

CREATE TABLE BOOK
(
ID bigint PRIMARY KEY NOT NULL,
DESCRIPTION text,
ILUSTRATIONS bit DEFAULT 0,
ISBN varchar(255),
NBOFPAGE int,
PRICE real,
TITLE varchar(255) NOT NULL
);
CREATE UNIQUE INDEX PRIMARY ON BOOK(ID);

Para executar um comando no banco é preciso adicionar o driver do banco no classpath e então uma criar uma conexão:

Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://host/database";
String user = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url,user, password);

Feito isto, é necessário criar um Statement com o comando SQL a ser executado:

Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select title from book");

E depois percorrer o ResultSet com os dados:

while(resultSet.next()){
    System.out.println(resultSet.getString("title"));
}

Além do Statement é possível criar um PreparedStatement para informar parâmetros para a consulta:

PreparedStatement preparedStatement = connection.prepareStatement("select title from book where id=?");
preparedStatement.setInt(1, 25346);
ResultSet anotherResultSet = preparedStatement.executeQuery();
while(anotherResultSet.next()){
    System.out.println(anotherResultSet.getString("title"));
}

Para executar um comando para inserir ou fazer atualização de um registro, basta utilizar o PreparedStatement e ao final chamar o método executeUpdate, que retornará o número de linhas afetadas pelo comando:

String sql = "insert into book (ID, TITLE, PRICE, DESCRIPTION, ISBN, ILUSTRATIONS, NBOFPAGE) values (?,?,?,?,?,?,?)";

PreparedStatement anotherPreparedStatement = connection.prepareStatement(sql);
anotherPreparedStatement.setLong(1, 13523L);
anotherPreparedStatement.setString(2, "The hitchhicker's guide to the galaxy");
anotherPreparedStatement.setFloat(3, 12.5F);
anotherPreparedStatement.setString(4, "Science Fiction");
anotherPreparedStatement.setString(5, "2329-1341-32918");
anotherPreparedStatement.setBoolean(6, false);
anotherPreparedStatement.setInt(7, 354);

int result = anotherPreparedStatement.executeUpdate();
System.out.println(result);

As exeções lançadas pelos códigos acima foram omitidas, para melhor entendimento.
A seguir a classe por completo:

public class JDBCSample {

	public static void main(String[] args) {
		try {			
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://host/database";
			String user = "root";
			String password = "root";
			
			Connection connection = DriverManager.getConnection(url,user, password);
			
			Statement statement = connection.createStatement();
			ResultSet resultSet = statement.executeQuery("select title from book");
			
			while(resultSet.next()){
				System.out.println(resultSet.getString("title"));
			}
			
			PreparedStatement preparedStatement = connection.prepareStatement("select title from book where id=?");
			preparedStatement.setInt(1, 25346);
			ResultSet anotherResultSet = preparedStatement.executeQuery();
			
			while(anotherResultSet.next()){
				System.out.println(anotherResultSet.getString("title"));
			}
			
			String sql = "insert into book (ID, TITLE, PRICE, DESCRIPTION, ISBN, ILUSTRATIONS, NBOFPAGE) values (?,?,?,?,?,?,?)";
			PreparedStatement anotherPreparedStatement = connection.prepareStatement(sql);
			anotherPreparedStatement.setLong(1, 13523L);
			anotherPreparedStatement.setString(2, "The hitchhicker's guide to the galaxy");
			anotherPreparedStatement.setFloat(3, 12.5F);
			anotherPreparedStatement.setString(4, "Science Fiction");
			anotherPreparedStatement.setString(5, "2329-1341-32918");
			anotherPreparedStatement.setBoolean(6, false);
			anotherPreparedStatement.setInt(7, 354);
			int result = anotherPreparedStatement.executeUpdate();
			System.out.println(result);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
Anúncios

Como criar um repositório de imagens usando Java e o Amazon S3

Olá! Até tempos atrás, quando Cloud Computing não tinha as proporções que vemos hoje, era comum salvar imagens e outros arquivos estáticos em um diretório no servidor ou em banco de  dados em campos do tipo BLOB.

Hoje é possível salvar imagens e arquivos estáticos em serviços na nuvem, como o Amazon S3.

Para fazer isto em Java, você precisar ter uma conta na Amazon AWS, criar um Bucket no S3 e colocar o AWS SDK Java no seu classpath.

Para salvar no S3, você precisa criar um objeto do tipo AWSCredentials, para fazer a autenticação no serviço e então instanciar um objeto do tipo AmazonS3

String accessKey = "accessKey";
String secretKey = "secretKey;
AWSCredentials awsCredential = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3 s3 = new AmazonS3Client(awsCredential);

Agora que temos o objeto AmazonS3, vamos buscar o conteúdo do arquivo, o InputStream, e também criar um objeto do tipo ObjectMetaData, que representa um objeto armazenado no S3. Para criar o objeeto do tipo ObjectMetaData é preciso informar o tamanho do arquivo em bytes:

InputStream inputStream = new FileInputStream("img/image.jpg");
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(inputStream.available());

Tendo o objeto ObjectMetadata criado, agora é necessário chamar o método que de fato publica o arquivo no S3. Para isso, é preciso informar o nome do bucket, o nome do arquivo no S3, o inputStream do arquivo, e o objeto ObjectMetadata:

String bucketName = "bucketName";
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, "image.jpg", inputStream, objectMetadata);
s3.putObject(putObjectRequest);

Agora que o arquivo foi publicado no S3, você pode acessá-lo pela URL abaixo:

<pre>https://s3-sa-east-1.amazonaws.com/bucketName/image.jpg</pre&gt;

Abaixo o snippet completo:

public class S3Snippet {

	public static void main(String[] args) {
		String accessKey = &quot;accessKey&quot;;
		String secretKey = &quot;secretKey&quot;;
		AWSCredentials awsCredential = new BasicAWSCredentials(accessKey, secretKey);
		AmazonS3 s3 = new AmazonS3Client(awsCredential);

		try {
			InputStream inputStream = new FileInputStream(&quot;img/image.jpg&quot;);
			ObjectMetadata objectMetadata = new ObjectMetadata();
			objectMetadata.setContentLength(inputStream.available());

			String bucketName = &quot;bucketName&quot;;
			PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, &quot;image.jpg&quot;, inputStream, objectMetadata);
			s3.putObject(putObjectRequest);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}