java 数据库基本操作
java数据库操作基本流程
几个常用的重要技巧
可滚动更新的记录集
批量更新
事务处理
java数据库操作基本流程取得数据库连接 执行sql语句 处理执行结果 释放数据库连接
取得数据库连接
)用DriverManager取数据库连接
例子
String classNameurluidpwd;
className = oraclejdbcdriverOracleDriver;
url = jdbc:oracle:thin:@::orasvr;
uid = system;
pwd = manager;
ClassforName(className);
Connection cn = DriverManagergetConnection(urluidpwd);
)用jndi(java的命名和目录服务)方式
例子
String jndi = jdbc/db;
Context ctx = (Context) new InitialContext()lookup(java:comp/env);
DataSource ds = (DataSource) ctxlookup(jndi);
Connection cn = dsgetConnection();
多用于jsp中
执行sql语句
)用Statement来执行sql语句
String sql;
Statement sm = cncreateStatement();
smexecuteQuery(sql); // 执行数据查询语句(select)
smexecuteUpdate(sql); // 执行数据更新语句(deleteupdateinsertdrop等)statementclose();
)用PreparedStatement来执行sql语句
String sql;
sql = insert into user (idname) values (??);
PreparedStatement ps = cnprepareStatement(sql);
pssetInt(xxx);
pssetString(xxx);
ResultSet rs = psexecuteQuery(); // 查询
int c = psexecuteUpdate(); // 更新
处理执行结果
查询语句返回记录集ResultSet
更新语句返回数字表示该更新影响的记录数
ResultSet的方法
next()将游标往后移动一行如果成功返回true否则返回false
getInt(id)或getSting(name)返回当前游标下某个字段的值
释放连接
cnclose();
一般先关闭ResultSet然后关闭Statement(或者PreparedStatement)最后关闭Connection
可滚动更新的记录集
创建可滚动更新的Statement
Statement sm = cncreateStatement(ResultSetTYPE_SCROLL_ENSITIVEResultSetCONCUR_READ_ONLY);
该Statement取得的ResultSet就是可滚动的
创建PreparedStatement时指定参数
PreparedStatemet ps = cnprepareStatement(sqlResultSetTYPE_SCROLL_INSENSITIVEResultSetCONCUR_READ_ONLY);
ResultSetabsolute();
批量更新
Statement
Statement sm = cncreateStatement();
smaddBatch(sql);
smaddBatch(sql);
smexecuteBatch()
一个Statement对象可以执行多个sql语句以后批量更新这多个语句可以是deleteupdateinsert等或兼有
PreparedStatement
PreparedStatement ps = cnpreparedStatement(sql);
{
pssetXXX(xxx);
psaddBatch();
}
psexecuteBatch();
一个PreparedStatement可以把一个sql语句变换参数多次执行一次更新
事务的处理
关闭Connection的自动提交
cnsetAutoCommit(false);
执行一系列sql语句
要点执行每一个新的sql语句前上一次执行sql语句的Statement(或者PreparedStatemet)必须先close
Statement sm ;
sm = cncreateStatement(insert into user);
smexecuteUpdate();
smclose();
sm = cncreateStatement(insert into corp);
smexecuteUpdate();
smclose();
提交
cncommit();
如果发生异常那么回滚
cnrollback();