lomboz_eclipse (MyEclipse,JBuilder)
JDBC(Java Database Connectivity)
JDBC 简介
(c,c++,java...) ---- (API for Oracle) -->Oracle
(c,c++,java...) ---- (API for SQLServer) -->SQLServer
(c,c++,java...) ---- (API for Mysql) -->Mysql
(c,c++,java...) ---- (API for ...) -->Oracle
(c,c++,java...)--(ODBC,JDBC)-->(Oracle,SQLServer.Mysql...)
SQL语言回顾
select * from T where...
insert into T values(...)
create table T()
delect form T where...
update T set t1=..and t2=.. where t3=...
drop table T
JDBC基础编程(java.sql.*)
JDBC编程步骤
1.Load the Driver(装载并注册数据库的JDBC驱动程序,不同数据库的不同连接类库,将Oracle的JDBC类库导入到classpath中)
(1)载入JDBC驱动:Class.forName()|Class.forName().newInstance()|new DriverName()
(2)注册JDBC驱动: java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
实例化时自动向DriverManager注册,不需显示调用DriverManager.registerDriver方法
2.Connect to the DataBase
(1)DriverManager.getConnection()
要建立与数据库的连接,首先要创建指定数据库的URL。连接数据库的URL对象,利用DriverManager 的getConnection方法建立的。数据库URL对象与网络资源的统一资源定位类似,其构成格式如下:
jdbc:subProtocol:subName://hostname:port;DatabaseName=ⅹⅹⅹ
其中:
jdbc表示当前通过Java的数据库连接进行数据库访问;
subProtocol表示通过某种驱动程序支持的数据库连接机制;
subName表示在当前连接机制下的具体名称;
hostname表示主机名;
port表示相应的连接端口;
DatabaseName表示要连接的数据库的名称。
这里以与Oracle数据库的连接为例:
连接Oracle 8/8i/9i数据库(用thin模式) url = jdbc:oracle:thin:@hostip:1521:oracleSID;
注意:hostip指主机的ip地址,oracleSID指数据库的SID。如何查看 oracleSID
1.在oracle的安装目录下,如D:\oracle\product\10.2.0\db_1\dbs,看文件名如SPFILEORCL.ORA,那么就是orcl,也就是说文件名字是 "SPFILE******.ORA ",那种的 "**** "就是SID
2.D:\oracle\product\10.2.0\oradata\SID文件夹... 或D:\oracle\product\10.2.0\db_1\dbs\SPFILESID名称.ORA
3.select instance_name from v$instance
再者确定连接数据库的用户名与密码,即user和password 的值:user = “ⅹⅹⅹ “; password = “ⅹⅹⅹ“;
最后使用如下语句:
Connection con=(java.sql.)DriverManager.getConnection(url,user,password);
3.Execute the SQL(用连接创建语句对象)
(1)Connection.CreateStatement()
(2)Statement.executeQuery(select语句)//返回一组结果集,其像游标,指针指在第一条记录的上面
(3)Statement.executeUpdate(insert,update,delete语句)
String sql = "insert into dept2 values (" + deptno + ",'" + dname + "','"+loc+"')";//取值
System.out.println(sql);
4.Retrieve the result data
(1)循环取得结果while(rs.next())
5.Show the result data
(1)将数据库中的各种类型转换为Java中的类型(getXXX)方法
6.Close
(1)依次关闭ResultSet、Statement和Connection对象(XXX.close())
close the resultset/ close the statement / close the connection
for example:
import java.sql.*;
public class TestJDBC {
public static void main(String[] args){
ResultSet rs = null;
Statement stmt = null;
Connection conn = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");//new 一个驱动类的实例
//new oracle.jdbc.driver.OracleDriver();
conn = DriverManager.getConnection("jdbc:oracle:thin:@10.3.5.19:1521:XST", "scott", "tiger");
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from dept");
while(rs.next()){
System.out.println(rs.getString("deptno"));
System.out.println(rs.getInt(1));
}
}catch(ClassNotFoundException e){
e.printStackTrace();//logforg记录错误
}catch(SQLException e){
e.printStackTrace();
}finally{
try {
if(rs!=null){
rs.close();
rs = null;
}
if(stmt!=null){
stmt.close();
stmt = null;
}
if(conn!=null){
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
JDBC编程高级
String sql = "insert into dept2 values (" + deptno + ",'" + dname + "','" + loc + "')";
prepareStatement 灵活指定SQL语句中的变量
pstmt = conn.preparedStatement("insert into dept2 values (?,?,?)");
pstmt.setInt(1, deptno);
pstmt.setString(2, dname);
pstmt.setString(3, loc);
pstat.executeUpdate();
CallableStatement 对存储过程进行调用
CallableStatement cstmt = conn.prepareCall("{call p(?,?,?,?)}");//调用过程p
cstmt.registerOutParameter(3, Types.INTEGER);//设置第三个参数为输出变量,类型为整型
cstmt.setInt(1, 3);//设置第一个变量的值为3
System.out.println(cstmt.getInt(3))//取出第三个变量的值并输出
Batch 批处理(Statement,PreparedStatement 都可以用 addBatch();executeBatch())
Transaction 运用事务处理
conn.setAutoCommit(false);
........
conn.commit();
conn.setAutoCommit(true);
catch(SQLException e){if(conn!=null){conn.rollback();conn.setAutoCommit(true);}}
可以前后移动结果集 Movable ResultSet
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
Rs.next()
Rs.islast()
Rs.isAfterLast()
Rs.absolute()
Rs.getRow() 返回值当前记录行 与Rs.last()可以确定一共有多少条记录
Updatable ResultSet(*)
DataSource and RowSet
1)DataSource (数据源,一般不再单机上实现)
DriverManage(拿到跟数据库的连接) 的替代;连接池的实现;分布式实现(DataSource的属性可以动态改变)
2)RowSet
新的ResultSet;从ResultSet继承;支持断开的结果集;支持JavaBean标准
example 2
import java.sql.*;
public class TestPrepared {
public static void main(String[] args) {
if(args.length!=3){
System.out.println("Parameter Error!Please try again");
System.exit(-1);
}
int deptno = 0;
try {
deptno = Integer.parseInt(args[0]);
} catch (NumberFormatException e1) {
System.out.println("Parameter Error!deptno shold be Number format");
System.exit(-1);
}
String dname = args[1];
String loc = args[2];
Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@10.3.5.19:1521:orcl","scott","tiger");
//String sql = "insert into dept2 values (" + deptno + ",'" + dname + "','" + loc + "')";
pstmt = conn.prepareStatement("insert into dept2 values (?,?,?)");
pstmt.setInt(1, deptno);
pstmt.setString(2, dname);
pstmt.setString(3, loc);
pstmt.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch(SQLException e){
e.printStackTrace();
} finally{
try {
if(pstmt != null){
pstmt.close();
pstmt = null;
}
if(conn != null){
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
example 3
import java.sql.*;
public class TestTransaction {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@10.3.5.19:1521:orcl","scott","tiger");
conn.setAutoCommit(false);
stmt= conn.createStatement();
stmt.addBatch("insert into dept2 values(99,'salse','haiyang')");
stmt.addBatch("insert into dept2 values(99,'salse','haiyang')");
stmt.addBatch("insert into dept2 values(99,'salse','haiyang')");
stmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
try {
if(conn!= null){
conn.rollback();
conn.setAutoCommit(true);
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{
try {
if(stmt!=null){
stmt.close();
stmt = null;
}
if(conn!=null){
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
Lomboz是Eclipse的一个J2EE的插件,它将很多Java应用服务器、J2EE组件和Web应用开发集成到Eclipse中,可以帮助Java开发者使用Eclipse建立、测试、部署J2EE应用。 一、Lomboz特点-支持JSP编写,包括:语法着色和语法...
.lomboz-R-3.3-200710290621.zip
(WORD版本) Eclipse_lomboz_jboss 开发指南
eclipse(Lomboz_JSP_JAVA_WEB_插件的安装与配置)
org.objectweb.lomboz-R-3.2-200610201336
Eclipse的Lomboz插件,本人的Eclipse平台:eclipse-jee-galileo-SR1-win32+org.objectweb.lomboz-R-3.3-200710290621+struts-2.1.8.1-all+tomcatPluginV321+ org.eclipse.babel.nls_eclipse_zh_3.5.0.v...
org.objectweb.lomboz.hibernateide-R-3.3-200710290621.zip
Lomboz-Eclipse+TOMCAT插件教程
Eclipse的汉化包,可以用于Eclipse3.5.1,本人的Eclipse平台:eclipse-jee-galileo-SR1-win32+org.objectweb.lomboz-R-3.3-200710290621+struts-2.1.8.1-all+tomcatPluginV321+ org.eclipse.babel.nls_eclipse_zh_...
Java web解决方案,学习jsp的必备工具。
eclipse_3.2 lomboz插件
使用Eclipse开发J2EE应用(集成Eclipse,Lomboz和JBoss)
eclipse jsp包(全部)
Lomboz packages Eclipse BPEL Editor, Spring IDE Beans Editor and Hibernate Mapping Tools for eclipse. These bundles are already included with the all-in-one and Lomboz with Prerequisites ...
JSP自定义标签的实例 技术平台:Tomcat 5.0服务器; 开发工具:Eclipse+Lomboz、EditPlus开发工具; 操作系统:Windows XP Professional操作系统。
Eclipse3_4+Lomboz3_3+Tomcat6_0配置
Eclipse3_3+Jboss4_2+Lomboz3_3环境安装配置
JSP论坛系统 数据库:mysql数据库; 技术平台:Tomcat 5.0服务器; 开发工具:Eclipse+Lomboz、EditPlus开发工具; 操作系统:Windows XP Professional操作系统。
4. Eclipse中安装 Lomboz 35 4.1. 持久化对象与OID 35 4.1.1. 对持久化对象的要求 35 4.1.2. OID 36 5. Eclipse使用技巧 36 5.1. 一般插件安装 36 5.2. 自定义注释 37 5.3. 常用的快捷键 37 5.4. 代码编写小技巧 37 ...