首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JDBC资料辅导(2)

JDBC资料辅导(2)

作者头像
紫风
发布2025-10-14 15:54:23
发布2025-10-14 15:54:23
830
举报

一、JDBC原理

二、Statement execute(sql); 当不知道执行的SQL语句是什么类型的时候执行 ,返回值是boolean executeQuery(sql); 执行查询语句 executeUpdate(sql); 执行更新语句

三、PreparedStatement 可以使用参数替代sql语句中的某些参数使用 "?"代替,他先将带参数的sql语句发送到数据库,进行编译,然后PreparedStatement会将参数发送给数据库。 在使用PreparedStatement时,在设置相应参数时,要指明参数的位置和类型,以及给出参数值 根据不同的参数类型使用不同的setXXX(参数的位置,参数值)来设置参数

例: public void insert(Student s){   Connection con=ConnectionFactory.getConnection();//建立连接   String sql="insert into student(id,name) values(?,?)";   PreparedStatement ps=null;   try {    ps=con.prepareStatement(sql);//创建一个PreparedStatement       int index=1;    ps.setInt(index++,s.getStuId());  //为参数赋值    ps.setString(index++,s.getName());    ps.executeUpdate();   } catch (SQLException e) {    e.printStackTrace();   }finally{    if(ps!=null)     try {      ps.close();     } catch (SQLException e) {      e.printStackTrace();     }     if(con!=null)      try {       con.close();      } catch (SQLException e) {       e.printStackTrace();      }   }  }

CallableStatement是可以用非sql语句来访问数据库,他是通过调用存储过程(PL/SQL)来访问数据库的。可以直接使用连接来调用 prepareCall(...)方法,来执行这个存储过程,"..."是存储过程的名字。

对于系统时间要去数据库时间 TimeStamp 和 Date都可以保存时间 TimeStamp可以保存时、分、秒的数据,Date只保存日期年月的信息。

SQLException是检查异常必须处理要么throws ,要么try{}catch(){} getErrorCode()可以获得错误码,可以对错误进行查询。

四、源数据 JDBC中有两种源数据,一种是数据库源数据,另一种是ResultSet源数据。

源数据就是描述存储用户数据的容器的数据结构。

ResultSet rs=ps.executeQuery(sql); ResultSetMetaData m=rs.getMetaData();

getColumnCount(),获得实际列数 getColumnName(int colnum),获得指定列的列名 getColumnType(int colnum),获得指定列的数据类型 getColumnTypeName(int colnum),获得指定列的数据类型名

//打印结果集 public static void printRS(ResultSet rs)throws SQLException{     ResultSetMetaData rsmd = rs.getMetaData();     while(rs.next()){        for(int i = 1 ; i < = rsmd.getColumnCount() ; i++){           String colName = rsmd.getColumnName(i);           String colValue = rs.getString(i);           if(i>1){              System.out.print(",");           }           System.out.print(name+"="+value);        }        System.out.println();     } }

五、数据库源数据

DatabaseMetaData getURL(),获得连接数据库的URL getDatabaseProductName() 获得数据库产品的名称 getDriverVersion() 获得JDBC驱动程序的String形式的版本号 getTables()获得数据库中该用户的所有表 getUserName() 获得数据库用户名。

六、事务(Transaction)

事务是针对原子操作的,要求原子操作不可再分,要求原子操作必须同时成功同时失败。 事务是捆绑的原子操作的边界。 JDBC中使用事务,先要使用连接调用setAutoCommite(false)方法,把自动提交(commit)置为false。打开事务就要关闭自动提交。不用事务是要把setAutoCommite(true)

在处理事务时,在发送sql语句后执行成功并确认时,就在try块中使用连接调用commit()方法来发送提交信息, 在发送sql语句后执行失败时,会在catch语句块中使用连接调用rollback()方法来发送回滚信息,也可以在需要时做回滚操作(主观原因)。

七、JDBC事务并发产生的问题和事务隔离级别

1,脏读(dirty read),读取到了没有提交的数据。 2,不可重复读(UnPrpeatable Read),两次读取到了不同的数据,就是要保持在同一时间点上两次读取到的数据相同,    不能够使查询数据时进行改变。 3,幻读(phantom),在两次查询同一时间点数据时,数据数量发生改变,要保持在同一时间点上两次读取到的数据相同。

事务隔离级别

TRANSACTION_NONE不使用事务。 TRANSACTION_READ_UNCOMMITTED 可以读取为提交数据。 TRANSACTION_READ_COMMITTED可以避免脏读,不能够读取没提交的数据,最常用的隔离级别  大部分数据库的默认隔离级别 TRANSACTION_REPEATABLE_READ可以避免脏读,重复读取, TRANSACTION_SERIALIZABLE可以避免脏读,重复读取和幻读,(事务串行化)会降低数据库效率

以上的五个事务隔离级别都是在Connection类中定义的静态常量,使用setTransactionIsolation(int level) 方法可以设置事务隔离级别。

八,异常的处理 try{} catch(SQLException){} try{} catch(Exception){}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档