在idea里面使用jdbc

本文详细介绍了使用Java JDBC访问数据库的步骤,包括加载Driver、创建Connection、Statement对象、处理ResultSet和关闭资源。还讨论了PreparedStatement的优势和事务的概念,强调了事务的ACID特性以及四种隔离级别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jdbc访问数据库步骤:
• JDBC访问数据库步骤
• 1:加载一个Driver驱动

 • Class.forName(“oracle.JDBC.driver.OracleDriver”);//使用Oracle的JDBC驱动程序
  • Class.forName(“com.microsoft.JDBC.sqlserver.SQLServerDriver”);//使用SQL Server的JDBC驱 动程序 
  • Class.forName(“com.ibm.db2.JDBC.app.DB2Driver”);//使用DB2的JDBC驱动程序

• ==Class.forName(“com.mysql.JDBC.Driver”);//使用MySql的JDBC驱动程序 ==
• 2:创建数据库连接(Connection)
与数据库建立连接的方法是调用DriverManager.getConnection(String url, String user, String password )方法

• Connection conn=null;
 • String url="jdbc:oracle:thin:@localhost:1521:orcl";
  • String user=“scott"; • String password=“tiger"; 
  • conn = DriverManager.getConnection(url, user, password);

• 3 :创建SQL命令发送器Statement
Statement对象用于将 SQL 语句发送到数据库中,或者理解为执行sql语句 • 有三种 Statement对象:
• Statement:用于执行不带参数的简单SQL语句;
• PreparedStatement(从 Statement 继承):用于执行带或不带参数的预编译SQL语句;
• CallableStatement(从PreparedStatement 继承):用于执行数据库存储过程的调用。

• 4:通过Statement发送SQL命令并得到结果

在这里插入图片描述

• 5:处理结果(select语句)
• ResultSet对象是executeQuery()方法的返回值,它被称为结果集,它代表符合SQL语句条件的 所有行,并且它通过一套getXXX方法(这些get方法可以访问当前行中的不同列)提供了对这 些行中数据的访问。
• ResultSet里的数据一行一行排列,每行有多个字段,且有一个记录指针,指针所指的数据行 叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用 ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。
• ResultSet对象自动维护指向当前数据行的游标。每调用一次next()方法,游标向下移动一行。
• 初始状态下记录指针指向第一条记录的前面,通过next()方法指向第一条记录。循环完毕后 指向最后一条记录的后面
在这里插入图片描述

• 6:关闭数据库资源

• ResultSet
• Statement
• Connection
作为一种好的编程风格,应在不需要Statement对象和Connection对象时显式地关闭它们。关 闭Statement对象和Connection对象的语法形式为: • public void close() throws SQLException
• 用户不必关闭ResultSet。当它的 Statement 关闭、重新执行或用于从多结果序列中获取下一 个结果时,该ResultSet将被自动关闭。
• 注意:要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,因为 Statement和ResultSet是需要连接是才可以使用的,所以在使用结束之后有可能其他的 Statement还需要连接,所以不能先关闭Connection。

使用PreparedSatement完善Jdbc操作

• PreparedStatement 接口继承 Statement接口 • 如果需要多次执行一个SQL语句,可以使用PreparedStatement对象。在创建 PreparedStatement对象时,通过传递不同参数值多次执行PreparedStatement对象,可 以得到多个不同的结果。
• 优势:执行效率高、代码可读性强、安全性高
• 该对象用Connection的prepareStatement()方法创建。
如:

 • pstmt=conn.prepareStatement("insert into student values(?,?,? )"); 
 • pstmt.setString(1, “小明");
  • pstmt.setInt(2, 27); 
  • pstmt.setFloat(3, 85);
   • pstmt.executeUpdate();   

• PreparedStatement接口中的主要方法

 • void setString (int parameterIndex, String x)
  • void setFloat (int parameterIndex, float x) 
  • void setInt (int parameterIndex, int x) 
  • void setDate (int parameterIndex, java.sql.Date x)
   • void setDouble (int parameterIndex, double x) 

• ResultSet executeQuery () //返回单结果集,通常用于SELECT语句 
• boolean execute () //返回布尔值,通常用于insert,update,delete语句 
• int executeUpdate () //返回操作影响的行数,通常用于insert,update,delete语句

事务概念
一组要么同时执行成功,要么同时执行失败的SQL语句。是数据库操 作的一个执行单元!
– 事务开始于:
• 连接到数据库上,并执行一条DML语句(INSERT、UPDATE或DELETE)。
• 前一个事务结束后,又输入了另外一条DML语句。
– 事务结束于:
• 执行COMMIT或ROLLBACK语句。
• 执行一条DDL语句,例如CREATE TABLE语句;在这种情况下,会自动执 行COMMIT语句。
• 执行一条DCL语句,例如GRANT语句;在这种情况下,会自动执行 COMMIT语句。
• 断开与数据库的连接。
• 执行了一条DML语句,该语句却失败了;在这种情况中,会为这个无效的 DML语句执行ROLLBACK语句。
• 事务的四大特点(ACID)
– atomicity(原子性)
• 表示一个事务内的所有操作是一个整体,要 么全部成功,要么全失败;
– consistency(一致性)
• 表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改 前的状态;
– isolation(隔离性)
• 事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态, 要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。
– durability(持久性)
• 持久性事务完成之后,它对于系统的影响是永久性的。
• 事务隔离级别从低到高:
– 读取未提交(Read Uncommitted)
– 读取已提交(Read Committed)

– 可重复读(Repeatable Read)
– 序列化(serializable)

package com.sikiedu.test;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//很多弊端 不停释放
public class JdbcTest {
    public static void main(String[] args) {
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm_mybatis", "root", "admin");
            System.out.println("连接创建成功");

        String sql = "select * from user where u_sex=?";

        ps = con.prepareStatement(sql);
        ps.setString(1, "0");
        rs = ps.executeQuery();
        while (rs.next()) {
            System.out.println(rs.getString("u_id") + " " + rs.getString("u_username") + "" + rs.getString("u_sex"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        if (rs != null) {

            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    if (ps != null) {
        try {
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (con != null) {
        try {
            con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值