JDBC的开发步骤以及连接的简单封装

来源:互联网 发布:eve捏人美女数据 编辑:程序博客网 时间:2024/06/01 10:04

jdbc的开发步骤以及封装连接

jdbc是一个规范:所有数据库开发厂商对这个规范进行编程,这样Java程序员就不用考虑众多数据库语法问题等等,
jdbc也是一组API,它提供了连接数据库的Connection接口,声明连接的Statement,以及增强的preparedStatment接口(继承Statment);
以上两点让对jdbc编程更加简单,跨数据库

下面介绍jdbc开发的基本步骤

1. 加载驱动(提前要引入数据库驱动的jar包,本文以MySQL为例):

Class.forName("com.mysql.jdbc.Driver")

注:JDBC4以上此句话可以省略,会自动加载;
主要功能
Class.forName(xxx.xx.xx)返回的是一个类
Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类
记不住这句话的童鞋可以这样记com.mysql.jdbc是MySQL公司的包名,Driver是具体的驱动类

2. 获取连接
Connection conn = DriverManger.getConnection("jdbc:mysql://localhost:3306/DatabaseName?useSSL=false","root","123456")
DriverManger管理一组 JDBC 驱动程序的基本服务。
jdbc连接数据库底层使用的是TCP协议;所以url格式为getConnection第一个参数;
名词解释 : (jdbc(协议):mysql(子协议)://localhost(本地数据库地址):3306(MySQL默认端口号)/DatabaseName(数据库名称,以自己的为例));
root数据库连接名;123456:数据库密码;这个是自己看自己的配置,和本文不一样哦;
3. 获得声明
Statment stmt=conn.createStatment();
4. 执行
stmt.execute(sql);可执行DDL,DML,如果有返回记录,则返回值为true,否则返回为false
stmt.executeUpdate(sql);可执行update,delete,insert.返回值为int,更新或者删除的条数,
stmt.executeQuery(sql):查询方法:返回值为ResultSet

5. 返回结果
如果是查询:返回ResultSet;
6. 关闭连接
数据库连接数量有限,所以用完要关闭
stmt.close();
conn.close();

下面介绍对jdbc连接的简单封装

首先写一下我的思路:对JDBC程序的步骤进行分析:

  1. 加载驱动:一个工程只需要加载一次:所以封装
  2. 获取连接:配置文件不太需要改动,无需每次写,所以封装;
  3. 获取声明:sql语句每次需要手动写,所以不能封装
  4. 返回结果集:可以从需要的封装方法获取
  5. 关闭连接:获取连接之后,需要关闭资源,所以封装

1.封装connection
`package com.tangbaobao.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
* @author 唐学俊
* @version 创建时间:2017年10月21日 下午5:00:17
* 封装连接数据库
*/
public class DaoConnection {
//获取连接
public static Connection getConnection() {
String url=”jdbc:mysql://localhost:3306/jdbc_test”;
String DatabaseName=”root”;
String DatabasePassword=”123456”;
Connection conn=null;
try {
//1.加载驱动
Class.forName(“com.mysql.jdbc.Driver”);
//2.获取连接
conn = DriverManager.getConnection(url,DatabaseName,DatabasePassword);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}

}
 
2.封装查询以及更新方法(preparedStatement)
package com.tangbaobao.utils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* @author 唐学俊
* @version 创建时间:2017年10月21日 下午8:09:30
*
*/
public class QueryList {
Connection conn = null;

// 初始化连接public QueryList(Connection conn) {    if (conn != null) {        this.conn = conn;    } else {        new Exception("请先获取连接");    }}// 声明连接public boolean updateQuery(String sql, Object... params) throws Exception {    boolean isUpdate = false;    int index = 0;    PreparedStatement pstmt = null;    try {        pstmt = conn.prepareStatement(sql);        if (regexInput(sql, params)) {            // 传递参数            for (Object o : params) {                index++;                pstmt.setObject(index, o);            }            // 执行            int execute = pstmt.executeUpdate();            if (execute != 0) {                isUpdate = true;            }        }    } catch (SQLException e) {        e.printStackTrace();    } finally {        pstmt.close();        conn.close();    }    return isUpdate;}/** * 返回查询的条数 *  * @param sql * @param params * @return */// 查询方法public int selectQuery(String sql, Object... params) {    int query = 0;    int index = 0;    PreparedStatement pstmt = null;    try {        pstmt = conn.prepareStatement(sql);        if (regexInput(sql, params)) {            for (Object o : params) {                index++;                pstmt.setObject(index, o);            }            // 执行            ResultSet execute = pstmt.executeQuery();            // 返回结果            while (execute.next()) {                query++;            }        }    } catch (SQLException e) {        e.printStackTrace();    } catch (Exception e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    return query;}// 匹配sql中的占位符/** * 匹配字符串中目标字符的个数 *  * @param str传入的字符串 * @param regexChar匹配的字符 * @return */public int regexChar(String str, char regexChar) {    String partten = "\\" + regexChar + "";    Pattern compile = Pattern.compile(partten);    Matcher matcher = compile.matcher(str);    int count = 0;    while (matcher.find()) {        count++;    }    return count;}// 占位符和输入项是否匹配private boolean regexInput(String sql, Object[] params) throws Exception {    boolean flag = false;    // 解析sql中的占位符    int regexChar = regexChar(sql, '?');    // 判断输入参数长度和占位符个数是否相等    if (params.length != regexChar) {        throw new Exception("输入参数和sql语句中参数不匹配,输入为" + params.length + "sql占位符为:" + regexChar);    } else {        flag = true;    }    return flag;}

}

3.测试
package com.tangbaobao.Contraller;

import java.util.Scanner;

import com.tangbaobao.service.LoginService;

/**
* @author 唐学俊
* @version 创建时间:2017年10月21日 下午4:41:38
* 登录校验模块
*/
public class Login {
String username;
String password;
//初始化用户名,密码
public Login(String username,String password) {
this.username=username;
this.password=password;
boolean success = isSuccess(username, password);
if(success) {
System.out.println(“登录成功”);
}else {
System.out.println(“用户名或密码错误”);
}
}

//校验用户民密码是否正确方法public boolean isSuccess(String username,String password) {    boolean flag=false;    LoginService service = new LoginService();    flag=service.checkLogin(username,password);    return flag;}

//测试
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println(“请输入用户名”);
String username = sc.next();
System.out.println(“请输入用密码”);
String password = sc.next();
Login login=new Login(username, password);
}
}

package com.tangbaobao.service;

import com.tangbaobao.dao.LoginDao;

/**
* @author 唐学俊
* @version 创建时间:2017年10月21日 下午4:52:26
* 业务逻辑处理
*/
public class LoginService {

public boolean checkLogin(String username, String password) {    //没有业务处理,将请求传递到dao层    LoginDao dao = new LoginDao();    boolean isExist=false;    try {        isExist = dao.checkLogin(username,password);    } catch (Exception e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    return isExist;}

}

package com.tangbaobao.dao;

import com.tangbaobao.utils.DaoConnection;
import com.tangbaobao.utils.QueryList;

/**
* @author 唐学俊
* @version 创建时间:2017年10月21日 下午4:55:22
* 数据业务处理
*/
public class LoginDao {
//校验用户名密码是否存在方法
public boolean checkLogin(String username, String password) throws Exception {
//1.加载驱动,获取连接
QueryList query =new QueryList(DaoConnection.getConnection());
//2.书写sql语句
String sql=”select * from user where username=? and password=?”;
//返回结果
int updateQuery = query.selectQuery(sql,username,password);
return updateQuery>0?true:false;
}
}

`

原创粉丝点击