Chinaunix首页 | 论坛 | 博客
  • 博客访问: 703782
  • 博文数量: 147
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-22 10:36
文章分类

全部博文(147)

文章存档

2011年(1)

2010年(1)

2009年(35)

2008年(110)

我的朋友

分类: Java

2008-09-17 17:40:00

jabc简介:

Java程序对特定数据库的访问操作,要被与其对应的JDBC驱动程序翻译成该数据库的本地操作才能实现,所以JDBC驱动程序担当了一个翻译器的角色。不同的数据库拥有不同的JDBC驱动程序,JDBC提供一个java.sql.Driver接口,各个数据库厂商根据自己数据库产品的特点来实现这个接口(即不同数据库产品的JDBC驱动由其本身提供),Java程序仅通过标准接口来访问各种数据库,从而实现代码的数据库平台无关性。在Java程序访问数据之前,需要通过Class.forName("")的方式来装载JDBC驱动程序(例如Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"),之所以用Class.forName而没有用ClassLoader.load(),就是因为需要JVM完成Driver的初始化工作,而不仅仅是装载),然后通过一个统一的工厂类Java.sql.DriverManager来取得数据库连接,并执行各种操作
jabc是一种可以执行sql语句的java提供的api
数据库的jdbc连接过程:
1.加载驱动:
  Class.forName(driverName);
例如:Class.forName("Oracle.jdbc.driver.OracleDriver");
2.建立连接:
  String url="jdbc:mysql://localhost/数据库名?user=root&password=ranran";
  Connection con=DriverManager.getConnection(url);
3.创建sql语句
  Statement:由方法createStatement()创建,用于发送简单的sql语句。有几个常用的方法:
boolean execute(String sql)throws SQLException
ResultSet executeQuery(String sql)throws SQLException 执行查找语句 返回结果集
int executeUpdate(String sql)throws SQLException  执行插入删除更新语句
  PreparedStatement:由方法preparedStatement()语句创建,Statement对象在每次执行sql语句时,都将sql语句传递给数据库,那么多次执行同一条语句时就会效率很低,创建PrementStatement对象时将sql语句传递给数据库做预编译。

例子:PreparedStatement updateSales=conn.prepareStatement("update goods set sales=?where goods_name like ?");

updateSales.setInt(1,75);

updateSales.setString(2,"wuxiaoxiao");

updateSales.executeUpdate();


  CallableStatement:由方法prepareCall()创建,该对象用于执行数据库中已经创建好的存储过程。

例子: 

1.创建一个CallableStatement对象:

 //将创建存储过程的代码给producename

  String producename=.....

//调用存储过程的实际命令

String call_procedure_string="{call"+procedurename+"(?,?,?,?,?,?,?)}";

//创建CallableStatement对象

CallableStatement callableStatement=conn.prepareCall(call_procedure_string);

2.初始化CallableStatement参数

 callableStatement。setString(1,“keyword”);

 ......

3.执行

  callableStatement.executeUpdate();

 

  ResultSet接口提供了对于数据表的访问,该对象一般是由一条sql语句产生的!

在这里需要注意的是结果集的属性:

一个resultSet对象表示的结果集默认是不可滚动的,只读的,指针初始化指向第一之前。

不可滚动意味着指针只有一个移动方向,只能从前向后移动!此时只能调用next(),移到结束时候,也不能调用beforeFirst()方法

只读意味着结果集不可更改,不能通过结果集更新数据库的记录

如果想改变这些默认的设置,需要在创建Statement对象时指定结果集的属性,Connection接口有一个带参数的createStatement()方法如下:

Statement createStatement(int resultSetType,int resultSetConcurrency)throws SQLException

其中resultSetType指定结果集是否可以滚动:

TYPE_FORWARD_ONLY  //指针只能从前向后滚动,默认值

TYPE_SCROLL_INSENSITIVE //结果集可以滚动,对数据更新不敏感

TYPE_SCROLL_SENSITIVE  //结果集可以滚动,对数据更新敏感

对数据更新是否敏感指当执行插入,删除,更新等其他sql语句改变了表的数据时,当前结果集中的数据是否随之更新

其中resultSetConcurrency属性表示结果集是否可以更新

CONCUR_READ_ONLY //只读,默认

CONCUR_UPDATABLE //可更新

例如:下面语句创建Statement对象时,指定结果集的属性为可滚动,只读:

Statement statement=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)

当结果集为可更新时,先调用ResultSet接口的一组update()方法更新当前行指定列数据,在调用updateRow()方法将改变后的当前行数据提交给数据库中的表,调用insertRow()方法在表中插入一行,调用deleteRow()方法删除当前行并提交!


例子:
pubic class JDBCConnection{
public static void main(String args[]){
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
//加载驱动
Class.forName("Oracle.jdbc.driver.OracleDriver");
//建立连接
String url="jdbc:mysql://localhost/数据库名?user=root&password=ranran";
con=DriverManager.getConnection(url);
//创建语句对象
stmt=con.createStatement();
//构造sql语句
String sql="....";
//执行sql语句
 rs=stmt.executeQuery(sql);
....
}
}

阅读(1558) | 评论(0) | 转发(0) |
0

上一篇:static和final修饰符

下一篇:完全卸载oracle

给主人留下些什么吧!~~