开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情
JDBC原理及使用Statement访问数据库
1.JDBC: Java DataBase Connectivity 可以为多种关系型数据库DBMS提供统一的访问方式,用Java来操作数据库
1.JDBC API:提供各种操作访问接口 Connection Statement PreparedStatement ResultSet
2.JDBC DriverManager:管理不同的数据库驱动
3.各种数据库驱动:相应的数据库厂商提供的(第三方公司提供),连接/直接操作数据库
2.JDBC API主要功能:
三件事,具体是通过以下类/接口实现:
DriverManager:管理JDBC驱动
Connection:连接(通过DriverManager产生)
Statement(PrepareStatement):增删改查(通过Connection产生)
CallableStatement:调用数据库中的 存储过程/存储函数(通过Connection产生)
Result:返回的结果集(上面的Statement等产生)
Connection产生操作数据库的对象:
Connection 产生Statement对象:createStatement();
Connection 产生PrepareStatement对象:createprepareStatement();
Connection 产生CallableStatement对象:prepareCall();
Statement操作数据库:
增删改:executeUpdate();
查询:executeQuery();
ResultSet:
保存结果集:select * from xxx;
next():
光标下移
判断是否有下一条数据;true/false
previous():
光标上移
判断是否有下一条数据;true/false
getXXX(字段名|位置):
获取具体有字段值
PreparedStatement操作数据库:
public interface PreparedStatement extends Statement
因此
增删改:executeUpdate();
查询:executeQuery();
此外
赋值操作:setXXX();
3.JDBC访问数据库的具体步骤:
a.导入驱动 ,加载具体的驱动类
b.与数据库建立连接
c.发送sql,执行
d.处理结果集(查询)
4.数据库驱动
| 驱动jar | 具体驱动类 | 连接字符串 | |
|---|---|---|---|
| Oracle | ojdbc-x.jar | oracle.jdbc.OracleDriver | jdbc.oracle:thin:@localhost:1521:ORCL |
| MySQL | mysql-connector-java-x.jar | com.mysql.jdbc.Driver | jdbc:mysql://localhost:3306/数据库实例名 |
| SqlServer | sqljdbc-x.jar | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:microsoft:sqlserver:localhost:1433;databasename=数据库实例名 |
5.MySQL示例
ResultSet类似一张表
<——rs
1 zs
2 ls
3 ww
next():
1.下移
2.判断下移之后的元素是否有数据
如果有数据:true
为空:false
getXXX()
rs.getXXX();
获取rs指向行的数据
example:
getInt();
getString();
getDate();
Statement增删改、查示例
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCDemo {
private static final String URL="jdbc:mysql://localhost:3306/stulist";
public static void update(){//增删改
Statement stmt=null;
Connection conn=null;
try {
//a.导入驱动,加载具体的驱动类
Class.forName("com.mysql.jdbc.Driver");//加载具体的驱动类
//b.与数据库建立连接
conn = (Connection) DriverManager.getConnection(URL,"root","qq20010404");
//c.发送sql,执行(增删改、查)
stmt = conn.createStatement();
String sql="insert into stuinfo values('John','2001-04-04',2019102120)";
//执行
int count=stmt.executeUpdate(sql);//返回值表示 增删改 几条数据
//d.处理结果
if (count>0) {
System.out.println("操作成功!");
}
}catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if(stmt!=null) {
stmt.close();//对象.方法
}
if(conn!=null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void query() {
Statement stmt=null;
Connection conn=null;
ResultSet rs=null;
try {
//a.导入驱动,加载具体的驱动类
Class.forName("com.mysql.jdbc.Driver");//加载具体的驱动类
//b.与数据库建立连接
conn = (Connection) DriverManager.getConnection(URL,"root","qq20010404");
//c.发送sql,执行(查)
stmt = conn.createStatement();
String sql="select * from stuinfo";
//执行
rs=stmt.executeQuery(sql);//返回值表示 增删改 几条数据
//d.处理结果
while(rs.next()) {
String stuName=rs.getString("name");
Date btd=rs.getDate("birthday");
int stuNum=rs.getInt("num");
//下标:从1开始计数,不推荐
// String stuName=rs.getString(1);
// Date btd=rs.getDate(2);
// int stuNum=rs.getInt(3);
System.out.println(stuName+" "+btd+" "+ stuNum);
System.out.println("----------------------------------------");
}
}catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if(rs!=null) {
rs.close();
}
if(stmt!=null) {
stmt.close();//对象.方法
}
if(conn!=null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws ClassNotFoundException, SQLException {
query();
}
}