概述
JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。
-------------------------------------------------------淫荡的分割线-------------------------------------------------------
简单使用
使用JDBC需要以下几个步骤:
- 加载JDBC驱动程序
- 提供JDBC连接的URL
- 创建数据库连接
- 创建一个Statement对象
- 执行SQL语句
- 处理返回结果
- 关闭数据库连接
废话少说,上代码
1 package com.aicai.qa.tools.statics; 2 3 import com.aicai.qa.tools.statics.config.SysConfigUtil; 4 5 import java.sql.*; 6 7 /** 8 * @author tengfei 9 * @version 1.0 10 * @date 2018/7/15 下午8:32 11 */ 12 public class DBHelper { 13 private static DBHelper dbHelper=null; 14 15 private String host; 16 17 private Integer port; 18 19 private String dataBaseName; 20 21 private String jdbcDriver; 22 23 private String userName; 24 25 private String password; 26 27 private String jdbcConnectionStr; 28 29 private Connection connection; 30 31 private PreparedStatement preparedStatement; 32 33 private ResultSet resultSet; 34 35 private DBHelper() { 36 this.host = SysConfigUtil.getSysConfigUtil("jdbc.properties").getString("jdbc.host"); 37 this.port = SysConfigUtil.getSysConfigUtil("jdbc.properties").getInt("jdbc.port"); 38 this.dataBaseName = SysConfigUtil.getSysConfigUtil("jdbc.properties").getString("jdbc.dataBaseName"); 39 this.userName = SysConfigUtil.getSysConfigUtil("jdbc.properties").getString("jdbc.userName"); 40 this.password = SysConfigUtil.getSysConfigUtil("jdbc.properties").getString("jdbc.password"); 41 this.jdbcDriver = SysConfigUtil.getSysConfigUtil("jdbc.properties").getString("jdbc.driver"); 42 jdbcConnectionStr = String.format("jdbc:mysql://%s:%s/%s", host, port, dataBaseName); 43 } 44 45 public static DBHelper createDBHelper() { 46 dbHelper = new DBHelper(); 47 dbHelper.initDB(); 48 return dbHelper; 49 } 50 51 52 public void getConn() { 53 try { 54 connection = DriverManager.getConnection(jdbcConnectionStr, userName, password); 55 connection.setAutoCommit(false); 56 } catch (SQLException e) { 57 e.printStackTrace(); 58 } 59 } 60 61 public void close() { 62 if (resultSet != null) { 63 try { 64 resultSet.close(); 65 if (preparedStatement != null) { 66 preparedStatement.close(); 67 } 68 if (connection != null) { 69 connection.close(); 70 } 71 } catch (SQLException e) { 72 e.printStackTrace(); 73 } 74 } 75 } 76 77 public ResultSet executeQuery(String sql, Object[] params) { 78 dbHelper.setPrepareStatementParams(sql, params); 79 try { 80 resultSet = preparedStatement.executeQuery(); 81 } catch (SQLException e) { 82 e.printStackTrace(); 83 } 84 return resultSet; 85 } 86 87 public Boolean executeUpdate(String sql, Object[] params) { 88 boolean result = false; 89 dbHelper.setPrepareStatementParams(sql, params); 90 try { 91 if (preparedStatement.executeUpdate() > 0) { 92 dbHelper.commit(); 93 result = true; 94 } 95 } catch (SQLException e) { 96 e.printStackTrace(); 97 } 98 return result; 99 } 100 101 @SuppressWarnings("unused") 102 private void setPrepareStatementParams(String sql, Object[] params) { 103 try { 104 preparedStatement = connection.prepareStatement(sql); 105 if (params != null) { 106 for (int i = 0; i < params.length; i++) { 107 preparedStatement.setObject((i + 1), params[i]); 108 } 109 } 110 } catch (SQLException e) { 111 e.printStackTrace(); 112 } 113 } 114 115 private void initDB() { 116 try { 117 Class.forName(jdbcDriver); 118 } catch (ClassNotFoundException e) { 119 e.printStackTrace(); 120 } 121 } 122 123 private void commit() { 124 try { 125 connection.commit(); 126 } catch (SQLException e) { 127 e.printStackTrace(); 128 } 129 } 130 131 public static void main(String[] args) throws SQLException { 132 dbHelper = DBHelper.createDBHelper(); 133 dbHelper.getConn(); 134 String sql = "SELECT * FROM productCases"; 135 ResultSet resultSet = dbHelper.executeQuery(sql,null); 136 while (resultSet.next()){ 137 for (int i = 0; i < resultSet.getMetaData().getColumnCount(); i++) { 138 System.out.println(resultSet.getMetaData().getCatalogName(i+1)+":"+resultSet.getString(i+1)); 139 } 140 } 141 }
142 }
-------------------------------------------------------淫荡的分割线-------------------------------------------------------
SSH管道以及迭代器模式使用
- JSch介绍:JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。要使用JSch,需要下载它的jar包,请从官网下载它:http://www.jcraft.com/jsch/
- JSch连接MySQL数据库小栗子:
package com.aicai.qa.tools.statics.db; import com.aicai.qa.tools.statics.db.vo.DbVO; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import lombok.extern.slf4j.Slf4j; import java.sql.*; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * @author tengfei * @version 1.0 * @date 2018/7/10 下午5:06 */ @Slf4j public class DBHelper implements Iterator<Object[]> { private static JSch jSch = new JSch(); ResultSet rs; ResultSetMetaData rd; Connection connection; Statement statement; private String url; private Integer current = 0; private Integer readIndex = 0; public DBHelper(DbVO db, String sql) { log.info("DBHelper exec"); try { if (db != null) { if (db.getBindingPort() != null) { Session session = jSch.getSession(db.getSshName(), db.getSshIp(), db.getSshPort()); session.setPassword(db.getSshPwd()); session.setConfig("StrictHostKeyChecking", "no"); session.connect(); session.setPortForwardingL(db.getBindingPort(), db.getIp(), db.getPort()); url = String.format("jdbc:mysql://localhost:%s/%s", db.getBindingPort(), db.getBaseName()); } else { url = String.format("jdbc:mysql://%s:%s/%s", db.getIp(), db.getPort(), db.getBaseName()); } Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection(url, db.getUserName(), db.getPassword()); statement = connection.createStatement(); rs = statement.executeQuery(sql); rd = rs.getMetaData(); } } catch (JSchException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } @Override public boolean hasNext() { log.info("hasNext method exec"); boolean flag = false; if (readIndex < current) { return true; } try { flag = rs.next(); current++; } catch (SQLException e) { e.printStackTrace(); } return flag; } @Override public Object[] next() { log.info("next method exec"); readIndex++; Map<String, String> data = new HashMap<>(16); try { for (int i = 0; i < rd.getColumnCount(); i++) { data.put(rd.getColumnName(i + 1), rs.getString(i + 1)); } } catch (SQLException e) { e.printStackTrace(); } Object[] rows = new Object[1]; rows[0] = data; return rows; } @Override public void remove() { free(rs, statement, connection); } private static void free(ResultSet rs) { close(rs); } private static void free(ResultSet rs, Statement statement) { free(rs); close(statement); } private static void free(ResultSet rs, Statement statement, Connection connection) { free(rs, statement); close(connection); } private static void close(ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { log.error("closed ResultSet object fail.localized message is {}", e.getLocalizedMessage()); } } } private static void close(Statement statement) { if (statement != null) { try { statement.close(); } catch (SQLException e) { log.error("closed Statement object fail.localized message is {}", e.getLocalizedMessage()); } } } private static void close(Connection connection) { if (connection != null) { try { connection.close(); } catch (SQLException e) { log.error("closed Connection object fail.localized message is {}", e.getLocalizedMessage()); } } } }