首页 >> 大全

Oracle——7.连接数据库

2024-01-10 大全 46 作者:考证青年

目录

导入ojdbc的jar包

创建连接

1.加载驱动

2.创建连接

创建连接总览

增删改查操作

3.创建一个可执行sql的对象

4.执行sql语句

整理成方法文件

1.创建一个属性

2.创建数据库的连接方法

3.创建增删改的方法

4.创建查询的方法

改进

全代码

.java

测试文件Test.java

导入ojdbc的jar包

1.将jar包复制到的src下

2.右键jar包——Build Path——Add to Build Path

创建连接

新建.java文件

1.加载驱动

// 数据库连接的方法
public void getConn() throws Exception{// 1.加载驱动 包名+类名的形式(可以直接复制路径)Class.forName("oracle.jdbc.driver.OracleDriver");
}

复制方法:

2.创建连接

// 2.创建连接
// 通过驱动,来创建一个连接
// 创建这个连接,需要三个参数
// 第一个url:数据库的地址和jdbc所连接的数据库类型和数据库的名字
// 第二个user:数据库的用户名
// 第三个password:数据库的密码
// DriverManager.getConnection(url,user,password)
DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","123456");

URL信息:

现在我们可以创建一个main方法测试一下连接成不成功

public static void main(String[] args) throws Exception{JDBCTest jdbc = new JDBCTest();// 调用jdbc.getConn();
}

执行如果控制台没有什么反应,没提示错误,很大几率是写对了!

也可以在.java的创建连接语句下面加上输出语句来测试对不对

创建连接总览

public class JDBCTest{public void getConn() throws Exception{Class.forName("oracle.jdbc.driver.OracleDriver");DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","123456");}
}
public static void main(String[] args) throws Exception{JDBCTest jdbc = new JDBCTest();jdbc.getConn();
}

可以把加载驱动和连接的代码粘下来存起来,下次写的时候可以直接用~

增删改查操作

对上面创建连接的语句进行修改

// 这一步需要进行导包 java.sql.Connection
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","123456");

3.创建一个可执行sql的对象

// 3.通过连接 创建一个可执行sql的对象
Statement stmt = conn.createStatement();

4.执行sql语句

增删改

增删改都可以用方法

// 4.通过 可执行语句的对象,执行sql语句
// 增删改都可以用这个语句
// 执行之后,会返回一个数字,这个数字表示 执行了几条数据
stmt.executeUpdate("insert into dept values(55,'花钱部','北京')");

执行之后,会返回一个数字,这个数字表示 执行了几条数据

所以,我们可以来小改一下来判断它有没有成功

int number = stmt.executeUpdate("insert into dept values(55,'花钱部','北京')");
// 验证成功失败
if(num>0){System.out.println("添加成功");
}else{System.out.println("添加失败");
}

查询

方法用来写查询语句,会返回一个结果集

// 查询
// 是通过executeQuery方法来进行查询的
// 并且返回一个ResultSet(结果集)类型的数据
ResultSet rs = stmt.executeQuery("select * from dept");

获取结果集中的信息

// 可以通过循环,来获取结果集中的信息
while(rs.next()){// 如果有内容// rs结果集中的一行数据// getInt 表示获取的是一个int类型的数据// 括号中是列的名字int deptno = rs.getInt("deptno");String dname = rs.getString("dname");String loc = rs.getString("loc");System.out.println(deptno + "----" + dname + "----" + loc);
}

这里有个问题,如果列的名字记不住或懒得写怎么办??—— 还可以通过列来获取信息

while(rs.next()){int deptno = rs.getInt(1);String dname = rs.getString(2);String loc = rs.getString(3);System.out.println(deptno + "----" + dname + "----" + loc);
}

整理成方法文件

新建一个.java文件

1.创建一个属性

Connection conn; // 创建属性

2.创建数据库的连接方法

// 数据库的连接
public void getConn(){Class.forName("oracle.jdbc.driver.OracleDriver");conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","123456");System.out.println("连接成功");
}

出现异常的修改方法

public void getConn(){try{Class.forName("oracle.jdbc.driver.OracleDriver");conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","123456");System.out.println("连接成功");} catch (Exception e) {e.printStackTrace();}
}

3.创建增删改的方法

// 增删改的一个共通
public int DoExe(String sql){// 1.调用数据库连接的方法getConn();try{// 2.创建可执行对象Statement stmt = conn.createStatement();// 执行sql语句return stmt.executeUpdate(sql);} catch (SQLException e) {e.printStackTrace();}return 0;
}

可以在main方法里进行测试

public static void main(String[] args) throws Exception {// 想删除 部门表中的56String sql = "delete from dept where deptno=56";DataBase db = new DataBase();int num = db.DoExe(sql);if(num>0) {System.out.println("处理成功");}else{System.out.println("处理失败");}
}

改进一下!

public static void main(String[] args) throws Exception {Scanner input = new Scanner(System.in);System.out.println("请输入要删除的部门编号:");int deptno = input.nextInt();String sql = "delete from dept where deptno=" + deptno;DataBase db = new DataBase();int num = db.DoExe(sql);if(num>0) {System.out.println("处理成功");}else{System.out.println("处理失败");}
}

4.创建查询的方法

返回的是结果集

public ResultSet Query(String sql){// 1.调用数据库连接的方法getConn();try {// 2.创建可执行的对象Statement stmt = conn.createStatement();// 执行return stmt.executeQuery(sql);} catch (SQLException e) {e.printStackTrace();}return null;
}

调用方法

String sql1 = "select * from dept";
// 执行
ResultSet rs = db.Query(sql1);
while(rs.next()){System.out.println(rs.getInt(1) + "----" + rs.getString(2) + "----" + rs.getString(3));
}

改进

我们在写类似插入语句的时候会用到单引号,打出来太麻烦了怎么办?

String sql = "insert into dept values (" + deptno + ",'" + dname + "'," + "'" + loc + "')";

把信息改成“?”

? 表示占位符

String sql = "insert into dept values (?,?,?)";

方法改成下面这样

... obj 表示可变参数,这个方法的参数 可以是1个,可以是2个,也可以是3个,或多个

public int DoExe(String sql,Object... obj){getConn();try {// 预处理 解决"?"// 先获取sql语句PreparedStatement pstmt = conn.prepareStatement(sql);// 为了循环括号里面的参数,替换"?"for(int i = 0;i < obj.length;i++) {pstmt.setObject(i+1, obj[i]);}// 执行,后面的括号不需要参数return pstmt.executeUpdate();} catch (SQLException e) {e.printStackTrace();}return 0;
}

全代码 .java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class DataBase {Connection conn; // 属性// 数据库的连接public void getConn() throws Exception {// 1.加载驱动 包名+类名的形式Class.forName("oracle.jdbc.driver.OracleDriver");// 2.创建连接// 通过驱动来创建一个连接// 创建这个连接,需要三个参数// 第一个url:数据库的地址和jdbc所连接的数据库类型和数据库的名字// 第二个user:数据库的用户名// 第三个password:数据库的密码conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "123456");}/*// 增删改的一个共通public int DoExe(String sql) throws Exception {// 1.调用数据库连接的方法getConn();// 2.创建可执行对象try {Statement stmt = conn.createStatement();// 执行sql语句return stmt.executeUpdate(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return 0;}*/// 增删改的一个共通// Object... obj 表示可变参数,这个方法的参数可以是1个,可以是2个,也可以是三个,或多个public int DoExe(String sql,Object... obj) throws Exception {// 1.调用数据库连接的方法getConn();try {// 预处理 解决"?"// 先获取sql语句PreparedStatement pstmt = conn.prepareStatement(sql);// 为了循环括号里面的参数,替换"?"// "?"是没有下标概念的,所以从1开始;但数组从0开始for(int i = 0;i < obj.length;i++) {pstmt.setObject(i+1, obj[i]);}// 执行,后面的括号不需要参数return pstmt.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return 0;}public ResultSet Query(String sql,Object... obj) throws Exception{getConn();try {/*Statement stmt = conn.createStatement();return stmt.executeQuery(sql);*/// 预处理PreparedStatement pstmt = conn.prepareStatement(sql);// 把占位符,用实际的值给替换掉for(int i = 0;i < obj.length;i++){pstmt.setObject(i+1, obj[i]);}// 执行并返回return pstmt.executeQuery();} catch (SQLException e) {e.printStackTrace();}return null;}}

测试文件Test.java

import java.sql.ResultSet;
import java.util.Scanner;public class Test {public static void main(String[] args) throws Exception {DataBase db = new DataBase();Scanner input = new Scanner(System.in);while(true) {System.out.println("1.增加");System.out.println("2.删除");System.out.println("3.修改");System.out.println("4.查找");System.out.println("5.退出");System.out.print("输入功能:");int no = input.nextInt();if(no == 5){System.out.println("退出成功");break;}switch(no){case 1:System.out.print("请输入部门号:");int deptno = input.nextInt();System.out.print("请输入部门名称:");String dname = input.next();System.out.print("请输入地点:");String loc = input.next();// "?"表示占位符String sql = "insert into dept values (?,?,?)";int num = db.DoExe(sql,deptno,dname,loc);if(num>0) {System.out.println("添加成功");}else{System.out.println("添加失败");}break;case 2:System.out.print("请输入要删除的部门编号:");int deptno1 = input.nextInt();String sql1 = "delete from dept where deptno=" + deptno1;int num1 = db.DoExe(sql1);if(num1>0) {System.out.println("删除成功");}else{System.out.println("删除失败");}break;case 3:System.out.print("请输入修改的部门编号:");int deptno2 = input.nextInt();System.out.print("输入修改的列名:");String col = input.next();System.out.print("输入修改后的信息:");String recol = input.next();String sql2 = "update dept set " + col + "='" + recol + "' where deptno=" + deptno2;int num2 = db.DoExe(sql2);if(num2>0) {System.out.println("修改成功");}else{System.out.println("修改失败");}break;case 4:/*String sql3 = "select * from dept";ResultSet qu = db.Query(sql3);while(qu.next()) {System.out.println(qu.getInt(1) + "----" + qu.getString(2) + "----" + qu.getString(3));}*/// 输入部门编号或者部门名称,查找有没有System.out.print("输入部门编号");int deptno4 = input.nextInt();System.out.print("输入部门名称");String dname4 = input.next();String sql4 = "select * from dept where deptno=? and dname=?";ResultSet qu1 = db.Query(sql4,deptno4,dname4);if(!qu1.next()){System.out.println("没有该用户");}else{System.out.println("有该用户");System.out.println(qu1.getInt(1) + "----" + qu1.getString(2) + "----" + qu1.getString(3));}break;}}}
}

jar包链接 提取码:n3oc

链接:

提取码:n3oc

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了