JDBC:Java连接MySQL数据库(原生)
本文的环境是Windows10 64位 ,MySQL的版本是MySQL 5.6 ,JDBC最原始的连接方法,虽然做项目的时候,基本可以不写这些代码,但是过程还是要知道
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、prepareStatement是Statement的子类
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
......