DBUtil连接数据库
1、 SQL server连接:
数据库不同架包就不同
SQL server 使用的架包是(sqljdbc4.jar)
2、 Mysql (MariaDB同理)
SQL server 使用的架包是(mysql-connector-java-5.1.17-bin.jar)
DBDRIVER = "com.mysql.jdbc.Driver";
DBURL = "jdbc:mysql://localhost:3306/mobilephonedb";
DBUID = "root";
DBPWD = "";
关于mysql后台写入数据乱码问题解决方式:
DBURL = "jdbc:mysql://localhost:3306/bookdb?useUnicode=true&characterEncoding=utf-8&";
因为java没有告诉mysql传过来的是什么类型的数据。
3、sqlite
SQL server 使用的架包是(sqlite-jdbc-3.21.0.jar)
DBDRIVER = "org.sqlite.JDBC";
//这里使用的是绝对路径
DBURL = "jdbc:sqlite:D:\\myphone.db";
下面是工具类
package com.dz.product.dao; import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Date;
public class DBUtil {
//连接对象
//Statement 命令对象
//打开连接
//关闭连接
//得到一个连接对象
//查询(有参,无参)
//修改(有参,无参) static Connection conn = null;
static Statement stmt = null;
static PreparedStatement pstmt=null; //驱动,服务器地址,登录用户名,密码
static String DBDRIVER;
static String DBURL;
static String DBUID;
static String DBPWD; static {
DBDRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
DBURL = "jdbc:sqlserver://localhost:1433;databasename=YerGoMallPro";
DBUID = "sa";
//DBPWD = "@zdm168168...";
DBPWD = "123456";//打开连接
}
public static void open() {
//加载驱动
try {
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUID,DBPWD); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
//关闭连接
public static void close() {
try {
if(stmt!=null)
stmt.close();
if(conn!=null && !conn.isClosed())
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//得到一个连接对象,当用户使用DBUtil无法解决个性问题时
//可以通过本方法获得连接对象
public static Connection getConnection() {
try {
if(conn==null ||conn.isClosed())
open();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
} //executeQuery
//executeUpdate
//execute
//获得查询的数据集
//select * from student where name='' and sex=''
public static ResultSet executeQuery(String sql) {
try {
open();//保证连接是成功的
stmt = conn.createStatement();
return stmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
} //修改表格内容
public static int executeUpdate(String sql) {
int result = 0;
try {
open();//保证连接是成功的
stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
close();
}
return result;
}
//如果执行的查询或存储过程,会返回多个数据集,或多个执行成功记录数
//可以调用本方法,返回的结果,
//是一个List<ResultSet>或List<Integer>集合
public static Object execute(String sql) {
boolean b=false;
try {
open();//保证连接是成功的
stmt = conn.createStatement();
b = stmt.execute(sql);
//true,执行的是一个查询语句,我们可以得到一个数据集
//false,执行的是一个修改语句,我们可以得到一个执行成功的记录数
if(b){
return stmt.getResultSet();
}
else {
return stmt.getUpdateCount();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(!b) {
close();
}
}
return null;
} //
//select * from student where name=? and sex=?
public static ResultSet executeQuery(String sql,Object[] in) {
try {
open();//保证连接是成功的
PreparedStatement pst = conn.prepareStatement(sql);
for(int i=0;i<in.length;i++)
pst.setObject(i+1, in[i]);
stmt = pst;//只是为了关闭命令对象pst
return pst.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
} public static int executeUpdate(String sql,Object[] in) {
try {
open();//保证连接是成功的
PreparedStatement pst = conn.prepareStatement(sql);
for(int i=0;i<in.length;i++)
pst.setObject(i+1, in[i]);
stmt = pst;//只是为了关闭命令对象pst
return pst.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
close();
}
return 0;
} public static PreparedStatement pstmt(String sql){
open();
try {
return pstmt = conn.prepareStatement(sql);
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return null;
} public static Object execute(String sql,Object[] in) {
boolean b=false;
try {
open();//保证连接是成功的
PreparedStatement pst = conn.prepareStatement(sql);
for(int i=0;i<in.length;i++)
pst.setObject(i+1, in[i]);
b = pst.execute();
//true,执行的是一个查询语句,我们可以得到一个数据集
//false,执行的是一个修改语句,我们可以得到一个执行成功的记录数
if(b){
System.out.println("----");
/*List<ResultSet> list = new ArrayList<ResultSet>();
list.add(pst.getResultSet());
while(pst.getMoreResults()) {
list.add(pst.getResultSet());
}*/
return pst.getResultSet();
}
else {
System.out.println("****");
List<Integer> list = new ArrayList<Integer>();
list.add(pst.getUpdateCount());
while(pst.getMoreResults()) {
list.add(pst.getUpdateCount());
}
return list;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(!b) {
System.out.println("====");
close();
}
}
return null;
}
//调用存储过程 proc_Insert(?,?,?)
public static Object executeProcedure(String procName,Object[] in) {
open();
try {
procName = "{call "+procName+"(";
String link="";
for(int i=0;i<in.length;i++) {
procName+=link+"?";
link=",";
}
procName+=")}";
CallableStatement cstmt = conn.prepareCall(procName);
for(int i=0;i<in.length;i++) {
cstmt.setObject(i+1, in[i]);
}
if(cstmt.execute())
{
return cstmt.getResultSet();
}
else {
return cstmt.getUpdateCount();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return null;
} /*
* 调用存储过程,并有输出参数
* @procName ,存储过程名称:proc_Insert(?,?)
* @in ,输入参数集合
* @output,输出参数集合
* @type,输出参数类型集合
* */
public static Object executeOutputProcedure(String procName,
Object[] in,Object[] output,int[] type){
Object result = null;
try {
CallableStatement cstmt = conn.prepareCall("{call "+procName+"}");
//设置存储过程的参数值
int i=0;
for(;i<in.length;i++){//设置输入参数
cstmt.setObject(i+1, in[i]);
//print(i+1);
}
int len = output.length+i;
for(;i<len;i++){//设置输出参数
cstmt.registerOutParameter(i+1,type[i-in.length]);
//print(i+1);
}
boolean b = cstmt.execute();
//获取输出参数的值
for(i=in.length;i<output.length+in.length;i++)
output[i-in.length] = cstmt.getObject(i+1);
if(b) {
result = cstmt.getResultSet();
}
else {
result = cstmt.getUpdateCount();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
} //时间转换
public static Date date(String date_str) {
try {
Calendar cal = Calendar.getInstance();//日期类
Timestamp timestampnow = new Timestamp(cal.getTimeInMillis());//转换成正常的日期格式
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");//改为需要的东西
ParsePosition pos = new ParsePosition(0);
java.util.Date current = formatter.parse(date_str, pos);
timestampnow = new Timestamp(current.getTime());
return timestampnow;
}
catch (NullPointerException e) {
return null;
}
}; }
DBUtil连接数据库的更多相关文章
- JDBC实例--通过连接工具类DBUtil +配置文件来获取连接数据库,方便又快捷
根据前面的连接方法,还有缺点就是,如果人家要换数据库,还得改动源代码,然后还要编译什么的.这样客户修改也不容易. 做法:我们写一个配置文件,把该数据写在配置文件上面,然后通过类来加载改文件,然后读取相 ...
- JavaWeb——课程管理系统(2).java---18.11.29
DaoFactory.java package com.jaovo.msg.Util; import com.jaovo.msg.dao.UserDaoImpl; public class DaoFa ...
- JAVA JDBC(存储过程和事务管理)
1.什么是存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程 ...
- ArcSDE学习笔记--------增、删、改、查操作
建立连接 package org.lq.ssm.gp.controller; import com.esri.sde.sdk.client.SeConnection; import com.esri. ...
- 利用sorket实现聊天功能-服务端实现
工具包 package loaderman.im.util; public class Constants { public static final String SERVER_IP = " ...
- 链接数据库模板 DataBaseLinkTool
一. 1.Dao层 对数据库的底层操作 增删改查 package Dao; import java.sql.Connection; import java.sql.ResultSet; import ...
- 学生选课系统(Java语言期末前测试)
测试具体要求: 2.系统要求与功能设计 2.1 页面要求 (1)能够在Tomcat服务器中正确部署,并通过浏览器查看: (2)网站页面整体风格统一: (3)首页(登录页)要求实现不同用户登录后,进 ...
- JDBC连接数据库,结合DbUtil数据库连接工具类的使用
(以Mysql数据库为例) 第一步:在项目里配置数据库驱动 Build Path->configure Build Path ->Add Exteral JARs 将JDBC驱动包导 ...
- 连接数据库工具类DBUtil
代码如下: import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; ...
随机推荐
- dropbear源码编译安装及AIDE软件监控
ssh协议的另一个实现:dropbear源码编译安装:• 1.安装开发包组:yum groupinstall “Development tools”• 2.下载 -2017.75.tar.bz2 ...
- Educational Codeforces Round 40 C. Matrix Walk( 思维)
Educational Codeforces Round 40 (Rated for Div. 2) C. Matrix Walk time limit per test 1 second memor ...
- MyBatis-07-分页
7.分页 思考:为什么要分页? 减少数据的处理量 7.1.使用Limit分页 select * from user limit startIndex,pageSize 使用Mybatis实现分页,核心 ...
- GenericJDBCException: could not execute statement 错误解决
"message":"could not execute statement; nested exception is org.hibernate.exception.G ...
- [NOI2016]循环之美——结论+莫比乌斯反演
原题链接 好妙的一道神仙题 题目大意 让你求在\(k\)进制下,\(\frac{x}{y}\)(\(x\in [1,n],y\in [1,m]\))中有多少个最简分数是纯循环小数 SOLUTION 首 ...
- iOS native plugin 的代码sample
https://bitbucket.org/Unity-Technologies/iosnativecodesamples/src/stable/ 不在这个stable版本 在2017 dev这个版本
- Hivesql中的正则
================================================================================================= 一般 ...
- 在linux操作系统上进行简单的C语言源码的gcc编译实验
尝试在linux上用gcc 而非封装完好的codeblocks,vs等ide 来编译c和cpp源程序 首先查看我的gcc版本,我的是VM centos 自带的,没有的话得自行安装,安装上gcc就可以在 ...
- 修改tomcat控制台的标题
Tomcat的bin目录下,创建一个名为setenv.bat的文件. setenv.bat 编辑内容 : set TITLE = 想要命名的标题名称 保存修改.重新启动. 第二种. 修改tomca ...
- Robot Framework(七)创建用户关键字
2.6创建用户关键字 关键字表用于通过将现有关键字组合在一起来创建新的更高级别关键字.这些关键字称为用户关键字,以区别于 测试库中实现的最低级库关键字.创建用户关键字的语法与创建测试用例的语法非常接近 ...