Este artigo mostrará como usar
java.sql.Statement
para executar comandos de inserção, atualização, exclusão e seleção de SQL DML com exemplos. 1. Use java.sql.Statement.execute(String sql) para executar o comando insert, update e delete.
/* This method can be used to execute insert, update, delete dml command. */ public void executeSql(String ip, int port, String dbName, String userName, String password, String sql) { /* Declare the connection and statement object. */ Connection conn = null; Statement stmt = null; try { /* Get connection object. */ conn = this.getMySqlConnection(ip, port, dbName, userName, password); /* Get statement object. */ stmt = conn.createStatement(); /* The method can execute insert, update and delete dml command. */ stmt.execute(sql); System.out.println("Execute sql successfuly, " + sql); }catch(Exception ex) { ex.printStackTrace(); }finally { this.closeDBResource(stmt, conn); } } /* Close statement and connection after use, this can avoid resource waste. */ public void closeDBResource(Statement stmt, Connection conn) { try { if(stmt!=null) { stmt.close(); stmt = null; } if(conn!=null) { conn.close(); conn = null; } }catch(Exception ex) { ex.printStackTrace(); } }
2. Insira e retorne chaves geradas automaticamente.
Para o comando insert, use
java.sql.Statement.execute(String sql, int autoGeneratedKeys)
para inserir e retornar o valor da chave de incremento automático, é o valor de id neste exemplo. /* Execute insert command and return the auto generated record id. */ public int executeInsertSql(String ip, int port, String dbName, String userName, String password, String sql) { int ret = -1; /* Declare the connection and statement object. */ Connection conn = null; Statement stmt = null; try { /* Get connection object. */ conn = this.getMySqlConnection(ip, port, dbName, userName, password); /* Get statement object. */ stmt = conn.createStatement(); /* The method can execute insert dml command and return auto generated key values. */ stmt.execute(sql, Statement.RETURN_GENERATED_KEYS); ResultSet rs = stmt.getGeneratedKeys(); if(rs.next()) { /* Please note the index start from 1 not 0. */ ret = rs.getInt(1); } System.out.println("Execute sql successfuly, " + sql); }catch(Exception ex) { ex.printStackTrace(); }finally { this.closeDBResource(stmt, conn); return ret; } }
3. Execute o comando SQL select.
/* This method can be used to execute select dml command. */ public List executeSelectSql(String ip, int port, String dbName, String userName, String password, String selectSql) { List ret = new ArrayList(); /* Declare the connection and statement object. */ Connection conn = null; Statement stmt = null; try { /* Get connection object. */ conn = this.getMySqlConnection(ip, port, dbName, userName, password); /* Get statement object. */ stmt = conn.createStatement(); /* The method can execute select dml command. */ ResultSet rs = stmt.executeQuery(selectSql); if(rs!=null) { while(rs.next()) { int teacherId = rs.getInt("id"); String teacherName = rs.getString("name"); String teahcerEmail = rs.getString("email"); TeacherDTO teacherDto = new TeacherDTO(); teacherDto.setId(teacherId); teacherDto.setName(teacherName); teacherDto.setEmail(teahcerEmail); ret.add(teacherDto); System.out.println("id = " + teacherDto.getId()); System.out.println("name = " + teacherDto.getName()); System.out.println("email = " + teacherDto.getEmail()); System.out.println("**************************************"); } } System.out.println("Execute sql successfuly, " + selectSql); }catch(Exception ex) { ex.printStackTrace(); }finally { this.closeDBResource(stmt, conn); return ret; } }
4. TeacherDTO.java.
Esta classe é usada para salvar um registro de dados na tabela do professor.
package com.dev2qa.java.jdbc; /* This class represent one record in database teacher table. */ public class TeacherDTO { private int id; private String name; private String email; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
5. Código de exemplo completo.
- Este exemplo usará um banco de dados MySQL teste e mesa professor , o professor tabela tem três colunas, elas são id , nome, e e-mail . Você pode consultar a Declaração de uso de exemplo de criação de tabela JDBC para saber mais.
- Você pode criar a mesa professor no phpMyAdmin. Você precisa adicionar um nome de coluna id , o tipo é int, e verifica o A_I caixa de seleção para aumentar automaticamente.
5.1 Exemplo de etapas de código:
- Insira um registro (olá, [email protected]).
- Insira outro registro (hello1, [email protected]) e retorne o ID do registro gerado automaticamente.
- Atualizar nome para jerry usa o segundo ID de registro.
- Consulte todos os registros no professor tabela.
- Excluir registro do e-mail [email protected]
- Listar todos os registros no professor tabela novamente.
public static void main(String[] args) { /* Below are db connection required data. */ String ip = "localhost"; int port = 3306; String dbName = "test"; String userName = "root"; String password = ""; /* Create an instance. */ JDBCStatementExample jdbcStatementExample = new JDBCStatementExample(); /* Insert one record. */ String insertSql = "insert into teacher(name, email) values('hello','[email protected]')"; /* Execute the insert command. */ jdbcStatementExample.executeSql(ip, port, dbName, userName, password, insertSql); /* Insert another record. */ insertSql = "insert into teacher(name, email) values('hello1','[email protected]')"; /* Execute the insert command. */ int autoGenId = jdbcStatementExample.executeInsertSql(ip, port, dbName, userName, password, insertSql); /* update record. */ String updateSql = "update teacher set name = 'jerry' where id = " + autoGenId; /* Execute the update command. */ jdbcStatementExample.executeSql(ip, port, dbName, userName, password, updateSql); /* select records. */ String selectSql = "select * from teacher"; jdbcStatementExample.executeSelectSql(ip, port, dbName, userName, password, selectSql); String deleteSql = "delete from teacher where email = '[email protected]'"; jdbcStatementExample.executeSql(ip, port, dbName, userName, password, deleteSql); /* select records after delete. */ selectSql = "select * from teacher"; jdbcStatementExample.executeSelectSql(ip, port, dbName, userName, password, selectSql); } /* This method return java.sql.Connection object from MySQL server. */ public Connection getMySqlConnection(String ip, int port, String dbName, String userName, String password) { /* Declare and initialize a sql Connection variable. */ Connection ret = null; try { /* Register for mysql jdbc driver class. */ Class.forName("com.mysql.jdbc.Driver"); /* Create mysql connection url. */ String mysqlConnUrl = "jdbc:mysql://" + ip + ":" + port + "/" + dbName; /* Get the mysql Connection object. */ ret = DriverManager.getConnection(mysqlConnUrl, userName , password); }catch(Exception ex) { ex.printStackTrace(); }finally { return ret; } }
Saída
<terminated> JDBCStatementExamp|e [Java Application] C:\Java\jrel.B.O_131\bin\javaw.exe [Aug 28, 2017, 7:59:53 PM] Execute sql successfuly, insert into teacher(name, email) values('hello','[email protected]') Execute sql successfuly, insert into teacher(name, email) values('hello1','[email protected]') Execute sql successfuly, update teacher set name = 'jerry' where id = 22 id = 21 name = hello email = [email protected] ************************************** id = 22 name = jerry email = [email protected] ************************************** Execute sql successfuly, select * from teacher Execute sql successfuly, delete from teacher where email = '[email protected]' id = 21 name = hello email = [email protected] ************************************** Execute sql successfuly, select * from teacher