Java后台之路(04)-JDBC

JDBC概述

首先,我要知道JDBC是个啥东东?是sun公司提供的利用java语言操作数据库的标准。我的理解就是java世界中的sql工具类。

那它的优点在什么地方,我个人觉得就像是面向对象的思想,我不管你的实现只管api就好,我就知道你提供了诸多api供我直接操作数据库,而不用担心我操作的是mysql也好oracle也罢,它们对我的区别就是加载的驱动不同…

JDBC的几个核心类:

  • DriverManager,
  • Connection,
  • Statement,
  • ResultSet,

JDBC的套路:

  • 加载驱动;
  • 建立连接;
  • 创建Statement对象;
  • 执行sql语句;
  • 处理结果集;
  • 关闭资源。

我们来提供一个简单示例:

private final String URL = "jdbc:mysql://127.0.0.1:3306/mydatabase?characterEncoding=utf8&useSSL=true";
private final String USER = "root";
private final String PASSWORD = "root";

private final String QUERY = "select studentid,studentname from student";

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

// 建立连接
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);

// 创建Statement对象
Statement state = conn.createStatement();

// 获取结果集
ResultSet set = state.executeQuery(QUERY);

// 处理结果
while(set.next()){
    //...
}

// 关闭连接
conn.close();

JDBC常用类和接口

1. java.sql.DriverManager类

用于加载驱动和建立数据库连接。

Class.forName("com.mysql.jdbc.Driver");
DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydatabase”,”root”, “root”);

其中jdbc表示协议,mysql表示子协议,localhost代表IP,3306表示端口号,mydatabase表示要连接的数据库,第一个root表示用户名,第二个root表示密码。这些值是我示例中的配置,在项目中使用时请替换这些值。

2. java.sql.Connection类

它是一个接口用于和数据库进行交互,在各数据库驱动中都实现了该接口,它最常用的场景用于执行创建SQL语句。

conn.createStatement();
conn.close();

3. java.sql.Statement类

接口用于操作SQL语句并返回相应的结果集,在各数据库驱动中都实现了该接口。

  • executeQuery(String sql) ,该方法用于执行select语句并根据查询语句返回结果集;
  • executeUpdate(String sql) ,该方法用于执行insert、update、delete语句并返回受影响的行数;
  • execute(String sql) ,此方法可以执行任意SQL语句。当且仅当执行select语句且有返回结果时该方法返回true, 其他情况下该方法返回false。

4. java.sql.ResultSet

用于保存执行SQL语句之后得到的结果集;各数据库驱动中均实现了该接口。ResultSet对外暴露一个游标,该游标默认指向结果集第一行之前。

ResultSet cursor;

// 向后移动一行
boolean next();

// 向前移动一行
boolean previous();

// 将光标移动到末尾,正好位于最后一行之后
void afterLast();

// 将光标移动到开头,正好位于第一行之前
void beforeFirst();

// 根据序号取值,索引从1开始
Object getObject(int index);

// 根据列名取值
Object getObject(String ColomnName);

// 获取该条数据的int值,根据索引/列名
int getInt(int colIndex);
int getInt(String colName);

// 获取该条数据的float值,根据索引/列名
int getFloat(int colIndex);
int getFloat(String colName);

// 获取该条数据的String值,根据索引/列名
int getString(int colIndex);
int getString(String colName);

// 获取该条数据的Date值,根据索引/列名
int getDate(int colIndex);
int getDate(String colName);

// 关闭ResultSet对象
void close();

5. preparedStatement防止SQL注入

preparedStatement(预编译对象)是Statement的子类,看看例子就懂了。

Connection conn = null;
PreparedStatement pState = null;
ResultSet set = null;

private final String QUERY = "select * from student where studentid=?"

public Student getStudent(int studentId){
    DBUtil.connection();
    pState = conn.prepareStatement(QUERY);
    pstate.setInt(1, studentId);
    set = pstate.executeQuery();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值