Back End

jdbc实现对oracle与mysql数据库的具体操作

PineappleCat · 11月24日 · 2019年 639次已读

 结构图:我们能操作:JDBC API(通过包)

JDBC API的作用:

完成JDBC API这三个功能需要的类或接口:

  • DriverManager(管理jdbc驱动)
  • Connection(连接)
  • Statement(或PreparedStatement实现增删改查),CallableStatement(调用数据库中的存储过程/存储函数)
  • ResultSet(返回的结果集)。

jdbc访问数据库步骤(更新(增删改),查询):
        1.项目导入驱动(jar包),加载具体的驱动类。
        2.与数据库建立连接(DriverManager->Connection)。   产生关系->
        3.发送sql,执行(Connection->Statement  /  PreparedStatement   /  CallableStatement) 。 
        4.处理结果集(查询)(上面Statement  等->ResultSet)。

自己百度下载相应的jar包,数据库的安装,建表等。oracle与mysql不同的jar包,同样sql server也有,这里不说自行百度。我这里是在单个类里面进行数据库的访问操作,你也可以自行对数据库的访问操作进行封装,进行代码的重用。


驱动jar具体驱动类
oracleojdbc-x.jaroracle.jdbc.OracleDriver
mysqlmysql-connector-java-x.jarcom.mysql.jdbc.Driver
sqlserversqljdbc-x.jarcom.microsoft.sqlserver.jdbc.SQLServerDriver

一、对oracle与mysql的操作基于Statement 

1.实现oracle数据库的更新+查询:

以下方法只需将USERNAME,PWD改为自己数据库的账户密码,修改所要操作的sql语句,在main()方法中调用更新或查询方法即可完成对数据库的操作。从操作sql这里就需要了解数据库的知识!写出正确的sql语句。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class jdbcOracle {
    private static final String URL="jdbc:oracle:thin:@localhost:1521:ORCL";
    private static final String USERNAME="test";
    private static final String PWD="123456";
    //oracle
    public static void update(){//实现更新(增删改)
        Connection connection=null;
        Statement stmt=null;
        try {
            //1.加载具体的驱动类
            Class.forName("oracle.jdbc.OracleDriver");
            //2.与数据库建立连接
            connection = DriverManager.getConnection(URL, USERNAME, PWD);
            //3.发送sql,执行
            stmt = connection.createStatement();
            //增加
            String sql = "insert  into student values (1,'as','as')";
            //修改
            //String sql = "update student set stuname='ls' where stuno=1";
            //删除
            //String sql = "delete from student where stuno=1";
            int count = stmt.executeUpdate(sql);//返回值表示增删改了几条数据
            //4.处理结果
            if (count > 0) {
                System.out.println("success");
            }
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }catch (SQLException e){
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭connection stmt
            try {
               if(stmt!=null) {stmt.close();}
                if(connection!=null) {connection.close();}
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
 
    }
 
    public static void query() {//实现查询
    	Connection connection=null;
        Statement stmt=null;
        ResultSet rs = null;//结果集 对应的是一张表格 
        try {	
            //1.加载具体的驱动类
            Class.forName("oracle.jdbc.OracleDriver");
            //2.与数据库建立连接
            connection = DriverManager.getConnection(URL, USERNAME, PWD);
            //3.发送sql,执行
            stmt = connection.createStatement();
            //查询
            String sql = "select stuno,stuname from student";
            rs = stmt.executeQuery(sql);//返回结果集
            //4.处理结果 获取结果集里的数据 rs默认指向结果集的前一行
            //使用时需先指向下一行 rs.next()  1.下移 2.判断下以后的元素是否为空 有true/无false.rs.previous() 1.上移 2.判断下以后的元素是否为空 有true/无false。
            //获取rs当前指向的那行的数据:rs.getXxx(); 如rs.getInt();
            while(rs.next()) {
            	int sno = rs.getInt("stuno");//int sno = rs.getInt(1); 从1开始也正确但是推荐前者
            	String sname = rs.getString("stuname");//String sname = rs.getString(2);
            	//System.out.println(sno+"--"+sname);
            }
           
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }catch (SQLException e){
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭connection stmt
            try {
            	if(rs!=null) {rs.close();}
                if(stmt!=null) {stmt.close();}
                if(connection!=null) {connection.close();}
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
    }
    //调用测试
    public static void main(String[] args) {
        update();
    	//query();
    }
}

2.实现mysql数据库的更新+查询: 

以下方法只需将USERNAME,PWD改为自己数据库的账户密码,修改所要操作的sql语句,在main()方法中调用更新或查询方法即可完成对数据库的操作。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class jdbcMysql {
    private static final String URL="jdbc:mysql://localhost:3306/jsp-study";
    private static final String USERNAME="root";
    private static final String PWD="123456";
    //Mysql
    public static void update(){//实现增删改
        Connection connection=null;
        Statement stmt=null;
        try {
            //1.加载具体的驱动类
            Class.forName("com.mysql.jdbc.Driver");
            //2.与数据库建立连接
            connection = DriverManager.getConnection(URL, USERNAME, PWD);
            //3.发送sql,执行
            stmt = connection.createStatement();
            //增加
            String sql = "insert  into student values (1,'as',23,'as')";
            //修改
            //String sql = "update student set stuname='ls' where stuno=1";
            //删除
            //String sql = "delete from student where stuno=1";
            int count = stmt.executeUpdate(sql);//返回值表示增删改了几条数据
            //4.处理结果
            if (count > 0) {
                System.out.println("success");
            }
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }catch (SQLException e){
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭connection stmt
            try {
                if(stmt!=null) {stmt.close();}
                if(connection!=null) {connection.close();}
            }catch (SQLException e){
                e.printStackTrace();
            }
        }

    }
    
    public static void query() {//实现查询
    	Connection connection=null;
        Statement stmt=null;
        ResultSet rs = null;//结果集 对应的是一张表格 
        try {	
            //1.加载具体的驱动类
            Class.forName("com.mysql.jdbc.Driver");
            //2.与数据库建立连接
            connection = DriverManager.getConnection(URL, USERNAME, PWD);
            //3.发送sql,执行
            stmt = connection.createStatement();
            //查询
            String sql = "select stuno,stuname from student";
            rs = stmt.executeQuery(sql);//返回结果集
            //4.处理结果 获取结果集里的数据 rs默认指向结果集的前一行
            //使用时需先指向下一行 rs.next()  1.下移 2.判断下以后的元素是否为空 有true/无false。rs.previous() 1.上移 2.判断下以后的元素是否为空 有true/无false。
            //获取rs当前指向的那行的数据:rs.getXxx(); 如rs.getInt();
            while(rs.next()) {
            	int sno = rs.getInt("stuno");//int sno = rs.getInt(1); 从1开始也正确但是推荐前者
            	String sname = rs.getString("stuname");//String sname = rs.getString(2);
            	//System.out.println(sno+"--"+sname);
            }
           
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }catch (SQLException e){
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭connection stmt
            try {
            	if(rs!=null) {rs.close();}
                if(stmt!=null) {stmt.close();}
                if(connection!=null) {connection.close();}
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
    }
    //调用测试
    public static void main(String[] args) {
        update();
        //query();
    }
}

二、对oracle与mysql的操作基于PreparedStatement

由前面我们可以知道PreparedStatement是由Connection产生的。

这里注意: connection的调用方法名与PreparedStatement 单词缺少d。 connection.prepareStatement();  

同样:其他connection产生的对象的名称也是不与原名称相同。

1.对oracle数据库的操作更新+查询:


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 jdbcOracle {
    private static final String URL="jdbc:oracle:thin:@localhost:1521:ORCL";
    private static final String USERNAME="test";
    private static final String PWD="123456";
    //oracle
    public static void update(){//实现更新(增删改)
        Connection connection=null;
        PreparedStatement prepareStatement =null;
        try {
            //1.加载具体的驱动类
            Class.forName("oracle.jdbc.OracleDriver");
            //2.与数据库建立连接
            connection = DriverManager.getConnection(URL, USERNAME, PWD);
            
            /*Statement 
            //3.发送sql,执行
            stmt = connection.createStatement();
            //增加
            String sql = "insert  into student values (1,'as','as')";
            //修改
            //String sql = "update student set stuname='ls' where stuno=1";
            //删除
            //String sql = "delete from student where stuno=1";
            int count = stmt.executeUpdate(sql);//返回值表示增删改了几条数据
            */
            
            //PreparedStatement
            //String sql = "insert  into student values (1,'as','as')";//增加
            String sql = "insert  into student values (?,?,?)";//?占位符
            prepareStatement = connection.prepareStatement(sql);//预编译
            //设置?对应的值
            prepareStatement.setInt(1,36);
            prepareStatement.setString(2, "zhansan");
            prepareStatement.setInt(3, 20);
            int count = prepareStatement.executeUpdate();
            
            
            //4.处理结果
            if (count > 0) {
                System.out.println("success");
            }
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }catch (SQLException e){
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭connection stmt
            try {
               if(prepareStatement!=null) {prepareStatement.close();}
                if(connection!=null) {connection.close();}
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
 
    }
 
    public static void query() {//实现查询
    	Connection connection=null;
    	PreparedStatement stmt=null;
        ResultSet rs = null;//结果集 对应的是一张表格 
        try {	
            //1.加载具体的驱动类
            Class.forName("oracle.jdbc.OracleDriver");
            //2.与数据库建立连接
            connection = DriverManager.getConnection(URL, USERNAME, PWD);
            //3.发送sql,执行
            //String name="x";
            //String sql = "select * from student where stuname like '%"+name+"%'";
            String sql = "select * from student where stuname like ?";//查询
            stmt = connection.prepareStatement(sql);
            stmt.setString(1, "%x%");//不需要单引号
            rs = stmt.executeQuery();//返回结果集
            
            //4.处理结果 获取结果集里的数据 rs默认指向结果集的前一行
            //使用时需先指向下一行 rs.next()  1.下移 2.判断下以后的元素是否为空 有true/无false
            //获取rs当前指向的那行的数据:rs.getXxx(); 如rs.getInt();
            while(rs.next()) {
            	int sno = rs.getInt("stuno");//int sno = rs.getInt(1); 从1开始也正确但是推荐前者
            	String sname = rs.getString("stuname");//String sname = rs.getString(2);
            	//System.out.println(sno+"--"+sname);
            }
           
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }catch (SQLException e){
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭connection stmt
            try {
            	if(rs!=null) {rs.close();}
                if(stmt!=null) {stmt.close();}
                if(connection!=null) {connection.close();}
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
    }
    //调用测试
    public static void main(String[] args) {
        //update();
    	query();
    }
}

同理,可按oracle的去修改mysql的。 

两种方式都可以对oracle或者mysql数据库进行操作,推荐后者。


Click here to view the copyright notice of this site(点击此处查看本站版权声明)
0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!