JDBC:Java是怎么勾搭上MySQL数据库的?

JDBC:Java如何连接MySQL数据库的?

步骤:

  • 先导入jar包:
    *在项目下面创建一个文件libs,把jar包复制进来,注意要右键buid path 点击 add to build path,否则会报错:java.lang.ClassNotFoundException
    在这里插入图片描述
    *可以在网上下载这个jar包,版本很多

1. 加载数据库驱动
//加载MySQL的驱动 ,使用反射
Class.forName("com.mysql.jdbc.Driver");
2. 通过DriverManager获得数据库连接
//准备工作
String url = "jdbc:mysql://127.0.0.1:3306/students";//url-->MySQL的url
String user = "root";//user-->MySQL的用户名
String password = "root";//password-->MySQL的密码
//使用DriverManager获得数据库的连接
Connection conn = DriverManager.getConnection(url,user,password);
3. 通过Connection对象创建Statement对象,用于向数据库发送SQL语句
Statement stmt = conn.createStatement();
4. 向数据库发送SQL语句
//通过Statement对象得到返回结果
ResultSet rs = stmt.executeQuery("sql语句");//sql为查询语句
int updateSum = stmt.executeUpdate("sql语句");//sql为增加、修改、删除语句
5. 操作结果集
//如果执行的是查询语句,返回ResultSet对象
while(rs.next()){
	rs.getString("放列名");
	rs.last();
	...
}
6. 回收数据库资源
//关闭,注意顺序
rs.close();
stmt.close();
conn.close();

解析:

JDBC的全称是 Java Database Connectivity,即Java数据库连接,是一种可以执行SQL语句Java API。程序可以通过JDBC API 连接到关系数据库,如MySQL、Oracle、DB2等,并使用结构化查询语句(数据库标准查询语句)来完成对数据库的查询、更新等操作

一、为什么要使用JDBC?

当下有很多不同的数据库,其内部特性都不相同,如果没有JDBC,程序员要操作不同的数据库,就要学习和使用不同的API ,如下示意图:

后来Sun公司制定了一组标准的API,它只是接口,没有提供实现类——这些实现类由各数据库厂商提供实现类,也就是驱动程序。使用了JDBC之后,只要面向JDBC API编程,当用不同的数据库,更换不同的数据库驱动就好了,既可以实现跨数据库,还可以跨平台,而而不需要进行程序的修改,具有非常好的移植性。如下示意图:

二、JDBC连接过程细节?

1. 加载驱动

加载驱动一般使用Class类的forName()静态方法来加载驱动,格式为:

Class.forName(driverClass);

加载驱动时并没有真正的使用数据库的驱动类,只是使用了数据库驱动类名的字符串,其中MySQL和Oracle的如下:

MySQL的:Class.forName("com.mysql.jdbc.Driver");
Oracle的:Class.forName("oracle.jdbc.driver.OracleDriver");
2. 通过DriverManager获得数据库的连接,得到一个Connection对象
String url = "jdbc:mysql://127.0.0.1:3306/students";

解释如下:

jdbc:mysql----表示用jdbc连接MySQL数据库
localhost------表示本机服务器默认地址(127.0.0.1也可以)
3306-----MySQL默认端口号,端口号可以修改
students-----数据库名字;
root  root-----自己数据库的账号密码

DriverManager是用于管理JDBC驱动的服务类,主要作用是获得Connection对象,用于连接,源码如下:

public static Connection getConnection(String url,
   java.util.Properties info) throws SQLException {
   return (getConnection(url, info, Reflection.getCallerClass()));
}
3. 通过Connection创建Statement对象,得到Statement对象

Connection:代表数据库连接对象,要访问数据库,必须先获得数据库的连接,有如下方法:

public interface Connection  extends Wrapper, AutoCloseable {
    Statement createStatement() throws SQLException;

    PreparedStatement prepareStatement(String sql)
        throws SQLException;
        
    CallableStatement prepareCall(String sql) throws SQLException;
    ......

上面三个方法都返回用于执行SQL语句的Statement对象,其中createStatement、prepareStatementStatement的子类

4. 向数据库发送SQL语句

Statement:用于执行SQL语句的工具接口。有如下方法:

//只能用于执行查询语句
ResultSet executeQuery(String sql) throws SQLException;
//执行DML语句,返回受影响的行数;执行DDL语句,返回0
int executeUpdate(String sql) throws SQLException;
//可以执行任何SQL语句,结果为ResultSet,返回true;否则返回false
boolean execute(String sql) throws SQLException;

PrepareStatement:预编译的Statement对象,是Statement的子接口。
注意:拥有Statement的所有方法,而且性能更好!推荐使用!

5. 操作结果集

ResultSet:结果集对象,是一个接口,包含访问查询结果的方法,如下源码:

public interface ResultSet extends Wrapper, AutoCloseable {
	boolean next() throws SQLException;
	void close() throws SQLException;
	....
}

这些方法都可以通过列索引或者列名获得数据,有如下方法来移动记录指针

void close();释放ResultSet对象
void afterLast();将ResultSet的记录指针定位到最后一行
boolean next();将Result的记录指针定位到下一行,如果移动后指向有效数据,返回true
boolean last();将Result的记录指针定位到最后行,如果移动后指向有效数据,返回true
......
发布了3 篇原创文章 · 获赞 5 · 访问量 111

猜你喜欢

转载自blog.csdn.net/tanghaixu/article/details/105462652