jdbc实现对oracle与mysql数据库的具体操作
结构图:我们能操作: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 | 具体驱动类 | |
oracle | ojdbc-x.jar | oracle.jdbc.OracleDriver |
mysql | mysql-connector-java-x.jar | com.mysql.jdbc.Driver |
sqlserver | sqljdbc-x.jar | com.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数据库进行操作,推荐后者。