1.获得数据库驱动程序(由数据库厂商提供),并且将它加载到外部库中
2.注册和加载驱动程序
2.1注册 DriverManager.registerDriver(driver);
注册由系统自动添加,不需要敲入代码
2.2加载(有三种方法)
分别是:
2.2.1注册相应的db的jdbc驱动,在编译时需要导入对应的lib
new com.mysql.jdbc.Driver();
String url="jdbc:mysql://localhost:3306/databasename";
2.2.2通过系统的属性设置
System.setProperty("jdbc.driver","com.mysql.jdbc.Driver");
2.2.3最常用(通过反射加载)
Class.forName("com.mysql.jdbc.Driver");
这里会抛出ClassNotFoundException异常,需要try catch
"com.mysql.jdbc.Driver"的意义是Driver类的位置,处于com.mysql.jdbc包
附常见的几种数据库加载:
1、mysql5: Class.forName("com.mysql.jdbc.Driver");
2、mysql8: Class.forName("com.mysql.cj.jdbc.Driver");
3、Oracle11g及更早版本: Class.forName("oracle.jdbc.driver.OracleDriver")
4、Oracle12c至Oracle19c: Class.forName("oracle.jdbc.OracleDriver")
5、sqlserver2005-2019: Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
6、sqlserver2000: Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")
7、JDBC-ODBC桥模式,以Access为例: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
3.连接数据库
conn = DriverManager.getConnection(url, user, password);
会抛出SQLException,需要try catch
以MySQL为例
String url = "jdbc:mysql://127.0.0.1:3306/db_test", user = "root", password = "123456"
其中127.0.0.1为IP地址(这里是本机地址),3306:MySQL 的端口号,db_test 为你个人所创建的数据库,user 默认root不需更改,password为设置的密码
附常见的数据库连接:
1)MySQL5.x的完整连接数据库代码为:
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stusys","root", "123456");
2)MySQL8.x的完整连接数据库代码为:
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stusys?serverTimezone=UTC","root", "123456");
3)SQL Server2005-2019系列
Connection conn = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=stusys",“sa", "123456");
4)Oracle
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521/stusys",“scott", "123456"); thin是一种瘦客户端的连接方式, oci是一种胖客户端的连接方式
4.操纵数据库
4.1创建Statement对象
stmt = conn.createStatement();//创建Statement对象
4.2stmt对象的常用三种方法
executeUpdate():修改数据库数据
stmt.executeUpdate(query);这里的query是SQL语句字符串,完成添加、删除、修改功能的SQL语句都可以放入这里
executeQuery():查询数据库数据
ResultSet rs =stmt.executeQuery(query);这里的query是执行查询操作的SQL语句字符串
execute():执行添、删、改、查四种操作
stmt.execute(query);
4.3创建预处理对象(重复性的查询可以使用,提高效率)
String sql1 = "insert into xsb values(?,?,1)";//问号代表占位符
statement1 = conn.prepareStatement(sql1);//这里预处理要提前把sql语句加入
statement1.setString(1,"1003");//参数1代表“?”的位置(位置从1开始),第二个代表替代值
statement1.setString(2,"tony");
statement1.executeUpdate();
5.与数据库断开连接
断开连接时与创建连接相反,从下到上一一关闭,并且关闭的时候有SQLException异常需要处理,因为关闭必须要执行因此一一写在finally语句块中,值得注意的是这里的rs,stmt等变量不能是局部变量。
finally {
try {
rs.close();
} catch (SQLException e) {
System.out.println(e);
}
try {
stmt.close();
} catch (SQLException e) {
System.out.println(e);
}
try {
conn.close();
} catch (SQLException e) {
System.out.println(e);
}
}
}
6.运行结果的查看
两条数据已插入
7.小结:
(1)大体分五步
1.获得驱动加到项目中2.注册并且加载3.连接数据库4.操纵数据库5.断开与数据库的连接
(1)加载驱动的时候注意不能出错(建议直接复制粘贴,再具体修改),连接数据库也是如此
(2)注意异常的捕获
(3)断开连接的语句块写在finally 里,同时也要捕获异常
最后附上源代码:
package com;
import java.sql.*;
public class jdbcMysql {
public static void main(String args[]) {
/*
* 注册和加载JDBC驱动
* 1.注册 DriverManager.registerDriver(driver);
* 2.加载,有三种方法
* 3.与数据库建立连接
* 4.操纵数据库
* 5.对返回的结果进行处理
* */
String url = "jdbc:mysql://127.0.0.1:3306/db_test", user = "root", password = "123456";
Connection conn = null;
Statement stmt = null;
PreparedStatement statement1 = null;
String sql;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver"); // 2. 加载,param:类所在的位置
conn = DriverManager.getConnection(url, user, password);//抛出异常
stmt = conn.createStatement();//创建Statement对象
sql = "insert into xsb values('1002','tim','0')";
String sql2 = "select * from xsb";
stmt.executeUpdate(sql);
stmt.executeQuery(sql2);// 执行sql语句
rs = stmt.executeQuery(sql2);
while (rs.next()) {
System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3));
}
// 创建预处理对象
String sql1 = "insert into xsb values(?,?,1)";
statement1 = conn.prepareStatement(sql1);
statement1.setString(1, "1003");
statement1.setString(2, "tony");
statement1.executeUpdate();
rs = statement1.executeQuery(sql2);
while (rs.next()) {
System.out.println(rs.getInt(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
// 一定要执行的语句,关闭连接
finally {
try {//最好进行判空操作,这里懒得改了
rs.close();
} catch (SQLException e) {
System.out.println(e);
}
try {
stmt.close();
} catch (SQLException e) {
System.out.println(e);
}
try {
conn.close();
} catch (SQLException e) {
System.out.println(e);
}
}
}
}