java 连接数据库的步骤
1.加载驱动
Class.forName(数据库驱动名);
java 中的数据库驱动名:“com.mysql.jdbc.Driver”
JavaSE项目中可以省略 , JavaWeb项目必须编写此步骤
2.建立数据库连接
使用DriverManager类的getConnection()静态方法来获取数据库的连接对象,语法如下:
Conncetion conn = DriverManager.getConnection(String url,String username,String password);
url --> 数据库连接的字符串,字符串的连接格式: 主协议:子协议://ip地址:端口号/数据库名称 //
username --> 数据库的账号
password --> 数据库的密码
- mysql的连接地址:“jdbc:mysql://localhost:3306/company?useUnicode=true&charcterEncoding=uft-8”,“root”,“123”
- oracle的连接地址: jdbc:oracle:thin:@localhost:1521:ORCL
3.创建Statement对象
想对数据库进行操作,就必须执行sql语句。在java中,想给数据库传输sql语句,就要使用Statement对象进行封装,才能发送给数据库。但Statement也不是直接调用的,而是通过Connection对象所提供的方法来创建各种Statement对象的。语法如下:
- 执行静态SQL语句,通常通过Statement实例实现;
- 执行动态SQL语句,通常通过PreparedStatement实例实现;
- 执行数据库存储过程,通常通过CallableStatement实例实现。
具体的实现方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql);
CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}");
4.执行sql语句
获取Statement对象后,就要开始执行sql语句了。这时候就可以调用对象的不同方法来对数据库进行操作。如果其中产生了结果集,就要对结果集进行封装,在java中,是使用ResultSet类来对结果集进行封装的,且会返回一个结果集对象。
Statement接口的三种方法
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute。
- ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象;
- int executeUpdate(String sqlString):用于执行INSERT、UPDATE或 DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等;
- execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
具体实现的代码:
ResultSet rs = stmt.executeQuery("sql语句") ;
int rows = stmt.executeUpdate("sql语句") ;
boolean flag = stmt.execute(String sql) ;
5.使用结果集
结果集一般分为两种情况:
- 执行更新返回的是本次操作影响到的记录数;
int row = state.executeUpdate();
- 执行查询返回的结果是一个ResultSet对象。
while(rs.next()){
String name1 = rs.getString("name") ;
String name2 = rs.getString(1) ;
}
上面这两行代码执行的目的都是一样的,获取数据库中的name字符的数据,但获取name2的速度比name1的速度快。(列是从左往右的,从1开始的)
6.关闭数据库
- 关闭结果集; rs.close();
- 关闭Statement对象; state.close();
- 关闭conn连接。coon.close();
DAO工厂
1.设计DAO接口
public interface IDao {
public void createMethod();
}
在里面设计增、删、改、查的抽象方法
2.设计接口的实现类DAOJdbc
public class DaoJdbc implements IDao {
@Override
public void createMethod() {
System.out.println("DaoJdbc::create()");
}
}
3.设计单例的工厂
单例DAO工厂的特点:
- 单例类只能有一个实例;
- 单例类必须自己给自己创建一个唯一的实例;
- 单例类必须给所有其他对象提供这一实例
public class DaoFactory {
//1.私有化构造函数,不能让外界进行对象创建
private DaoFactory(){
}
//2.这个类必须自动向整个系统提供这个实例对象
public static DaoFactory getDaoFactory(){
return daoFactory;
}
//3.单例类必须执行创建
private static DaoFactory daoFactory;
public IDao getDao(){
//项目总根据需求对这里的内容进行修改,决定工厂提供什么样的产品
return new DaoJdbc();
}
}
4.业务层
ublic class Service {
public void create(){
DaoFactory daoFactory = DaoFactory.getDaoFactory();
IDao iDao = daoFactory.getDao();
iDao.create();
}
5.测试函数
public class Demo1 {
public static void main(String[] args) {
Service ser = new Service();
ser.createMethod();
}
}