W tym artykule dowiesz się, jak używać java.sql.Statement
do wykonywania poleceń wstawiania, aktualizowania, usuwania i wybierania poleceń SQL DML z przykładami.
1. Użyj java.sql.Statement.execute(String sql), aby uruchomić polecenie wstawiania, aktualizowania i usuwania.
/* 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. Wstaw i zwróć klucze wygenerowane automatycznie.
W przypadku polecenia wstawiania użyj java.sql.Statement.execute(String sql, int autoGeneratedKeys)
aby wstawić i zwrócić wartość klucza automatycznego zwiększania, jest to wartość identyfikatora w tym przykładzie.
/* 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. Wykonaj polecenie wybierz SQL.
/* 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. NauczycielDTO.java.
Ta klasa służy do zapisywania jednego rekordu danych w tabeli nauczyciela.
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. Uzupełnij przykładowy kod.
- Ten przykład użyje testu bazy danych MySQL i stół nauczyciel , nauczyciel tabela ma trzy kolumny, są to id , imię, i e-mail . Aby dowiedzieć się więcej, możesz odwołać się do instrukcji JDBC Create Table Example Use.
- Możesz utworzyć stół nauczyciel w phpMyAdmin. Musisz dodać nazwę kolumny to id , typ to int, i sprawdza A_I pole wyboru, aby automatycznie zwiększać.
5.1 Przykładowe kroki kodu:
- Wstaw jeden rekord (cześć, [email protected]).
- Wstaw kolejny rekord (hello1, [email protected]) i zwróć automatycznie wygenerowany identyfikator rekordu.
- Zaktualizuj nazwę do jerry używa drugiego identyfikatora rekordu.
- Przeszukaj wszystkie rekordy w nauczycielu stół.
- Usuń rekord, który e-mail to przykł[email protected]
- Wymień wszystkie rekordy w nauczycielu ponownie stół.
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; } }
Wyjście
<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