数据库操作类,将所有连接数据库的配置信息以及基本的CRUD操作封装在一个类里,方便项目里使用,将连接数据库的基本信息放在配置文件 "dbinfo.properties" 中,通过类加载器调用(也可以通过ServletContext调用配置文件,或者配置在web.xml里通过ServletConfig调用),需要修改数据库连接信息时,只需修改配置文件即可。

  

  1. package com.latiny.db;
  2.  
  3. import java.io.*;
  4. import java.sql.*;
  5. import java.util.ArrayList;
  6. import java.util.Properties;
  7.  
  8. /*
  9. * 数据库操作类
  10. */
  11.  
  12. public class DBUtil {
  13.  
  14. //定义需要的变量
  15. private static String driver =null;
  16. private static String url =null;
  17. private static String user=null;
  18. private static String password=null;
  19.  
  20. private static Connection conn;
  21. //使用PreparedStatment可以防止sql注入
  22. private static PreparedStatement ps;
  23. private static ResultSet rs;
  24. private static CallableStatement cs;
  25.  
  26. //读配置文件
  27. private static Properties pp=null;
  28. private static InputStream fis=null;
  29.  
  30. //加载驱动,只需要执行一次
  31. static
  32. {
  33. try
  34. {
  35. pp = new Properties();
  36.  
  37. //当我们使用java web的时候,读取文件要使用类加载器
  38. fis = DBUtil.class.getClassLoader().getResourceAsStream("dbinfo.properties");
  39.  
  40. pp.load(fis);
  41. driver = pp.getProperty("DRIVER");
  42. url = pp.getProperty("URL");
  43. user = pp.getProperty("USER");
  44. password = pp.getProperty("PASSWORD");
  45.  
  46. // 1 加载驱动
  47. Class.forName(driver);
  48.  
  49. }
  50. catch(Exception e)
  51. {
  52. e.printStackTrace();
  53. }
  54. finally
  55. {
  56. try
  57. {
  58. fis.close();
  59. } catch (IOException e) {
  60. // TODO Auto-generated catch block
  61. e.printStackTrace();
  62. }
  63. fis = null;
  64. }
  65. }
  66.  
  67. /*
  68. * 获取Connection连接
  69. */
  70. public static Connection getConn()
  71. {
  72. try
  73. {
  74. // 2 获取数据库连接
  75. conn = DriverManager.getConnection(url, user, password);
  76. }
  77. catch (SQLException e)
  78. {
  79. // TODO Auto-generated catch block
  80. e.printStackTrace();
  81. }
  82.  
  83. return conn;
  84. }
  85.  
  86. /*
  87. * 直接返回rs结果,此方法不能关闭rs,因为后面调用它的类还会用到,如果关闭则不能正常使用
  88. */
  89. public static ResultSet queryResult(String sql, String[] parameters)
  90. {
  91. try
  92. {
  93. conn = getConn();
  94. // 3 创建Statement对象
  95. ps = conn.prepareStatement(sql);
  96. // 4 给问号赋值,即给sql语句的条件参数赋值如果需要的话
  97. if(parameters!=null)
  98. {
  99. for(int i=1; i<=parameters.length; i++)
  100. {
  101. ps.setString(i, parameters[i-1]);
  102. }
  103. }
  104.  
  105. // 5 执行sql获取返回结果
  106. rs = ps.executeQuery();
  107. }
  108. catch (SQLException e)
  109. {
  110. // TODO Auto-generated catch block
  111. e.printStackTrace();
  112. }
  113.  
  114. return rs;
  115. }
  116.  
  117. /*
  118. * 将rs结果封装成ArrayList,然后可以关闭rs,节省数据库访问资源
  119. */
  120. public static ArrayList queryResult2(String sql, String[] parameters)
  121. {
  122. ArrayList al = new ArrayList();
  123.  
  124. try
  125. {
  126. //2 获取数据库连接
  127. conn = getConn();
  128. //3 创建Statement对象
  129. ps = conn.prepareStatement(sql);
  130. //4 给问号赋值,即给sql语句的条件参数赋值如果需要的话
  131. if(parameters!=null)
  132. {
  133. for(int i=1; i<=parameters.length; i++)
  134. {
  135. ps.setString(i, parameters[i-1]);
  136. }
  137. }
  138.  
  139. //5 执行sql语句获取返回结果
  140. rs = ps.executeQuery();
  141.  
  142. //获取rs的结构
  143. ResultSetMetaData rsmd = rs.getMetaData();
  144. //获取查询语句的列数
  145. int column = rsmd.getColumnCount();
  146.  
  147. while(rs.next())
  148. {
  149. //对象数组,存储一行数据
  150. Object[] objs = new Object[column];
  151. for(int i=0; i<objs.length; i++)
  152. {
  153. objs[i] = rs.getObject(i+1);
  154. }
  155. al.add(objs);
  156. }
  157.  
  158. }
  159. catch (SQLException e)
  160. {
  161. // TODO Auto-generated catch block
  162. e.printStackTrace();
  163. }
  164. finally
  165. {
  166. //关闭资源
  167. close(rs, ps, conn);
  168. }
  169.  
  170. return al;
  171. }
  172.  
  173. //调用存储过程,带输入输出参数的
  174. public static CallableStatement callProcedure(String sql, String[] inputPara, Integer[] outputPara)
  175. {
  176.  
  177. try
  178. {
  179. conn = getConn();
  180. cs = conn.prepareCall(sql);
  181. for(int i=0; inputPara!=null && i<inputPara.length; i++)
  182. {
  183. cs.setObject(i+1, inputPara[i]);
  184. }
  185.  
  186. //给output参数赋值
  187. for(int j=0; outputPara!=null && j<outputPara.length; j++)
  188. {
  189. cs.registerOutParameter(inputPara.length+1+j, outputPara[j]);
  190. }
  191.  
  192. cs.execute();
  193.  
  194. } catch (SQLException e) {
  195. // TODO Auto-generated catch block
  196. e.printStackTrace();
  197. }
  198. finally
  199. {
  200. close(rs, ps, conn);
  201. }
  202.  
  203. return cs;
  204.  
  205. }
  206.  
  207. //update, insert, delete
  208. public static Integer updateData(String sql, String[] parameters)
  209. {
  210. int result = 0;
  211. try
  212. {
  213. conn = getConn();
  214. ps = conn.prepareStatement(sql);
  215. if(parameters!=null)
  216. {
  217. for(int i=0; i<parameters.length; i++)
  218. {
  219. ps.setObject(i+1, parameters[i]);
  220. }
  221. }
  222.  
  223. //执行executeUpdate并且返回受影响的行数
  224. result = ps.executeUpdate();
  225.  
  226. }
  227. catch(Exception e)
  228. {
  229. e.printStackTrace();
  230. }
  231. finally
  232. {
  233. close(rs, ps, conn);
  234. }
  235.  
  236. return result;
  237. }
  238.  
  239. //关闭对应的数据库连接资源
  240. public static void close(ResultSet rs1, PreparedStatement ps1, Connection conn1)
  241. {
  242.  
  243. try
  244. {
  245. if(rs1!=null)
  246. {
  247. rs1.close();
  248. }
  249. if(ps1!=null)
  250. {
  251. ps1.close();
  252. }
  253. if(conn1!=null)
  254. {
  255. conn1.close();
  256. }
  257.  
  258. } catch (SQLException e) {
  259. // TODO Auto-generated catch block
  260. e.printStackTrace();
  261. }
  262.  
  263. }
  264. }

dbinfo.properties文件配置信息

  1. DRIVER=com.mysql.jdbc.Driver
  2. URL=jdbc:mysql://localhost:3306/servlet
  3. USER=latiny
  4. PASSWORD=123456

Java 数据库简单操作类的更多相关文章

  1. Intellij IDEA集成mybatis-generator插件自动生成数据库实体操作类

    Intellij IDEA集成mybatis-generator插件自动生成数据库实体操作类 转载至:https://blog.csdn.net/fishinhouse/article/details ...

  2. github上创建java项目简单操作

    github上创建java项目简单操作 参考L: github上创建java项目简单操作 - CSDN博客http://blog.csdn.net/qq_29392425/article/detail ...

  3. SQL数据库简单操作

    sql语言简介 (1)数据库是文件系统,使用标准sql对数据库进行操作 * 标准sql,在mysql里面使用语句,在oracle.db2都可以使用这个语句 (2)什么是sql * Structured ...

  4. [转]html5 js 访问 sqlite 数据库的操作类

    本文转自:http://blog.csdn.net/tsxw24/article/details/7613815 webkit 核心的浏览器提供了 3个 api接口,用于访问本地sqlite数据,但使 ...

  5. java csv 文件 操作类

    一个CSV文件操作类,功能比较齐全: package tool; import java.io.BufferedReader; import java.io.BufferedWriter; impor ...

  6. MongoDB数据库简单操作

    之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...

  7. fastCMS数据库相关操作类

    fastCMS针对数据库的操作有以下几个类: 1.[paging_Class]分页类 此类用于分页检索数据库内符合条件的记录 1) 支持百万级数据分页 2) 支持多种类型的SQL语法,比如 Left ...

  8. sqlhelper 数据库帮助操作类

    数据库帮助类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...

  9. MySQL数据库简单操作

    title date tags layout MySQL简单操作 2018-07-16 Linux post 登录mysql mysql -h 主机名 -u 用户名 -p 查看所有数据库 show d ...

随机推荐

  1. 网络协议与OSI体系结构

    网络协议与网络体系结构 一.网络协议的概念 1.含义: 网络协议是计算机间进行通信时遵循的一些约定和规则 2.三要素: (1)语法:用于确定协议元素的格式,即数据与控制信息的结构 (2)语义:用于确定 ...

  2. [Java] SpringMVC工作原理之一:DispatcherServlet

    一.DispatcherServlet 处理流程 在整个 Spring MVC 框架中,DispatcherServlet 处于核心位置,它负责协调和组织不同组件完成请求处理并返回响应工作.在看 Di ...

  3. 新建SpringBoot项目运行页面报错Whitelabel Error Page This application has no explicit mapping for /error, so yo

    新建SpringBoot项目运行页面报错Whitelabel Error Page This application has no explicit mapping for /error, so yo ...

  4. dp 洛谷P1977 出租车拼车 线性dp

    题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱 ...

  5. 设计模式のChainOfResponsibilityPattern(责任链模式)----行为模式

    一.产生背景 职责链模式是一种行为模式,为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求.将这些对象连接成一条链,并沿着这条链传递该请求,直到有一个对象处理它.避免请求发送者与接 ...

  6. WPF模板(二)应用

    本次内容来源于电子书,和上一篇一样. 在WPF中有三大模板ControlTemplate,ItemsPanelTemplate,DataTemplate.其中ControlTemplate和Items ...

  7. [容斥原理] hdu 4135 Co-prime

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4135 Co-prime Time Limit: 2000/1000 MS (Java/Others) ...

  8. BZOJ4327:[JSOI2012]玄武密码(SAM)

    Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此.  ...

  9. python的格式化输出

    Python的格式化输出有两种: 一.类似于C语言的printf的方法 二.类似于C#的方法

  10. maven下载及安装

    一.下载及安装 1.1 下载maven 3.1.1 先到官网http://maven.apache.org/download.cgi 下载最新版本(目前是3.1.1 ),下载完成后,解压到某个目录,本 ...