154.Oracle数据库SQL开发之 JAVA——使用JDBC包
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50185963
打开数据库连接之前,首先在JAVA程序注册ORACLE JDBC驱动程序。
注册JDBC驱动程序有两种方法:
n 使用java.lang.class类中的forname()方法
n 使用JDBCDriverManager类中的registerDriver()方法
例如:
Class.forName(“oracle.jdbc.OracleDriver”);
第二种注册如下:
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
打开数据库连接主要有两种方法:
n 使用DriverManager类的getConnection()方法
n 使用Oracle数据源对象,先创建它,然后连接它。该方法使用了设置数据库连接详细信息的标准化方法,而且ORACLE数据源对象可以和JNDI一起使用。
getConne ction方法返回一个JDBCconnection对象。
调用如下:
DriverManager.getConnection(URL,username,password);
URL是程序要连接的数据库和要使用的JDBC驱动程序。
如下:
Connection myConnection =DriverManager.getConnection(
“jdbc:oracle:thin:@localhost:1521:ORCL”,
“store”,
“store_password”);
使用Oracle JDBC Thin驱动程序。返回Connection对象存储在myConnection中。
数据库连接通过Oracle Net进行。
数据库URL指定程序连接的数据库位置。URL的结构取决于提供JDBC驱动程序的供应商。如果使用的是ORACLE 的JDBC驱动程序,数据库URL结构如下:
Driver_name:@driver_information
l Driver_name是程序使用的ORACLE JDBC驱动程序的名称
u Jdbc:oracle:thin是oracle jdbc thin驱动程序
u Jdbc:oracle:oci 是 oracle JDBC OCI驱动程序
l Driver_information 连接数据库所需的特定于驱动程序的信息。取决于所使用的驱动程序。如果是Oracle JDBC Thin驱动程序,特定于驱动程序的信息应按如下格式设定:
n Host_name:port:database_SID
对于所有ORACLE JDBC驱动程序,包括Thin驱动程序和各种OCI驱动程序,特定于驱动程序的信息还可以使用Oracle Net键值对指定。
(description=(address=(host=host_name)(protocol=tcp)(port=port))(connect_data=(sid=database_SID)))
可以使用ORACLE数据源连接数据库。ORACLE数据源使用了一个比使用DriverManager.getConnection()方法的方法更标准化的方法,提供了多种参数来连接数据库。
ORACLE数据源也使用JNDI注册。将JNDI用于JDBC是非常有用的,允许注册或绑定数据源,然后在程序中查找数据源,而不需要提供完整的数据连接详细信息。
使用ORACLE数据源需要执行下列3个步骤:
u 创建oracle.jdbc.pool.OracleDataSource类的Oracle数据源对象
u 使用类型中定义的set方法,设置oracle数据源对象属性
u 使用getConnection()方法,通过Oracle数据源对象连接数据库
接下来需要在类java.sql.Statement中创建一个JDBC Statement对象。一个Statement对象用于表示一个SQL语句,比如查询、DML语句或DLL语句。
例如:
Statement myStatement=myConnection.createStatement();
根据要执行的SQL语句,使用Statement类中不同的方法来运行SQL语句。如果查询语句,使用executeQuery()方法。如果要执行INSERT、UPDATE或DELETE语句。使用executeUpdate方法。如果事先不知道要执行的SQL语句的类型,可以使用execute方法,它可以执行任何SQL语句。
还有另一个JDBC类可用于表示SQL语句:PreparedStatement类。提供了比Statement类更高级的功能。
要使用JDBC执行查询,可以使用Statement对象的executeQuery方法,接受一个Java String其中包含查询的文本。
一个查询可能返回多行,所以executeQuery方法返回一个对象,存储查询返回的行。该对象称为JDBC结果集(result set),属于java.sql.ResultSet类。
n 创建一个ResultSet对象,使用查询返回的结果填充它
n 使用get方法从ResultSet对象中读取列值
n 关闭ResultSet对象
如下:
ResultSetcustomerResltSet=myStatement.executeQuery(
“selectcustomer_id,first_name,last_name,dob,phone “+”From customers”);
因为execute方法接受一个Java String,可以再程序实际运行时添加SQL语句。
从ResultSet对象总读取列值
要读取存储在ResultSet 中的行的列值,ResultSet类提供了一系列get方法。
在使用GET方法之前,需要理解在ORACLE中用于表示值的数据类型如何映射为兼容的JAVA数据类型。
JAVA程序中用于表示值的类型与ORACLE类型不同。ORACLE使用的类型兼容某些JAVA类型。这样JAVA和ORACLE就可以交换以各自类型存储的数据。
Int和String 类型是核心Java语言的一部分。
Get方法用于读取存储在ResultSet对象中的值。每个get方法的名称很容易理解:取出想要返回的列值JAVA类型的名称,并在其前面加上get这个单词。例如getInt()将列值读取为Java int,使用getString将列值读取为Java String .要将列值读取为java.sql.Date需要使用getDate().
使用完ResultSet对象之后,必须使用close方法关闭ResultSet对象。
使用完ResultSet对象之后,一定要记住关闭它,确保及时地收集对象无用的存储单元。
SQL INSERT语句用于向表中添加行。使用JDBC执行INSERT语句有两种方法:
u 使用Statement类中定义的executeUpdate()方法
u 使用PreparedStatement类中定义的execute方法
SQL UPDATE语句用于更改表的现有行。和使用JDBC执行INSERT语句一样,可以使用Statement类中定义的executeUpdate()方法和PreparedStatement类中定义的execute方法。
SQL DELETE语句用于删除表行。可以使用Statement类中定义的executeUpdate方法或PreparedStatement类中定义的execute方法。
例如:
myStatement.executeUpdate(
“DELETE FROM customer “+”WHERE customer_id= 5”);
JAVA程序中存储数字的问题。ORACLE数据库可以存储精度最大为38位的数字。
JAVA程序中存储整数时,可以使用short,int,long或java.math.BigInteger类型,取决于想要存储的整数大小。
使用不同get方法的用法,它们将列值检索为不同类型,然后将输出存储在合适类型的Java变量中。
数据库表的列可以定义为NULL或NOT NULL。
NULL值存储在JAVA对象中是非常合适的,但对于JAVA数字、逻辑和位类型表示未知。
如何区分零和NULL。
使用ResultSet中的wasNull()方法。
也可以使用JAVA包装类。
默认情况下,使用JDBC执行的INSERT、UPDATE和DELETE语句立即被提交,称为自动提交模式。一般来说,使用自动提交模式不是提交更改的首选方法,可能导致SQL语句的执行时间增加,由于每个语句通常都要提交。
可以使用Connection类的setAutoCommit()方法。
应该关闭自动提交模式,一般会加快程序的运行速度。
进行手动提交提交:
例如:
myConnection.commit();
rollback方法用于取消对数据库所作的更改:
myConnection.rollback();
SQL数据定义语言用于创建数据库用户、表和许多其他类型的组成数据库的数据库结构。
执行DDL语句会导致隐式提交。如果在执行DDL语句之前执行了没有提交的DML语句,这些DML语句也会被提交。
当数据库或JDBC驱动程序发生错误时,会触发java.sql.SQLException异常。
是java.lang.Exception类的子类。比如放入一个try/catch语句中。
例如
Try{
…
} catch (SQLException e) {
…
}
SQLException类定义了4种方法,如:
getErrorCode()当错误发生在数据库或JDBC驱动程序时,该方法返回Oracle错误代码
getMessage()当错误发生在数据时,该方法返回错误信息和5位Oracle错误代码。
当错误发生在JDBC驱动程序时,该方法只返回错误信息。
getSQLState()当错误发生在数据库时,该方法返回包含SQL状态的5位代码。
printStackTrace()异常发生时,该方法显示堆栈的内容。
当Statement和Connection对象不再有用时,也应将其关闭。