java篇:jdbc

概述

Java数据库连接(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

导入驱动程序

在一个java程序中,如果需要使用jdbc进行连接数据库的操作,则需要导入对应数据库的驱动程序。
以MySQL为例,在MySQL的官网下载JDBC(mysql-connector-java,注意版本号需要与数据库的版本号一致),将jar包添加到java项目的lib中即可。

jdbc的示例操作流程

1.加载驱动程序

数据库的驱动程序是实现了Driver接口的类,它一般由数据库厂商提供。加载JDBC驱动程序最常用的方法是使用Class类的forName()静态方法。该方法的声明格式为:

public static Class<?> forName(String className)
                        throws ClassNotFoundException

参数className为字符串表示的完整的驱动程序类名。例如,对于MySQL,获取方法为:

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

Class.forName()属于反射机制,也就是获取相关类名的类对象并加载如内存中。后续的连接获取就是通过数据库URL查找已经加载的实现Driver接口的类,这个过程被形象地称为“注册”。因为类仅能被加载到内存一次,因此多次注册驱动程序不会出现重复注册的情况。

2.建立连接对象

驱动程序加载成功后应使用DriverManager类的getConnection()建立数据库对象。该方法的声明如下(未写异常抛出):

public static Connection getConnection(String dburl);
public static Connection getConnection(String dburl, String user,String password);

其中dburl表示JDBC URLuser表示数据库用户名,password表示密码。DriverManager类试图从注册的驱动程序中选择一个合适的驱动程序,然后建立到给定的JDBC URL的连接。如果不能建立连接则抛出SQLException异常。

3.创建数据库语句对象

获取到Connection之后,可以从连接中创建数据库SQL语句对象以及在连接对象上完成相关的操作。连接对象有两种:语句对象Statement和预处理对象PreparedStatement
1)Statement
Connection创建Statement对象:

Statement statement = conn.createStatement();

在执行statement语句时,需要在execute时添加语句。

2)PreparedStatement(常用)
Connection创建PreparedStatement对象:

PreparedStatement pstmt = conn.prepareStatement("select * from user"); // 需要附带sql语句

在执行statement语句时,不应在execute时添加语句。

4.执行语句/获取结果集

对于PreparedStatement语句,执行语句可以用如下方法:

ResultSet rs = pstmt.executeQuery(); // SELECT语句
int n = pstmt.executeUpdate(); // DDL语句(INSERT、DELETE、UPDATE等)

对于Statement对象,需要添加参数写入数据库语句。

5.释放对象

Connection接口、Statement接口、ResultSet接口都定义了close()。当这些对象使用完毕后应使用close()关闭。

示例代码:查询一张数据表中的用户信息

一个简单的示例代码如下,其中操作的数据库是MySQL
为了代码的简洁,异常我在这里直接抛出。实际操作时建议使用try-catch捕获并处理。

public static void main(String[] args) throws ClassNotFoundException, SQLException{
    Connection conn = null;
    String driver = "com.mysql.cj.jdbc.Driver";
    String dburl = "jdbc:mysql://127.0.0.1:3306/database?userSSL=true"; // 这句话表示连接127.0.0.1:3306(本机默认的数据库)的数据库database,使用SSL模式
    String username = "root"; // root为最高权限用户,不推荐做项目使用
    String password = "123456";
    
    Class.forName(driver); // 加载驱动程序
    conn = DriverManager.getConnection(dburl,username,password); // 获取连接对象
    
	String sql = "select name,password from user where name=?";
    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setString(1,"张三");
    ResultSet rs = pstmt.executeQuery();

    while(rs.next()) {
        String name = rs.getString("name");
        String password = rs.getString("password");
        System.out.println("name" + "password");
    }

	rs.close();
	pstmt.close();
	conn.close();
}

一些对象的补充

各种数据库的Connection对象的获取方法

其中dbServerIP代表连接的数据库的IP地址

数据库驱动名称数据库URL
MySQLcom.mysql.cj.jdbc.Driverjdbc:mysql://dbServerIP:3306/dbName
Oracleoracle.jdbc.driver.OracleDriverjdb:oracle:thin:@dbServerIP:1521:ORCL
SQL Servercom.microsoft.jdbc.sqlserver.SQLServerDriverjdbc:microsoft:sqlserver://dbServerIP:1433;databaseName=master
PostgreSQLorg.postgresql.Driverjdbc:postgresql://dbServerIP/dbName

PreparedStatement 预处理对象

设置占位符参数

PreparedStatement创建时传入的sql语句,可以用 ? 代替需要输入数据的地方,然后使用setXXX语句设置这部分的值。其中setXXX中的XXX表示类型。例如:

pstmt.setString(1,"小明"); // 把第一个占位符的位置设置成字符串小明
pstmt.setInt(3,123); // 把第三个占位符的位置设置成整型数字123

事务/批处理

以下是使用PrepareStatement对象进行批处理的典型步骤顺序:

  1. 使用占位符创建SQL语句。
  2. 使用prepareStatement()方法创建PrepareStatement对象。
  3. 使用setAutoCommit()将自动提交设置为false
  4. 使用addBatch()方法在创建的Statement对象上添加SQL语句到批处理中。
  5. 在创建的Statement对象上使用executeBatch()方法执行所有SQL语句。
  6. 最后,使用commit()方法提交所有更改。

如果中途操作有误,可以使用rollback()进行回滚。

这部分参考教程:https://www.yiibai.com/jdbc/preparestatement-batching-example.html

ResultSet 结果集

对于结果集对象,比较常用的操作方法有两类:next()getXXX()
next()类似于Iterator遍历器,将结果集的数据指针指向下一个位置,如果下一个位置没有元素,返回false,否则返回true。通常用下面的语句进行遍历:

while(rs.next()) {
	// TODO
}

getXXX()类似于上文的setXXX,不同的是,get也可以用select返回的字段的名称获取当前行当前字段的值。例如:

rs.getString(1); // 以字符串形式获取第一个参数
rs.getInt("userid"); // 获取整型的userid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值