java jdbc reparecall_JDBC学习笔记

一、JDBC的类放在两个包中:java.sql

javax.sql

二、区别:

1、java.sql:设计思想是基于传统的客户-服务器(C/S)(client/server)体系结构,功能主要针对基本数据库编程服务。连接、执行、准备语句、批处理查询、更新,可滚动结果集,事务隔离等。

2、javax.sql:除上述功能外,为连接管理分布式事务处理和老式连接提供更好的支持,也引入了窗口管理的连接缓冲池,分布式事务及行集。

三、java应用程序连接数据库的四种方式:

1、JDBC-ODBC

桥连接:负责将JDBC转换为ODBC,并且使用一个ODBC驱动程序与数据库进行通信。

2、部分使用Java编程语言编写的和部分使用本机代码编写的驱动程序,用于与数据库的客户机API进行通信。当使用这种驱动程序时,除了安装Java库外,还必须安装某个特定平台的代码。使用.dll文件用自建的客户端dll调用服务器的dll(部分Java代码——本机驱动)

3、纯粹的Java客户程序库,它使用跨数据库协议,将数据库访问请求传输给服务器组件,然后该服务器组件将访问请求转换成特定的数据库协议,该客户程序库是独立于实际数据库而运行的,因此简化了它的部署过程。在客户端用java类调用数据库的dll(数据库服务器).net技术

4、纯JDBC连接:所有驱动都用java编程,用于将JDBC访问请求直接转换成特定数据库协议。

注:API指的是应用程序接口,Java最大的特点就是跨平台,Java靠类库驱动。

5、JDBC的最终目的是为了实现下列目标:

1)编程人员能够使用Java编程语言,采用标准的SQL语句,甚至使用专用的SQL扩展名,来编写能够访问任何数据库的应用程序,同时仍然遵循Java语言的有关约定(所有JDBC驱动程序必须至少支持初级的SQL92版本)。

2)数据库供应商和数据库工具供应商能够提供低层驱动程序。因此它们能够为其特定数据库产品优化其驱动程序。

四、配置数据库驱动步骤:

1、找到驱动程序并配置

1)在classpath中指定驱动程序(jar文件)。

2)把驱动文件copy到JAVA_HOME\jre\lib\ext\

注:Java内置了Jdbc-Odbc驱动,无须额外工作。

2、代码

导包import java.sql.*;

1)注册驱动:Class.forName("驱动程序名")

2)取得连接:Conection

con=DriverManager.getConnection(“数据库路径”);

Statement

stmt=con.createStatement();//建立操作数据库的实例

//方法createStatement(int

resultSetType,int resultSetConcurrency)其中参数resultSetType可以取值为

ResultSet.TYPE_FORWARD_ONLY(默认取值,记录集只能向前滚动),

ResultSet.TYPE_SCROLL_INSENSITIVE,

or ResultSet.TYPE_SCROLL_SENSITIVE(这两个值均可以使记录集前后滚动)。

第二个参数resultSetConcurrency取值为

CONCUR_READ_ONLY:结果集不能用于更新数据库。

CONCUR_UPDATABLE:结果集可以用于更新数据库。

注意1:实际上,数据库驱动程序可能无法支持滚动或更新光标的请求。(DatabaseMetaData类的supportsResultSetType和supportResultSetConcurrency方法负责告诉某个数据库究竟支持哪些结果集类型和并发性模式。)但是,即使数据库支持所有的结果集模式,某个特定的查询也可能无法产生带有自己要求的所有属性的结果集。(例如,复杂查询的结果集可能不是可更新的结果集。)在这种情况下,executeQuery方法将返回功能较小的ResultSet,并且将一个警告消息添加给连接对象。可以使用Connection类的getWarnings方法来检索警告消息。另外,可以使用ResultSet类的getType和getConcurrency方法来查找某个结果集实际上属于何种模式。如果不检查结果集的功能,启动一个不支持的操作,比如对不可滚动的结果集执行的previous操作,那么该操作便会抛出一个SQLException异常。

注意2:如果想要在Web应用程序中建立一个可滚动的视图,那么可滚动的结果集将会显示出一个很大的缺陷。它要求在两个请求访问的Web页之间,将与数据库之间的连接始终保持打开状态。但是,用户可能离开他们的计算机很长一段时间,也可能放弃这个站点,退出他所占用的连接。这种情况就很不好,因为数据库连接是个很稀缺的资源。在这种情况下,请使用一个行集合。RowSet接口扩展了ResultSet接口的功能,但是行集合并不受数据库连接的束缚。它们可以放入高速缓存,也可以展示来自非数据库信息来源的数据。

注意3:并不是所有的查询都能够返回可更新的结果集,如果查询是合并查询,它涉及到多个表格,那么其结果集就可能不是可更新的结果集。如果查询只涉及单个表格,或者是由其主键合并的多个表格,那么可以期望该结果集是可以更新的。可以调用ResultSet类的getConcurrency方法来确定结果集是否是可更新的。

//方法getRow()是ResultSet类的方法,作用是取得当前行的行号,将记录移到最后一条上就可以取得总的记录数,取值从1开始,当为0时表示没有记录。

ResultSet rs=stmt.executeQuery("标准的查询SQL语句");

int num=stmt.executeUpdate(“ SQL增,删,改语句”);

while(rs.next())

{

rs.getString(1);

rs.getInt(2);//根据字段的类型确定使用getString()或getInt()方法。

}

con.close();

3)进行增加,删除,修改操作时一定要记住操作完毕要关闭数据库,否者记录无法找到;

五、连接数据库基本步骤

1、注册驱动:Class.forName(驱动程序名)//”sun.jdbc.odbc.JdbcOdbcDriver”

2、通过DriverManager找出当前注册的驱动程序的一个枚举或直接取得连接:DriverManager.getConnection("地址");//jdbc:odbc:数据源名

3、建立一个可执行数据操作的对象:连接对象.createStatement

4、执行操作,取得结果集:

1) 查询:stmt.executeQuery(sql语句)

2) 增、删、改:stmt.executeUpdate(sql语句)

3) 增、删、改、查:stmt.execute(sql语句)

5、遍历结果集,循环输出结果

while(rs.next())

rs.get

1)Int /列值:查询后所在临时表的列值

2)String \列名:

...

六、驱动程序

1、Driver:不同数据库的驱动有其专用书写格式。(类名)

2、URL:

写法:"jdbc : odbc : mydb ( :属性1=值1;属性2=值2;)"

格式:

jdbc subProtocol subName

(1) (2) (3)

(1)主协议,这是JDBC唯一允许的形式

(2)子协议,数据库厂商提供

(3)专用于驱动程序所代表的子协议所需要的其他信息。

七、DriverManager类

该类是负责选择数据库驱动程序和建立新数据库连接的类。

deregisterDriver:从DriverManager的列表中删除一个驱动程序。

registerDriver:向DriverManager注册给定驱动程序。

GetDriver(URL):试图查找能理解给定 URL 的驱动程序。

1、管理驱动程序:

2、获得连接:

getConnection

(1)URL

(2)URL properties

(3)URL,userName,password

3、设置/读取连接到DB的等待时间:

set\LoginTimeOut()

get/

4、日志记录方法

1)设置/获取.日志信息

set\Logwriter

get/

2)显示日志信息:println

八、Driver

1) acceptsURL

2) connect

3) getMajor Version:驱动程序主版本信息

Minor:副版本

九、Connection

1、生成语句

1)createStatement:建立一个可操作结果集的对象

2)prepareCall:建立一个可操作的存储过程的实例

3)prepareStatement:建立一个预处理功能的对象,它能有效的解决变量的问题

PrepareStatement ps=new

PrepareStatement(sql表达式);

2、获得数据库信息及事务支持

1)commit:提交

2)rollback:回滚

3)set TransactionIsolation 设置事务隔离性级别

4)get TransactionIsolation 获得事务隔离性级别

5)getAutoCommit 获得当前自动提交方式的设置

6)setAutoCommit 设置当前自动提交方式

3、连接状态:

1)close

2)isClosed

十、Statement和PreparedStatement

1、运行语句:

1)execute:返回Boolean类型

2)executeQuery(根据查询语句获得结果集)

3)executeUpdate(执行增、删,改等SQL语句)

2、批处理更新:

1) addBatck

2) clearBathch

十一、ResultSet类

每个Java编程语言类型都有它的访问器,如getString和getDouble。每个访问器都有两种形式,一个用于接受数字参数,另一个用于接受字符串参数。当提供一个数字参数时,将引用带有该参数的列。

注意:与数组索引不同,数据库的列号码是从1开始的。

当输入一个字符串参数时,就可以得到结果集中使用该名字的列。使用数字参数的效率要更高一些,但是字符串参数使得代码更易于阅读和维护。

注意:可以用getString和setString方法对列进行取值和赋值。

previous方法

next()

relative(int rows)

updateXxx方法只能用于修改行的值,而不能修改数据库。要想更新数据库必须调用updateRow方法。该方法用于将当前行中的所有信息更新发送给数据库。如果将光标移到另一行上,但是没有调用updateRow方法,那么所有的更新都将从行集合中被删除,并且这些更新永远不会被传递给数据库。也可以调用cancelRowUpdates方法,撤销对当前行的更新。

如果想要将一个新行添加给数据库,首先要使用moveToInsertRow方法,将光标移到一个特定的位置,称为插入行。然后应该调用updateXxx指令,在插入行的位置建立一个新行。最后,这些操作都完成后,还应该调用insertRow方法,将该新行传递给数据库。当完成插入操作时,调用moveToCurrentRow方法,将光标移回到调用moveToInsertRow方法之前的位置。

DeleteRow//删除当前光标下的行。这个方法能够立即从结果集和数据库中删除该行。

十二、DatabaseMetaData:数据库元数据和ResultSetMetaData:记录集元数据

通过此类可以得到关于数据库和其表格结构的详细信息。如列名、列类型等。对于自己所设计的数据库,会很清楚数据库的结构,此时用此类用处不大。但对于编写用于所有数据库的工具的编程人员来说,结构信息是极其有用的。

在SQL中,用于描述数据库或者它的各个部分之一的数据称为元数据(metadata)(以便将它与存放在数据库中的实际数据区分开来)。可以得到两种类型的元数据,即关于数据库的元数据和关于结构集合的元数据。

DatabaseMetaData类用于提供有关数据库的数据。

ResultSetMetaData类用于报告关于结果集的信息。如各个列的号码和每个列的名字、类型和字段的宽度等信息。

得到关于数据库的元数据的取得方法:Connection连接数据库的对象.getMetaData();

ResultSet rs =

meta.getTables(null,null,null,new String[]{“TABLE”});

//返回一个含有数据库中所有表格的有关信息的结果集。

Rs.next();rs.getString(3);//取得表格的名字。

得到关于结构集合的元数据的取得方法:ResultSet记录集的对象.getMetaData();

getColumnCount:得到当前记录集的列数

getColumnName

getColumnType

getColumnTypeName

getTableName

十三、将驱动程序包装到文件里的方法:

1)创建一个文本文件,后缀名是.properties(可以用Editplus打开),将该文件和类文件放在同一目录位置下。

2)将驱动程序写入文件里:driver =

sun.jdbc.odbc.JdbcOdbcDriver:com.microsoft.jdbc.sqlserver.SQLServerDriver。不同数据库的驱动程序可以用冒号分割连写。还可以写入数据库名称url=jdbc:odbc:hao_access。

3)在类里创建类Properties的对象,Properties prop=new

Properties();创建读文本文件的输入流对象,FileInputStream in=new

FileInputStream("文本文件名(包含后缀,例如db.properties)");

4)调用方法: prop.load(in);

5)取值:String dr=prop.getProperty("driver");

if(dr==null)

{System.out.print("没有找到驱动程序");}

else

{System.setProperty("jdbc.drivers",dr);}

6)其中"jdbc.drivers"是固定写法,到此驱动程序包装完毕。

注:上述代码相当于原连接数据库的Class.forName("驱动程序名")这句话,往下一样。

十四、相应的数据库连接方法

数据源连接数据库(即JDBC-ODBC桥连接):

Driver:sun.jdbc.odbc.JdbcOdbcDriver

URL:jdbc:odbc:数据源名

Access数据库:

Driver:"sun.jdbc.odbc.JdbcOdbcDriver"

URL:"jdbc:odbc:driver={Microsoft

Access Driver (*.mdb)};DBQ=D:/xpkj/SI.mdb";

SQL Server数据库:

Driver:com.microsoft.jdbc.sqlserver.SQLServerDriver

URL:jdbc:microsoft:sqlserver://host(IP):端口(1433);DatabaseName=数据库名

JTDS连接方式:

Driver:net.sourceforge.jtds.jdbc.Driver

URL:jdbc:jtds:sqlserver://host(IP):端口(1433)/数据库名;tds=8.0;lastupdatecount=true

Oracle数据库:

Driver:oracle.jdbc.driver.OracleDriver

URL:jdbc:oracle:thin:@host(IP):port(1521):SID

MySQL数据库:

Driver:com.mysql.jdbc.Driver

URL:jdbc:mysql://localhost(:3306)/mysql(?useUnicode=true&characterEncoding=GB2312)

注意:第一个括号不知道是否有。第二个括号是当从数据库取出中文是乱码时,加上这段代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值