JDBC简介
JDBC(Java Database Connected)
四种Java数据库操作形式:
1.JDBC-ODBC桥接技术(不用);
2.JDBC直接连接;
3.JDBC网络连接;
4.模拟指定数据库的通讯协议自己编写数据库操作。
几种常用的数据库:
Oracle,MySQL,SQLServer,MongoDB等
连接数据库
具体内容:
在Java之中,所有数据库操作的类和接口都保存在java.sql包中,在这个包中核心组成如下:
- 一个类:DriverManager类;
- 四个接口:Connection、Statement、ResultSet、PreparedStatement。
所有的JDBC连接数据库的操作流程都是固定的,按照如下几步完成:
1.加载数据库的驱动程序;
2.进行数据库的连接(通过DriverManager类完成,Connection表示连接);
3.进行数据的CRUD(Statement,PreparedStatement、ResultSet);
4.关闭数据库操作以及连接。
加载驱动程序
- 驱动程序:
- Oracle驱动程序类:oracle.jdbc.driver.OracleDriver
- 加载类使用:Class.forName(“oracle.jdbc.driver.OracleDriver”);
连接数据库
如果想要连接数据库需要提供以下几个信息(前提是数据库服务要打开)
- 数据库的连接地址:jdbc:oracle:连接方式:主机名称:端口名称:数据库的SID
(要连接本机的xxx数据库:jdbc:oracle:thin:@localhost:1521:xxx) - 数据库的用户名
- 数据库的密码
要连接数据库必须依靠DriverManager,在此类有如下定义方法:
- 连接数据库:
public static Connection getConnection(String url, String user, String password) throws SQLException;
在JDBC里面,每一个数据库连接都要求使用一个Connection对象进行封装,所以只要有一个新的Connection对象就表示要连接一次新的数据库。
关闭数据库
Connection接口提供有close()方法:
public void close() throws SQLException
public class JDBCDemo {
private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:mldn";
private static final String USER = "system";
private static final String PASSWORD = "Cherry";
public static void main(String[] args) throws Exception {
// 一、加载数据库驱动程序,此时不需要实例化,因为会由容器自己负责处理
Class.forName(DBDRIVER);
// 二、连接数据库
Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD);
System.out.println(conn);
//四、关闭数据库
conn.close();
}
此时的程序已经连接上Oracle数据库,可是很多时候连接不上,可能是因为:
1.监听服务出现错误
- 监听的主机名称不是本机的计算机名称,也不要用IP地址
- 监听配置文件路径:F:\Software\Oracle\product\12.2.0\dbhome_1\network\admin保证主机名和监听的主机名一致。
2.不能找到指定的SID
数据库的名字就是SID的名字,但是很多时候该名称不会自动注册,也就是说只有数据库名称但是没有对应的SID名称。于是可以打开数据库的网络管理工具。
Statement接口
编写数据库创建脚本
DROP TABLE member PURGE ;
DROP SEQUENCE myseq ;
CREATE SEQUENCE myseq ;
CREATE TABLE member(
mid NUMBER ,
name VARCHAR2(20) ,
birthday DATE DEFAULT SYSDATE ,
age NUMBER(3) ,
note CLOB ,
CONSTRAINT pk_mid PRIMARY KEY(mid)
) ;
数据增加
增加数据SQL语法:INSERT INTO 表名称 (列,列,...) VALUES (值, 值,....)
package oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JDBCDemo {
private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
private static final String USER = "system";
private static final String PASSWORD = "Cherry";
public static void main(String[] args) throws Exception {
// 一、加载数据库驱动程序,此时不需要实例化,因为会由容器自己负责处理
Class.forName(DBDRIVER);
// 二、连接数据库
Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD);
//三、进行数据库的操作
Statement stmt = conn.createStatement();
String sql = " INSERT INTO member(mid,name,birthday,age,note) VALUES "
+ " (myseq.nextval,'张三',TO_DATE('1997-09-15','yyyy-mm-dd'),17,'hello')" ;
int len = stmt.executeUpdate(sql);
System.out.println("影响的数据行:"+len);
//四、关闭数据库
stmt.close();
conn.close();
}
}
数据修改
修改数据SQL语法:UPDATE 表名称 SET 字段=值 , .... WHERE 更新条件(s)
String sql = " UPDATE member SET name='李四',birthday=SYSDATE,age=30 "
+ " WHERE mid IN(3,5,7,9,11) ";
删除数据
删除数据SQL语法:DELETE FROM 表名称 WHERE 删除条件(s)
String sql = "DELETE FROM member WHERE mid IN(10,15,20)";
数据查询
String sql = "SELECT mid,name,age,birthday,note FROM member";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()){
int mid = rs.getInt("mid");
String name = rs.getString("name");
int age = rs.getInt("age");
Date birthday = rs.getDate("birthday");
String note = rs.getString("note");
System.out.println(mid + "," + name + "," + age + "," + birthday + "," + note);
}
```