概述

JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。

-------------------------------------------------------淫荡的分割线-------------------------------------------------------

简单使用

使用JDBC需要以下几个步骤:

  1. 加载JDBC驱动程序
  2. 提供JDBC连接的URL
  3. 创建数据库连接
  4. 创建一个Statement对象
  5. 执行SQL语句
  6. 处理返回结果
  7. 关闭数据库连接

废话少说,上代码

 package com.aicai.qa.tools.statics;

 import com.aicai.qa.tools.statics.config.SysConfigUtil;

 import java.sql.*;

 /**
* @author tengfei
* @version 1.0
* @date 2018/7/15 下午8:32
*/
public class DBHelper {
private static DBHelper dbHelper=null; private String host; private Integer port; private String dataBaseName; private String jdbcDriver; private String userName; private String password; private String jdbcConnectionStr; private Connection connection; private PreparedStatement preparedStatement; private ResultSet resultSet; private DBHelper() {
this.host = SysConfigUtil.getSysConfigUtil("jdbc.properties").getString("jdbc.host");
this.port = SysConfigUtil.getSysConfigUtil("jdbc.properties").getInt("jdbc.port");
this.dataBaseName = SysConfigUtil.getSysConfigUtil("jdbc.properties").getString("jdbc.dataBaseName");
this.userName = SysConfigUtil.getSysConfigUtil("jdbc.properties").getString("jdbc.userName");
this.password = SysConfigUtil.getSysConfigUtil("jdbc.properties").getString("jdbc.password");
this.jdbcDriver = SysConfigUtil.getSysConfigUtil("jdbc.properties").getString("jdbc.driver");
jdbcConnectionStr = String.format("jdbc:mysql://%s:%s/%s", host, port, dataBaseName);
} public static DBHelper createDBHelper() {
dbHelper = new DBHelper();
dbHelper.initDB();
return dbHelper;
} public void getConn() {
try {
connection = DriverManager.getConnection(jdbcConnectionStr, userName, password);
connection.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
} public void close() {
if (resultSet != null) {
try {
resultSet.close();
if (preparedStatement != null) {
preparedStatement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
} public ResultSet executeQuery(String sql, Object[] params) {
dbHelper.setPrepareStatementParams(sql, params);
try {
resultSet = preparedStatement.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return resultSet;
} public Boolean executeUpdate(String sql, Object[] params) {
boolean result = false;
dbHelper.setPrepareStatementParams(sql, params);
try {
if (preparedStatement.executeUpdate() > 0) {
dbHelper.commit();
result = true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return result;
} @SuppressWarnings("unused")
private void setPrepareStatementParams(String sql, Object[] params) {
try {
preparedStatement = connection.prepareStatement(sql);
if (params != null) {
for (int i = 0; i < params.length; i++) {
preparedStatement.setObject((i + 1), params[i]);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
} private void initDB() {
try {
Class.forName(jdbcDriver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} private void commit() {
try {
connection.commit();
} catch (SQLException e) {
e.printStackTrace();
}
} public static void main(String[] args) throws SQLException {
dbHelper = DBHelper.createDBHelper();
dbHelper.getConn();
String sql = "SELECT * FROM productCases";
ResultSet resultSet = dbHelper.executeQuery(sql,null);
while (resultSet.next()){
for (int i = 0; i < resultSet.getMetaData().getColumnCount(); i++) {
System.out.println(resultSet.getMetaData().getCatalogName(i+1)+":"+resultSet.getString(i+1));
}
}
}
}

-------------------------------------------------------淫荡的分割线-------------------------------------------------------

SSH管道以及迭代器模式使用

  1. JSch介绍:JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。要使用JSch,需要下载它的jar包,请从官网下载它:http://www.jcraft.com/jsch/
  2. 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());
}
}
} }

DBHelper--Java JDBC SSH 连接数据库工具类的更多相关文章

  1. DbUtils是Apache出品一款简化JDBC开发的工具类

    DbUtils     - DbUtils是Apache出品一款简化JDBC开发的工具类     - 使用DbUtils可以让我们JDBC的开发更加简单     - DbUtils的使用:       ...

  2. Rhino+envjs-1.2.js 在java运行网站js 工具类

    java爬虫遇到个页面加密的东西,找了些资料学习学习 做了个java运行js的工具类,希望对大家有用,其中用到client(获取js)可以自行换成自己的client.主要是用了 Rhino就是Java ...

  3. java中常用的工具类(一)

    我们java程序员在开发项目的是常常会用到一些工具类.今天我汇总了一下java中常用的工具方法.大家可以在项目中使用.可以收藏!加入IT江湖官方群:383126909 我们一起成长 一.String工 ...

  4. Java学习-041-颜色工具类(RGB,HEX)

    在日常的网页开发中,经常需要进行颜色数值获取.转换,例如获取红色,获取蓝色,获取绿色,RGB转十六进制颜色,十六进制颜色转RGB等,因而在学习过程中,写了一个小工具类,仅供各位小主参考! 多不闲言,直 ...

  5. JAVA中封装JSONUtils工具类及使用

    在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. ...

  6. JAVA自动生成正则表达式工具类

    经过很久的努力,终于完成了JAVA自动生成正则表达式工具类.还记得之前需要正则,老是从网上找吗?找了想修改也不会修改.现在不用再为此烦恼了,使用此生成类轻松搞定所有正则表达式.赶快在同事面前炫一下吧. ...

  7. java 二进制数字符串转换工具类

    java 二进制数字符串转换工具类 将二进制转换成八进制 将二进制转换成十进制 将二进制转换成十六进制 将十进制转换成二进制 package com.iteye.injavawetrust.ad; i ...

  8. Java学习-049-正则工具类

    自去年九月份决定再次入学和职业资格进阶,开始备战二者考试至今,以及当下进行中的职称申请,犹如孤独的狼,不断前行在路上,而今凡凡总总的已历8月... 不感慨了,如下为一园友需要的正则工具类,直接上码: ...

  9. Java 后台验证的工具类

    Java 后台验证的工具类 public class ValidationUtil {         //手机号     public static String mobile = "^( ...

随机推荐

  1. HBase实验(CRUD和MR入库)

    目录 前期准备 在HBase shell中实现CRUD操作 1. 启动命令行客户端 2. 创建表 3. 删除.新增列族 4. 删除表teacher 5. 新增数据 6. 查看数据 用Java API实 ...

  2. 286 walls and gate最近的出口

    [抄题]: 您将获得一个使用这三个可能值初始化的 m×n 2D 网格.-1 - 墙壁或障碍物. 0 - 门. INF - Infinity是一个空房间.我们使用值 2 ^ 31 - 1 = 21474 ...

  3. 8-matlab-gui-显示图片有坐标刻度问题

    在图片上显示图片时,总是有图片,一遍做法是使得刻度为空就可了: 在你的每一个axes的CreateFcn函数中添加一下代码即可:set(hObject,'xTick',[]);set(hObject, ...

  4. php通过反射执行某方法

    简单记录下通过反射来获取某方法的参数,然后利用php内置函数类执行此方法 一个简单的test类 class test { //2个参数默认值 public function b($name='lemo ...

  5. mybatis框架入门程序:演示通过mybatis实现数据库的模糊查询操作

    1. mybatis的基本准备操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2. 根据用户名查询用户信息: (1)映射文件 ...

  6. 使用WindowsFormsApplicationBase实现引导界面

    1.需要添加对Microsoft.VisualBasic 引用, 2.准备frmMain,frmSplash两个窗口 说明:        frmSplash在主线程上建立,但是在独立线程上进行消息循 ...

  7. (广搜) Find a way -- hdu -- 2612

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2612 Find a way Time Limit: 3000/1000 MS (Java/Others) ...

  8. 企业搜索引擎开发之连接器connector(二十四)

    本人在上文中提到,连接器实现了两种事件依赖的机制 ,其一是我们手动操作连接器实例时:其二是由连接器的自动更新机制 上文中分析了连接器的自动更新机制,即定时器执行定时任务 那么,如果我们手动操作连接器实 ...

  9. EBS11i - 常用Profile

      Profile Name 说明 设置建议 FND: Enable Cancel Query 当执行一个超长时间的查询时,会出现一个 Cancel窗口,允许用户取消.比如我们在SO 界面没有输入条件 ...

  10. [翻译]Writing Component Editors 编写组件的编辑器

    Writing Component Editors  编写组件的编辑器   All common control editors (opened from a control's context me ...