package com.dangdang.msg.dbutil;

import com.dangdang.msg.configure.*;
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList; import org.apache.log4j.Logger; /**
* mysql 的数据类,只包含数据库建立,nosql的执行
*
* @author 李朋飞
*/ public class DBHelper {
/**
* 获取数据库的连接
*
* @return 返回conn,
*/
public static Logger logger;
private static Connection conn = null; public static void getConnection() {
logger = Logger.getLogger(DBHelper.class);
try {
Class.forName(Config.dbConfig.getDbdriver()).newInstance(); // 加载数据库驱动
conn = (Connection) DriverManager.getConnection(
Config.dbConfig.getDbhost(), Config.dbConfig.getUser(),
Config.dbConfig.getPassword());
conn.setAutoCommit(false);
} catch (ClassNotFoundException e) {
logger.error("未找到类:" + Config.dbConfig.getDbdriver(), e);
} catch (SQLException e) {
logger.error("无法连接数据库", e);
} catch (Exception e) {
logger.error("其他异常", e);
}
} public static boolean commitJob() {
try {
conn.commit();
return true;
} catch (SQLException e) {
logger.error("commit error!");
return false;
}
} public static Connection getConn() {
// 若超时,或者连接中断
if (true == isConnOutTime())
getConnection();
return conn;
} /**
* 判断数据库连接是否未超时
* isConnection
* return boolean true,则未超时,否则超时
*/ private static boolean isConnOutTime() {
try {
// 若未初始化连接,则连接初始化
if (conn == null || conn.isClosed() == true)
return true;
// ping ,查看是否连接超时
if (conn instanceof com.mysql.jdbc.Connection) {
conn.ping();
}
} catch (SQLException e) {
logger.error("连接超时", e);
return true;
}
return true;
} /**
* 增删改【Add、Del、Update】
*
* @param sql
* 需要执行的SQL语句
* @return int 返回是否成功,若失败,则返回-1,若成功,但未修改数据库,则返回0,否则返回正整数
*/ public static int executeNonQuery(String sql) throws SQLException {
int result = 0;
Statement stmt = null;
stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
return result;
} /**
* 查询SQL语句,预期结果为一个String数组,返回结果
*
* @param sql
* 所要执行的sql语句
* @return 返回值为预期结果
* @throws SQLException
* SQL执行错误异常
*/
public static String getString(String sql) throws SQLException { Statement stmt = null;
ResultSet rs = null;
String ret = null; stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if (false == rs.wasNull() && rs.next())
ret = rs.getString(1);
return ret;
} /**
* 查询SQL语句,该SQL语句返回结果包含多行一列,返回该列
*
* @param sql
* 需要主席邢的sql语句
* @return 返回值为ArrayList
* @throws SQLException
* 抛出sql异常
*/
public static ArrayList<String> getList(String sql) throws SQLException {
Statement stmt = null;
ResultSet rs = null;
ArrayList<String> ret = new ArrayList<String>();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if (rs.wasNull())
return null;
while (rs.next())
ret.add(rs.getString(1)); return ret;
}
}

java数据库 DBHelper的更多相关文章

  1. JDBC与JAVA数据库编程

    一.JDBC的概念 1. JDBC (Java DataBase Connectivity) Java数据库连接 a) 主要提供java数据库应用程序的API支持 2. JDBC的主要功能 a) 创建 ...

  2. JAVA数据库基本操作 (转)

    JAVA数据库基本操作指南   Java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接. 一.取得数据库连接 1.用DriverManager取数据库连接 ...

  3. java面向对象下:Java数据库编程

    19.Java数据库编程: JDBC概述:        JDBC(Java Database Connection)是java中提供的一套数据库编程API,它定义了一套用来访问数据库的标准Java类 ...

  4. Java数据库设计14个技巧

    Java数据库设计14个技巧   1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体.在特殊情况下,它们可能是一对 ...

  5. MinerDB.java 数据库工具类

    MinerDB.java 数据库工具类 package com.iteye.injavawetrust.miner; import java.sql.Connection; import java.s ...

  6. MinerBean.java 数据库表 miner bean

    MinerBean.java 数据库表 miner bean package com.iteye.injavawetrust.miner; import java.util.Date; /** * 数 ...

  7. Java数据库学习之模糊查询(like )

    Java数据库学习之模糊查询(like ): 第一种方式:直接在SQL语句中进行拼接,此时需要注意的是parm在SQL语句中需要用单引号拼接起来,注意前后单引号之间不能空格 String sql = ...

  8. Java数据库操作(MySQL与SQLserver)

    在java编程开发中,数据库的开发是重头戏. MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品: SQL Server是由Microsoft开发 ...

  9. Java 数据库操作

    目录 Java数据库组织架构 下载驱动包 连接数据库 连接数据库的三个步骤 连接数据库的高开销 Statement接口介绍 PreparedStatement类 使用PreparedStatement ...

随机推荐

  1. Postgresql存放数组形式的数据

    Postgres 数据库允许把字段定义为可变长度的数组.数据类型既可以是内置类型,也可以是用户自定义的类型或枚举类型. 例如: 创建表 create table demo(name text,subj ...

  2. Web安全相关(一):CSRF/XSRF(跨站请求伪造)和XSS(跨站脚本)

    XSS(Cross Site Script):跨站脚本,也就是javascript脚本注入,一般在站点中的富文本框,里面发表文章,留言等表单,这种表单一般是写入数据库,然后再某个页面打开. 防御: 1 ...

  3. OpenGL 实现视频编辑中的转场效果

    转场介绍 转场效果是什么? 转场效果,简单来说就是两段视频之间的衔接过渡效果. 现在拍摄 vlog 的玩家越来越多,要是视频没有一两个炫酷的转场效果,都不好意思拿出来炫酷了. 那么如何在视频编辑软件中 ...

  4. django 从零开始 8 用户登录验证 待测

    看文档 djang 自带一个用户登录验证的方法,不过有些看着懵逼,去网上找了一圈,发现很多都是照抄文档说明的,几乎没说啥原理 特别是 from django.contrib.auth import a ...

  5. 搭建私有 Nuget 服务器教程(1)

    对于 .NET 开发者来说,nuget 是必不可少的程序包管理工具.相应地,大部分开发团队都需要在内部搭建 Nuget 服务器,以管理私有 nupkg 包.本教程所使用的 Nuget 服务器,不是微软 ...

  6. js 小练习题

    <script> /*1.结论,IIFE中运行顺序3,1,执行test(4),会传递参数*/ /*var a=5; var test = (function(a){ console.log ...

  7. HTML每日学习笔记(3)

    7.17.2019 XHTML 1.XHTML与HTML的区别: XHTML 元素必须被正确地嵌套. XHTML 元素必须被关闭. 标签名必须用小写字母. XHTML 文档必须拥有根元素.(所有的 X ...

  8. 源码分析 Alibaba sentinel 滑动窗口实现原理(文末附原理图)

    要实现限流.熔断等功能,首先要解决的问题是如何实时采集服务(资源)调用信息.例如将某一个接口设置的限流阔值 1W/tps,那首先如何判断当前的 TPS 是多少?Alibaba Sentinel 采用滑 ...

  9. Socket编程简介

    目录 背景 基础 流程 参考 本文系读书笔记,非深入研究,也无代码,如非所需,请见谅. 哦,这里有份不错的:Linux的SOCKET编程详解 背景 花了好久的时间(大约一周,我太垃圾)看完了一篇英文文 ...

  10. shell脚本基础-语法

    一 变量 [root@T_FOOT-Home2-ZZZ01 ~]# a=hello [root@T_FOOT-Home2-ZZZ01 ~]# echo $a hello [root@T_FOOT-Ho ...