1、 SQL server连接:

数据库不同架包就不同

SQL server 使用的架包是(sqljdbc4.jar)

2、 Mysql (MariaDB同理)

SQL server 使用的架包是(mysql-connector-java-5.1.17-bin.jar)

  1.      DBDRIVER = "com.mysql.jdbc.Driver";
  2. DBURL = "jdbc:mysql://localhost:3306/mobilephonedb";
  3. DBUID = "root";
  4. DBPWD = "";

关于mysql后台写入数据乱码问题解决方式:

  1. DBURL = "jdbc:mysql://localhost:3306/bookdb?useUnicode=true&characterEncoding=utf-8&";

因为java没有告诉mysql传过来的是什么类型的数据。

3、sqlite

SQL server 使用的架包是(sqlite-jdbc-3.21.0.jar)

  1. DBDRIVER = "org.sqlite.JDBC";
  2. //这里使用的是绝对路径
  3. DBURL = "jdbc:sqlite:D:\\myphone.db";

下面是工具类

  1. package com.dz.product.dao;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.sql.*;
  6. import java.text.ParsePosition;
  7. import java.text.SimpleDateFormat;
  8. import java.util.*;
  9. import java.util.Date;
  10. public class DBUtil {
  11. //连接对象
  12. //Statement 命令对象
  13. //打开连接
  14. //关闭连接
  15. //得到一个连接对象
  16. //查询(有参,无参)
  17. //修改(有参,无参)
  18.  
  19. static Connection conn = null;
  20. static Statement stmt = null;
  21. static PreparedStatement pstmt=null;
  22.  
  23. //驱动,服务器地址,登录用户名,密码
  24. static String DBDRIVER;
  25. static String DBURL;
  26. static String DBUID;
  27. static String DBPWD;
  28.  
  29. static {
  30. DBDRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
  31. DBURL = "jdbc:sqlserver://localhost:1433;databasename=YerGoMallPro";
  32. DBUID = "sa";
  33. //DBPWD = "@zdm168168...";
  34. DBPWD = "123456";//打开连接
    }
  35. public static void open() {
  36. //加载驱动
  37. try {
  38. Class.forName(DBDRIVER);
  39. conn=DriverManager.getConnection(DBURL,DBUID,DBPWD);
  40.  
  41. } catch (ClassNotFoundException e) {
  42. e.printStackTrace();
  43. } catch (SQLException e) {
  44. e.printStackTrace();
  45. }
  46. }
  47. //关闭连接
  48. public static void close() {
  49. try {
  50. if(stmt!=null)
  51. stmt.close();
  52. if(conn!=null && !conn.isClosed())
  53. conn.close();
  54. } catch (SQLException e) {
  55. // TODO Auto-generated catch block
  56. e.printStackTrace();
  57. }
  58. }
  59. //得到一个连接对象,当用户使用DBUtil无法解决个性问题时
  60. //可以通过本方法获得连接对象
  61. public static Connection getConnection() {
  62. try {
  63. if(conn==null ||conn.isClosed())
  64. open();
  65. } catch (SQLException e) {
  66. e.printStackTrace();
  67. }
  68. return conn;
  69. }
  70.  
  71. //executeQuery
  72. //executeUpdate
  73. //execute
  74. //获得查询的数据集
  75. //select * from student where name='' and sex=''
  76. public static ResultSet executeQuery(String sql) {
  77. try {
  78. open();//保证连接是成功的
  79. stmt = conn.createStatement();
  80. return stmt.executeQuery(sql);
  81. } catch (SQLException e) {
  82. // TODO Auto-generated catch block
  83. e.printStackTrace();
  84. }
  85. return null;
  86. }
  87.  
  88. //修改表格内容
  89. public static int executeUpdate(String sql) {
  90. int result = 0;
  91. try {
  92. open();//保证连接是成功的
  93. stmt = conn.createStatement();
  94. result = stmt.executeUpdate(sql);
  95. } catch (SQLException e) {
  96. // TODO Auto-generated catch block
  97. e.printStackTrace();
  98. } finally {
  99. close();
  100. }
  101. return result;
  102. }
  103. //如果执行的查询或存储过程,会返回多个数据集,或多个执行成功记录数
  104. //可以调用本方法,返回的结果,
  105. //是一个List<ResultSet>或List<Integer>集合
  106. public static Object execute(String sql) {
  107. boolean b=false;
  108. try {
  109. open();//保证连接是成功的
  110. stmt = conn.createStatement();
  111. b = stmt.execute(sql);
  112. //true,执行的是一个查询语句,我们可以得到一个数据集
  113. //false,执行的是一个修改语句,我们可以得到一个执行成功的记录数
  114. if(b){
  115. return stmt.getResultSet();
  116. }
  117. else {
  118. return stmt.getUpdateCount();
  119. }
  120. } catch (SQLException e) {
  121. // TODO Auto-generated catch block
  122. e.printStackTrace();
  123. } finally {
  124. if(!b) {
  125. close();
  126. }
  127. }
  128. return null;
  129. }
  130.  
  131. //
  132. //select * from student where name=? and sex=?
  133. public static ResultSet executeQuery(String sql,Object[] in) {
  134. try {
  135. open();//保证连接是成功的
  136. PreparedStatement pst = conn.prepareStatement(sql);
  137. for(int i=0;i<in.length;i++)
  138. pst.setObject(i+1, in[i]);
  139. stmt = pst;//只是为了关闭命令对象pst
  140. return pst.executeQuery();
  141. } catch (SQLException e) {
  142. // TODO Auto-generated catch block
  143. e.printStackTrace();
  144. }
  145. return null;
  146. }
  147.  
  148. public static int executeUpdate(String sql,Object[] in) {
  149. try {
  150. open();//保证连接是成功的
  151. PreparedStatement pst = conn.prepareStatement(sql);
  152. for(int i=0;i<in.length;i++)
  153. pst.setObject(i+1, in[i]);
  154. stmt = pst;//只是为了关闭命令对象pst
  155. return pst.executeUpdate();
  156. } catch (SQLException e) {
  157. // TODO Auto-generated catch block
  158. e.printStackTrace();
  159. }finally {
  160. close();
  161. }
  162. return 0;
  163. }
  164.  
  165. public static PreparedStatement pstmt(String sql){
  166. open();
  167. try {
  168. return pstmt = conn.prepareStatement(sql);
  169. } catch (SQLException e) {
  170. // TODO 自动生成的 catch 块
  171. e.printStackTrace();
  172. }
  173. return null;
  174. }
  175.  
  176. public static Object execute(String sql,Object[] in) {
  177. boolean b=false;
  178. try {
  179. open();//保证连接是成功的
  180. PreparedStatement pst = conn.prepareStatement(sql);
  181. for(int i=0;i<in.length;i++)
  182. pst.setObject(i+1, in[i]);
  183. b = pst.execute();
  184. //true,执行的是一个查询语句,我们可以得到一个数据集
  185. //false,执行的是一个修改语句,我们可以得到一个执行成功的记录数
  186. if(b){
  187. System.out.println("----");
  188. /*List<ResultSet> list = new ArrayList<ResultSet>();
  189. list.add(pst.getResultSet());
  190. while(pst.getMoreResults()) {
  191. list.add(pst.getResultSet());
  192. }*/
  193. return pst.getResultSet();
  194. }
  195. else {
  196. System.out.println("****");
  197. List<Integer> list = new ArrayList<Integer>();
  198. list.add(pst.getUpdateCount());
  199. while(pst.getMoreResults()) {
  200. list.add(pst.getUpdateCount());
  201. }
  202. return list;
  203. }
  204. } catch (SQLException e) {
  205. // TODO Auto-generated catch block
  206. e.printStackTrace();
  207. } finally {
  208. if(!b) {
  209. System.out.println("====");
  210. close();
  211. }
  212. }
  213. return null;
  214. }
  215. //调用存储过程 proc_Insert(?,?,?)
  216. public static Object executeProcedure(String procName,Object[] in) {
  217. open();
  218. try {
  219. procName = "{call "+procName+"(";
  220. String link="";
  221. for(int i=0;i<in.length;i++) {
  222. procName+=link+"?";
  223. link=",";
  224. }
  225. procName+=")}";
  226. CallableStatement cstmt = conn.prepareCall(procName);
  227. for(int i=0;i<in.length;i++) {
  228. cstmt.setObject(i+1, in[i]);
  229. }
  230. if(cstmt.execute())
  231. {
  232. return cstmt.getResultSet();
  233. }
  234. else {
  235. return cstmt.getUpdateCount();
  236. }
  237. } catch (SQLException e) {
  238. // TODO Auto-generated catch block
  239. e.printStackTrace();
  240. }
  241.  
  242. return null;
  243. }
  244.  
  245. /*
  246. * 调用存储过程,并有输出参数
  247. * @procName ,存储过程名称:proc_Insert(?,?)
  248. * @in ,输入参数集合
  249. * @output,输出参数集合
  250. * @type,输出参数类型集合
  251. * */
  252. public static Object executeOutputProcedure(String procName,
  253. Object[] in,Object[] output,int[] type){
  254. Object result = null;
  255. try {
  256. CallableStatement cstmt = conn.prepareCall("{call "+procName+"}");
  257. //设置存储过程的参数值
  258. int i=0;
  259. for(;i<in.length;i++){//设置输入参数
  260. cstmt.setObject(i+1, in[i]);
  261. //print(i+1);
  262. }
  263. int len = output.length+i;
  264. for(;i<len;i++){//设置输出参数
  265. cstmt.registerOutParameter(i+1,type[i-in.length]);
  266. //print(i+1);
  267. }
  268. boolean b = cstmt.execute();
  269. //获取输出参数的值
  270. for(i=in.length;i<output.length+in.length;i++)
  271. output[i-in.length] = cstmt.getObject(i+1);
  272. if(b) {
  273. result = cstmt.getResultSet();
  274. }
  275. else {
  276. result = cstmt.getUpdateCount();
  277. }
  278. } catch (SQLException e) {
  279. // TODO Auto-generated catch block
  280. e.printStackTrace();
  281. }
  282. return result;
  283. }
  284.  
  285. //时间转换
  286. public static Date date(String date_str) {
  287. try {
  288. Calendar cal = Calendar.getInstance();//日期类
  289. Timestamp timestampnow = new Timestamp(cal.getTimeInMillis());//转换成正常的日期格式
  290. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");//改为需要的东西
  291. ParsePosition pos = new ParsePosition(0);
  292. java.util.Date current = formatter.parse(date_str, pos);
  293. timestampnow = new Timestamp(current.getTime());
  294. return timestampnow;
  295. }
  296. catch (NullPointerException e) {
  297. return null;
  298. }
  299. };
  300.  
  301. }

DBUtil连接数据库的更多相关文章

  1. JDBC实例--通过连接工具类DBUtil +配置文件来获取连接数据库,方便又快捷

    根据前面的连接方法,还有缺点就是,如果人家要换数据库,还得改动源代码,然后还要编译什么的.这样客户修改也不容易. 做法:我们写一个配置文件,把该数据写在配置文件上面,然后通过类来加载改文件,然后读取相 ...

  2. JavaWeb——课程管理系统(2).java---18.11.29

    DaoFactory.java package com.jaovo.msg.Util; import com.jaovo.msg.dao.UserDaoImpl; public class DaoFa ...

  3. JAVA JDBC(存储过程和事务管理)

    1.什么是存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程 ...

  4. ArcSDE学习笔记--------增、删、改、查操作

    建立连接 package org.lq.ssm.gp.controller; import com.esri.sde.sdk.client.SeConnection; import com.esri. ...

  5. 利用sorket实现聊天功能-服务端实现

    工具包 package loaderman.im.util; public class Constants { public static final String SERVER_IP = " ...

  6. 链接数据库模板 DataBaseLinkTool

    一. 1.Dao层 对数据库的底层操作  增删改查 package Dao; import java.sql.Connection; import java.sql.ResultSet; import ...

  7. 学生选课系统(Java语言期末前测试)

      测试具体要求: 2.系统要求与功能设计 2.1 页面要求 (1)能够在Tomcat服务器中正确部署,并通过浏览器查看: (2)网站页面整体风格统一: (3)首页(登录页)要求实现不同用户登录后,进 ...

  8. JDBC连接数据库,结合DbUtil数据库连接工具类的使用

    (以Mysql数据库为例) 第一步:在项目里配置数据库驱动 Build Path->configure  Build Path ->Add Exteral JARs   将JDBC驱动包导 ...

  9. 连接数据库工具类DBUtil

    代码如下: import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; ...

随机推荐

  1. K8S搭建过程随笔_系统初始化

    组件 Kubernetes 1.14.2 Docker 18.09.6-ce Etcd 3.3.13 Flanneld 0.11.0 基础环境设置 192.168.11.188 k8s-master ...

  2. sklearn--模型的评价

    sklearn.metrics 1.MSE(均方误差)和RMSE(均方根误差),以及score() lr.score(test_x,test_y)#越接近1越好,负的很差 from sklearn.m ...

  3. linux kill某一用户的所有tomcat进程

    1.查看Tomcat进程 ps -ef|grep tomcat  显示当前所有进程: ps -ef|grep tomcat-web  进程中有不同的进程,查询全名,精准kill. 2.根据进程号kil ...

  4. iFrame跨域的方式

    4种通过iframe跨域与其他页面通信的方式 不同域下的iframe不能进行操作. 1.location.hash: 在url中,http://www.baidu.com#helloword的#hel ...

  5. 【django】另一种思路代替nginx 的rewrite

    需求:访问xx.com 跳转到xx.com/index 修改setting 同级别的urls.py 文件 from django.conf.urls import include, url from ...

  6. TestNG-Annotations

    @BeforeSuite The annotated method will be run before all tests in this suite have run.  @AfterSuite ...

  7. 【转】GO语言map类型interface{}转换踩坑小记

    原文:https://www.az1314.cn/art/69 ------------------------------------------ mapA := make([string]inte ...

  8. Spring入门篇——第6章 Spring AOP的API介绍

    第6章 Spring AOP的API介绍 主要介绍Spring AOP中常用的API. 6-1 Spring AOP API的Pointcut.advice概念及应用 映射方法是sa开头的所有方法 如 ...

  9. 根据xml文件生成javaBean

    原 根据xml文件生成javaBean 2017年08月15日 18:32:26 吃完喝完嚼益达 阅读数 1727 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出 ...

  10. OpenSSL 通过OCSP手动验证证书

    翻译:https://raymii.org/s/articles/OpenSSL_Manually_Verify_a_certificate_against_an_OCSP.html?utm_sour ...