JDBC基础

概念

JDBC:Java DataBase Connectivity (Java 数据库连接), Java语言操作数据库 。

JDBC本质:官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

步骤

添加maven依赖

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
</dependency>

或者直接导入驱动jar包。

注册驱动

//加载MySql驱动
Class.forName("com.mysql.jdbc.Driver")

获取数据库连接对象 Connection

为了方便,可以从properties文件中加载连接参数。

示例:

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class TestDB {
	
    public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
        Properties properties = new Properties();
        InputStream path = TestDB.class.getResourceAsStream("/database.properties");
        properties.load(path);
        String driver  = properties.getProperty("driver");
        String url = properties.getProperty("url");
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");

        Class.forName(driver);   //加载MySQL驱动
		
        Connection conn = DriverManager.getConnection(url, user, password);
    }
}

执行SQL语句

在执行SQL语句前,首先需要创建一个Statement对象。

Statement stat = conn.createStatement();

接着把要执行的SQL语句放入字符串中,例如:

String command = "UPDATE Books SET price = price - 5.00";

然后,调用executeUpdate方法:

stat.executeUpdate(command);   //返回受影响的行数

执行查询时使用executeQuery方法,会返回一个ResultSet类型的对象,通过它来遍历所查询的结果:

while (rs.next){
    ...
}

预备语句

我们没有必要在每一次查询时都建立新的查询语句,而是可以准备一个带有变量的查询语句,每次查询时填入不同的字符串就可以反复使用。在预备语句中,每个变量都用 “?” 来表示。例如:

String publisherQuery = "SELECT Books.Price,Books FROM Books,Publishers"
    +"WHERE Books.Publisher_Id = Publishers.Publisher_Id AND Publishers.Name = ?";
PreparedStatement stat = conn.prepareStatement(publisherQuery);

在执行预备语句之前,必须使用set方法将变量绑定到实际值上,针对不同的数据类型有不同的方法,在本例中设置一个字符串值:

stat.setString(1,publisher);  //1表示是赋予第一个?的值

使用预备语句还可以防止SQL注入问题。

释放资源

使用完ResultSet、Statement或Connection对象后,应立即调用close方法。这些对象都使用了规模较大的数据结构,会占用数据库服务器的有限资源。

可以使用带资源的try语句块自动释放资源。

事务

我们可以将一组SQL语句构建成一个事务。当所有语句都顺利执行后,事务可以被提交;否则,如果其中某个语句遇到错误,那么事务将被回滚到为执行过的状态。

默认情况下,数据库连接处于自动提交模式,即每个SQL语句一旦被执行便提交到数据库,无法回滚为原来的值,在使用事务时,要关闭这个默认值:

conn.setAutoCommit(false);

然后按照通常的方式执行SQL语句,如果执行没有出错,,则调用提交方法:

conn.commit();

如果出现错误,则调用:

conn.rollback();

当事务被SQLException异常中断时,典型的办法就是发起回滚操作。

保存点

使用保存点可以更细粒度地控制回滚操作。创建一个保存点意味着稍后回滚会返回这个点,而非放弃整个事务。例如:

Statement stat = conn.createStatement();
stat.excuteUpdate(command1);
Savepoint svpt = conn.setSavepoint();  //会返回到整个点
stat.excuteUpdate(command2);
if(...)
    conn.rollback(svpt);
...
conn.commit();
conn.releaseSavepoint(svpt);  //不需要时,应该释放它
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值