Oracle——7.连接数据库

目录
导入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.加载驱动
【Oracle——7.连接数据库】// 数据库连接的方法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.ConnectionConnection 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