不会吧,居然现在还没有人知道JDBC的核心API吗?

一、常用JDBC API

在java.sql包中包含体现JDBC基本功能的若干接口和类:

1.Driver 接口:代表驱动程序

2.DriverManager 类:驱动程序管理员

3.Connection 接口:代表数据库连接

4.Statement 、PreparedStatement、CallableStatement 接口:代表数据库操作对象

5.ResultSet 接口:代表结果集

6.DatabaseMetadata、ResultSetMetadata接口:代表元数据

7.Types 类:代表JDBC类型

===============================================================================

二、若干API的具体说明

Statement和 PreparedStatement ------SQL语句执行接口

** Statement** 接口代表了一个数据库的状态,再向数据库发送相应的SQL语句时,都需要创建Statement 接口或者PreparedStatement 接口。

Statement 主要用于操作不带参数的SQL语句,比如增、删、改。

PreparedStatement:预编译的Statement接口

第一步:通过连接获得PreparedStatement 接口对象,用带占位符(?)的sql语句构造。

PreparedStatement ps=con.praperedStatement("select * from test where id=?");

第二步:设置参数

ps.setString(1,"5");

第三步:执行sql语句

rs= ps.executeQuery();

Statement 发送完整的sql语句到数据库不是直接执行,而是先编译、后运行。

**PreparedStatement **先发送带参数的sql语句,在发送一组参数值。

如果是同构的sql语句,则PreparedStatement 效率高。对于异构的sql语句,两者效率差不多。

同构: 两个sql语句可编译的部分是相同的,只有参数值不同。

异构: 两个sql语句的格式是不同的。

注意点:
1.使用预编译的Statement (即PreparedStatement )编译多条sql语句一起执行。
2.可以跨数据库使用,编写通用程序。
3.能用预编译时尽量用预编译。


ResultSet接口:

ResultSet接口是查询结果集接口,它对返回的结果集进行处理。ResultSet是程序员进行JDBC操作的必须接口。


ResultSetMetaData----元数据操作接口:

** ResultSetMetaData** 是对元数据进行操作的接口,可以实现很多高级功能。Hibernate运行数据库的操作,大多是通过此接口。可以认为,此接口是SQL查询语言的一种反射机制。ResultSetMetaData 可以通过数据的形式,来遍历数据库各个字段的属性。对于开发者来说,此机制意义重大。

JDBC通过元数据(MetaData)来获取具体的表相关的信息,例如,可以查询数据库中有哪些表、标有哪些字段、字段的属性等。MetaData 通过一系列的getXXX 将这些信息返回给我们。

MetaData元数据包括 数据库源数据DatabaseMetadata结果集元数据ResultSetMetaData
数据库源数据DatabaseMetadata: 使用connection.getMetaData()获得了关于数据库整体的元数据信息。
结果集元数据ResultSetMetaData: resultSet.getDataMeta获得的比较重要的是表的列名、列的属性等信息。
结果集元数据对象: ResultSetMetaData meta = rs.getDataMeta();
字段个数:meta.getColumnCount();
字段名字:meta.getColumnName();
字段JDBC类型:meta.getColumnType();
字段数据库类型:meta.getColumnTypeName();
数据库元数据对象: DatabaseMetaData meta = con.getMetaData();
数据库名:meta.getDatabaseProductName();
数据库版本号:meta.getDatabaseProductVersion();
数据库驱动名:meta.getDriverName();
数据库驱动版本号:meta.getDriverVersion();
数据库URL:meta.getURL();
该连接的数据库登录名:meta.getUserName();


三、JDBC应用程序的基本步骤:

1.注册驱动

2.建立数据库连接

3.创建数据库操作对象

4.执行SQL

5.处理结果集

6.关闭JDBC对象


关闭JDBC对象

1.注册一个驱动driver

注册驱动程序的三种方式:

方式一:Class.forName("Oracle.jdbc.driver.OracleDriver");

方式二:Driver driver=new Oracle.jdbc.driver.OracleDriver();

DriverManager.registerDriver(driver);

方式三:编译时在虚拟机中加载驱动

javac -D jdbc.drivers = oracle.jabc.driver.OracleDriver xxx.java

java -D jabc.drivers = 驱动全名 类名

使用系统属性名,加载驱动 -D表示为系统属性赋值

          附:mysql 的Driver全名:com.mysql.jdbc.Driver

               sqlserver 的Driver全名:com.microsoft.jdbc.sqlserver.SQLServerDriver

2.建立连接

  conn=DriverManager.getConnection

  ("jdbc:oracle.thin:@192.168.0.254:1521/test","username","password");

  上面括号中放的是:oracle自协议+@+ip:port / 数据库实例名,数据库用户名,用户密码。

   mysql url写法:jdbc:mysql://192.168.254:3306/test

3.获得一个Statement对象

sta = conn.createStatement();

4.通过Statement执行sql语句

sta.excuteQuery(sql);//返回一个查询结果集

sta.executeUpdate(sql);//返回值为 int 型,表示影响记录的条数

将sql语句通过连接发送到数据库中执行,以实现对数据库的操作。

5.处理结果集

使用Connection对象获得一个Stagement,Statement中的executeQuery(String sql)方法可以使用select语句查询,并返回一个结果集 ResultSet 。通过遍历这个结果集,可以获得select语句的查询结果。ResultSet的next()方法会操作一个游标从第一条记录开始读取,直到最后一天记 录。 executeUpdate(String sql)方法用于执行 DDL /DML 语句,比如update,delete等。

只有select语句才有返回结果集。

例:

             Statement sta = con.createStatement(); //创建statement对象
              String sql = " insert into test(id,name) values(1"+" " " "+"king"+" "" "+") ";
              sta.executeUpdate(sql); //执行sql语句
              String sql = "select * from test";
              ReslutSet rs = sta.executeQuery(sql);//执行sql语句后有结果集
              //遍历处理结果集
              while(rs.next()){
                   System.out.println(rs.getInt("id"));
                   System.out.println(rs.getString("name"));
              }

6.关闭数据库连接(释放资源)

   调用close()方法:
        rs.close();         
        sta.close();          
        conn.close();
ResultSet 、Statement 和Connetction是依次依赖的。

注意:要按先 ResultSet ,再Statement,最后Connetction的顺序关闭资源。因ResultSet和Statement在连接的情况下才能使用,所以在连使用束 后可能还有其他的statement还在连接,所以不能先关闭Connection。

往期更多精彩我已收录在我的专区,里面收录了Java学习路线图、Java从一无所知到入门、Java基本语法、Javase语法基础测试,Java从入门到精通等zl,戳我去聆取,或私信我回复“”Java“”!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容