- JDBC是什么?java database connectivity(java连接数据库)
- JDBC的本质是什么?JDBC本质上是sun公司制定的一套接口,位于java.sql.*下。我们知道,接口有实现者和调用者,各大数据库公司实现JDBC接口(这些实现代码就叫做驱动),我们开发者只需要调用JDBC接口即可实现java连接到各类数据库。
- java官方并没有提供JDBC各个公司的实现,我们需要到各个数据库公司下载他们的驱动(JDBC实现类),导入后即可通过JDBC调用各个数据库公司的数据库。
- eclipse导入jar包:在对应项目处右键 ->Build Path ->Add External Archives ->选择你下载好的jdbc驱动包.jar ->打开
java连接MySql初级示例
import java.sql.*;
public class Main {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String url = "jdbc:mysql://127.0.0.1:3306";
String user = "root";
String password = "123456";
try {
// 1. 注册驱动(作用:告诉java程序,即将连接的是哪个公司的数据库)
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
// 2. 获取连接(表示JVM进程和数据库进程之间的通道打开了,属于进程间通信,使用完后记得关闭)
// url是统一资源定位符,表示网络中某一资源的绝对路径,包括协议、IP、Port、资源名 ,格式为协议://ip:port/资源名
// 这里使用的协议为jdbc:mysql,本机ip地址为127.0.0.1,mysql端口为3306,可以不指定访问资源,也可以指定为某一个database
conn = DriverManager.getConnection(url, user, password);
// 3. 创建数据库操作对象(Statement类的对象用于执行sql语句的对象)
stmt = conn.createStatement();
// 4. 执行sql语句(DDL、DQL、DML等操作)
// executeUpdate用来处理增删改,返回受到影响的行数
// executeQuery用来处理查
String sql = "select * from DatabaseName";
rs = stmt.executeQuery(sql);
// 5. 处理查询结果(只有执行的是DQL才需要该步骤,因为若没有查询则没有查询结果)
while (rs.next()) {
// 无论数据库中的数据类型是什么,一律返回string
// JDBC中所有的下标从1开始
// 获取第1,2,3,列
// 可以按照第几列访问,也可以按照列名或查询语句指定的别名处理
System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3));
System.out
.println(rs.getString("id") + "\t" + rs.getString("amount") + "\t" + rs.getString("password"));
}
} catch (Exception e) {
e.printStackTrace();
System.out.print("连接失败");
} finally {
// 6. 释放资源,从小到大关闭,需要先判断是否为null,避免空指针异常(关闭JVM和数据库的通信)
// 这里不要一起try,否则若在某一处发生异常,会直接进入到catch语句块中,后面的资源就没有关闭
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
类加载的方式注册驱动
import java.sql.*;
public class Main {
public static void main(String[] args) {
// 这是连接sql sever的相关设置
// String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
// String url = "jdbc:sqlserver://localhost:1433;DatabaseName=DW";
// String user = "sa";
// String password = "123456";
String driverName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306";
String user = "root";
String password = "123456";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1. 注册驱动(作用:告诉java程序,即将连接的是哪个公司的数据库)
// 使用反射机制加载一个类,可让一个类的静态代码执行,不需要返回值,只需要加载的动作
Class.forName(driverName);
// 2. 获取连接(表示JVM进程和数据库进程之间的通道打开了,属于进程间通信,使用完后记得关闭)
// url是统一资源定位符,表示网络中某一资源的绝对路径,包括协议、IP、Port、资源名 ,格式为协议://ip:port/资源名
// 这里使用的协议为jdbc:mysql,本机ip地址为127.0.0.1,mysql端口为3306,可以不指定访问资源,也可以指定为某一个database
conn = DriverManager.getConnection(url, user, password);
// 3. 创建数据库操作对象(Statement类的对象用于执行sql语句的对象)
stmt = conn.createStatement();
// 4. 执行sql语句(DDL、DQL、DML等操作)
// executeUpdate用来处理增删改,返回受到影响的行数
// executeQuery用来处理查
String sql = "select * from 数据库名称";
rs = stmt.executeQuery(sql);
// 5. 处理查询结果(只有执行的是DQL才需要该步骤,因为若没有查询则没有查询结果)
while (rs.next()) {
// 无论数据库中的数据类型是什么,一律返回string
// JDBC中所有的下标从1开始
// 获取第1,2,3,列
// 可以按照第几列访问,也可以按照列名或查询语句指定的别名处理
System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3));
System.out
.println(rs.getString("id") + "\t" + rs.getString("amount") + "\t" + rs.getString("password"));
}
} catch (Exception e) {
e.printStackTrace();
System.out.print("连接失败");
} finally {
// 6. 释放资源,从小到大关闭,需要先判断是否为null,避免空指针异常(关闭JVM和数据库的通信)
// 这里不要一起try,否则若在某一处发生异常,会直接进入到catch语句块中,后面的资源就没有关闭
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}