1、JDBC(Java Database Connection):java連接數據庫統一接口API,底層主要通過直接的JDBC驅動和
JDBC-ODBC橋驅動實現與數據庫的連接。
1>.JDBC驅動程序類型:
jdbc是什么意思,<1>.JDBC-ODBC橋加ODBC驅動程序:需要ODBC驅動,適合于企業網或三層結構應用程序
<2>.本地API:需要驅動程序的二進制代碼支持
<3>.JDBC網絡純java驅動程序:將JDBC轉換為與DBMS無關的網絡協議,又被某服務器轉換為一種DBMS
協議,以操作各種數據庫
java。<4>.本地協議純java驅動程序:將JDBC調用直接轉換成JDBC所使用的網絡協議
2、JDBC操作基本流程:
1>.導入驅動:實例化時自動向DriverManager注冊(DriverManager.registerDriver())
<1>.Class.forName(driver)
jdbc java?<2>.Class.forName(driver).newInstance()
<3>.new driver()
2>.取得數據庫連接(Connect to the DataBase)
<1>.用DriverManager取數據庫連接
jdbc使用?Connection cn = DriverManager.getConnection(url,uid,pwd);
<2>.用jndi(java的命名和目錄服務)方式:多用于jsp
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
DataSource ds = (DataSource) ctx.lookup(jndi);
java ssh,Connection cn = ds.getConnection();
3>.執行sql語句(Execute the SQL)
<1>.用Statement來執行sql語句
Statement sm = cn.createStatement();
jdbc數據庫連接池。sm.executeQuery(sql);?// 執行數據查詢語句(select)
sm.executeUpdate(sql);?// 執行數據更新語句(delete、update、insert、drop等)
<2>.用PreparedStatement來執行sql語句
String? sql? = "insert into user (id,name) values (?,?)";
jdbc怎么用?PreparedStatement ps = cn.prepareStatement(sql);
ps.setInt(1,xxx);
ps.setString(2,xxx);
...
jdk的使用,ResultSet rs = ps.executeQuery();?// 查詢
int c = ps.executeUpdate();?// 更新
4>.處理執行結果:
<1>.查詢語句,返回記錄集ResultSet
java jdbc執行sql語句、<2>.更新語句,返回數字,表示該更新影響的記錄數
<3>.ResultSet的方法:while(re.next())
next(),將游標往后移動一行,如果成功返回true;否則返回false
getInt("id")或getSting("name"),返回當前游標下某個字段的值
java resultset?5>.釋放數據庫連接
rs.close();
ps.close(); /stat.close();
con.close();
java的jdbc連接數據庫。3、創建可滾動、更新的記錄集
1>.創建Statement時指定參數:該Statement取得的ResultSet就是可滾動的
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,
ResultSet.CONCUR_READ_ONLY);
2>.創建PreparedStatement時指定參數
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs.absolute(9000);
4、批量更新
1>.Statement:可執行多個sql語句(delete、update、insert等或兼有),批量更新
Statement sm = cn.createStatement();
sm.addBatch(sql1);
sm.addBatch(sql2);
...
sm.executeBatch()
2>.PreparedStatement:可把一個sql語句,變換參數多次執行,一次更新
PreparedStatement ps = cn.preparedStatement(sql);
{
ps.setXXX(1,xxx);
...
ps.addBatch();
}
ps.executeBatch();
5、事務的處理
1>.關閉Connection的自動提交
cn.setAutoCommit(false);
2>.執行一系列sql語句:執行新sql前,以前的Statement(或PreparedStatemet)須close
Statement sm ;
sm = cn.createStatement(insert into user...);
sm.executeUpdate();
sm.close();
sm = cn.createStatement("insert into corp...);
sm.executeUpdate();
sm.close();
3>.提交
cn.commit();
4>.如果發生異常,那么回滾
cn.rollback();
6、SQL語句簡介:
1>.Select ... from T Where...
2>.Insert into T(...)values(...)
3>.Create Table T(...)
4>.Delete from T Where ...
5>.Update T set f1=... and f2 =... where ...
6>.Drop table T
7、JDBC示例:
class DBUtil{
//local variable
String driver = null;
String url = null;
Statement stat = null;
//set local variable value
public DBUtil(String driver,String url){
this.driver = driver;
this.url = url;
}
//get con
public Connection getConnection() throws ClassNotFoundException, SQLException{
Connection con = null;
Class.forName(driver);
con = DriverManager.getConnection(url);
return con;
}
//execute select sentence
public List executeQuery(String sql){
ResultSet rs = null;
Connection con = null;
try {
con = getConnection();
Statement stat = con.createStatement();
rs = stat.executeQuery(sql);
while(rs.next()){
rs.getString("");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException ce) {
ce.printStackTrace();
}finally{
try{
if(null == con){
con.close();
con = null;
}
if(null == stat){
stat.close();
stat = null;
}
if(null == rs){
rs.close();
rs = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return null;
}
//execute proceduce
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态