package bce.server.daosupport.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import bce.jni.utils.BCEUtils; import bce.server.dao.AESKeyDAO; /** * 处理AES密钥的DAO的JDBC实现 * * @author robins * */ public class AESKeyJDBCDAO implements AESKeyDAO { /** * DB Provider */ private DB db; public void setDb(DB db) { this.db = db; } public AESKeyJDBCDAO() { } /* * (non-Javadoc) * @see bce.server.dao.AESKeyDAO#get(int) */ @Override public byte[] get(int matchedBCEId) { byte[] key = null; try { Connection connection = db.getConnection(); StringBuilder query = new StringBuilder(); query.append("SELECT * FROM BCE_AES_KEY WHERE KEY_ID = ?"); PreparedStatement stmt = connection.prepareStatement(query.toString()); stmt.setInt(1, matchedBCEId); ResultSet rs = stmt.executeQuery(); while (rs.next()) { key = BCEUtils.unhex(rs.getString(2)); } db.close(rs); db.close(stmt); db.close(connection); } catch (SQLException e) { e.printStackTrace(); } return key; } /* * (non-Javadoc) * @see bce.server.dao.AESKeyDAO#get(int, int) */ @Override public List<byte[]> get(int offset, int length) { List<byte[]> resultList = new ArrayList<byte[]>(length); try { Connection connection = db.getConnection(); StringBuilder query = new StringBuilder(); query.append("SELECT * FROM BCE_AES_KEY WHERE KEY_ID >= ? AND KEY_ID < ?"); PreparedStatement stmt = connection.prepareStatement(query.toString()); stmt.setInt(1, offset); stmt.setInt(2, offset + length); ResultSet rs = stmt.executeQuery(); while (rs.next()) { resultList.add(BCEUtils.unhex(rs.getString(2))); } db.close(rs); db.close(stmt); db.close(connection); } catch (SQLException e) { e.printStackTrace(); } return resultList; } /* * (non-Javadoc) * @see bce.server.dao.AESKeyDAO#add(int, byte[]) */ @Override public void add(int matchedBCEId, byte[] aesKey) { try { Connection conn = db.getConnection(); StringBuilder insert = new StringBuilder(); insert.append("INSERT INTO BCE_AES_KEY (KEY_ID, AES_KEY) VALUES (?, ?)"); PreparedStatement stmt = conn.prepareStatement(insert.toString()); stmt.setInt(1, matchedBCEId); stmt.setString(2, BCEUtils.hex(aesKey)); stmt.executeUpdate(); db.close(stmt); db.close(conn); } catch (SQLException e) { e.printStackTrace(); } } /* * (non-Javadoc) * @see bce.server.dao.AESKeyDAO#add(java.util.List, int, int) */ @Override public void add(List<byte[]> aesKeyList, int offset, int length) { if (aesKeyList.size() != length) return; try { Connection conn = db.getConnection(); conn.setAutoCommit(false); StringBuilder insert = new StringBuilder(); insert.append("INSERT INTO BCE_AES_KEY (KEY_ID, AES_KEY) VALUES (?, ?)"); PreparedStatement stmt = conn.prepareStatement(insert.toString()); for (int i = 0; i < length; i++) { stmt.setInt(1, offset + i); stmt.setString(2, BCEUtils.hex(aesKeyList.get(i))); stmt.addBatch(); } stmt.executeBatch(); conn.commit(); db.close(stmt); db.close(conn); } catch (SQLException e) { e.printStackTrace(); } } /* * (non-Javadoc) * @see bce.server.dao.AESKeyDAO#update(int, byte[]) */ @Override public void update(int matchedBCEId, byte[] aesKey) { try { Connection conn = db.getConnection(); StringBuilder update = new StringBuilder(); update.append("UPDATE BCE_AES_KEY SET AES_KEY = ? WHERE KEY_ID = ?"); PreparedStatement stmt = conn.prepareStatement(update.toString()); stmt.setString(1, BCEUtils.hex(aesKey)); stmt.setInt(2, matchedBCEId); stmt.executeUpdate(); db.close(stmt); db.close(conn); } catch (SQLException e) { e.printStackTrace(); } } /* * (non-Javadoc) * @see bce.server.dao.AESKeyDAO#update(java.util.List, int, int) */ @Override public void update(List<byte[]> aesKeyList, int offset, int length) { if (aesKeyList.size() != length) return; try { Connection conn = db.getConnection(); conn.setAutoCommit(false); StringBuilder update = new StringBuilder(); update.append("UPDATE BCE_AES_KEY SET AES_KEY = ? WHERE KEY_ID = ?"); PreparedStatement stmt = conn.prepareStatement(update.toString()); for (int i = 0; i < length; i++) { stmt.setString(1, BCEUtils.hex(aesKeyList.get(i))); stmt.setInt(2, offset + i); stmt.addBatch(); } stmt.executeBatch(); conn.commit(); System.out.println(db.dbName); db.close(stmt); db.close(conn); } catch (SQLException e) { e.printStackTrace(); } } /* * (non-Javadoc) * @see bce.server.dao.AESKeyDAO#delete(int) */ @Override public void delete(int matchedBCEId) { try { Connection conn = db.getConnection(); StringBuilder delete = new StringBuilder(); delete.append("DELETE FROM BCE_AES_KEY WHERE KEY_ID = ?"); PreparedStatement stmt = conn.prepareStatement(delete.toString()); stmt.setInt(1, matchedBCEId); stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } /* * (non-Javadoc) * @see bce.server.dao.AESKeyDAO#delete() */ @Override public void delete() { try { Connection conn = db.getConnection(); StringBuilder delete = new StringBuilder(); delete.append("DELETE FROM BCE_AES_KEY"); PreparedStatement stmt = conn.prepareStatement(delete.toString()); stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } }