亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JDBC案例演示,供參考

2019-11-14 09:16:21
字體:
來源:轉載
供稿:網友

在這寫一下JDBC的案例,將JDBC的一些功能演示下,供參考,至于實體類在此我就不寫出來了,大家根據需求不同記得導入對應的驅動包到項目中,我這里演示的是以MySQL為例,其實區別都不大,如有不對的地方歡迎糾正。

import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;import com.mysql.jdbc.PReparedStatement;import java.sql.ResultSet;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.sql.Clob;import java.sql.DatabaseMetaData;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Savepoint;public class JDBCDemo { // 數據庫地址 localhost表示本地, //3306是mysql默認的端口,db_bank是要鏈接的數據庫 private static String dbUrl="jdbc:mysql://localhost:3306/db_bank"; // 用戶名 private static String dbUserName="root"; // 密碼 private static String dbPassWord="123456"; // 驅動名稱 這里是mysql驅動 private static String jdbcName="com.mysql.jdbc.Driver"; //靜態塊,最優先執行 static{ try{ Class.forName(jdbcName);//加載驅動 }catch(Exception e){ e.printStackTrace();//打印錯誤信息 } } /** * 獲取數據庫連接 * @return * @throws Exception */ public static Connection getCon()throws Exception{ //獲取數據庫鏈接 Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword); return con; } /** * 關閉數據庫連接 * @param con * @param sta * @param rs * @throws Exception */ public static void close(Connection conn,Statement sta,ResultSet rs){ try{ if(rs!=null){ rs.close();//關閉ResultSet } if(sta!=null){ sta.close();//關閉Statement } if(conn!=null){ conn.close();//關閉Connection } }catch(Exception e){ e.printStackTrace();//打印異常信息 } } /** * 新增演示[添加圖書] * @param book 要新增的圖書對象 * @return 返回受影響的行數 * @throws Exception */ private int addBook(Book book)throws Exception{ Connection con=getCon();//得到數據庫鏈接 //得到PreparedStatement對象 PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setString(1, book.getBookName()); // 設置圖書名稱 pstmt.setFloat(2, book.getPrice()); // 設置圖書價格 pstmt.setString(3, book.getAuthor()); // 設置圖書作者 pstmt.setInt(4, book.getBookTypeId()); // 設置圖書類型Id //--------- 大數據字符集 -------------- InputStream inputStream=new FileInputStream(new File("c:/hello.text"));//得到輸入流 //大數據類型,設置圖書內容, //這里演示mysql數據庫類型是longtext pstmt.setAsciiStream(5,inputStream,context.length()); //----大數據二進制,一般存儲圖片,視頻,音頻等 ---- //將圖片轉為輸入流 InputStream inputStream2=new FileInputStream(new File("c:/a.jpg")); //大數據類型,設置封面圖片, //這里演示mysql數據庫類型是longblod pstmt.setBinaryStream(6, inputStream2, pic.length()); //執行并返回受影響的行數 int result=pstmt.executeUpdate(); if(result>0){//大于0表示新增成功 //獲取生成器 ResultSet rs=pstmt.getGeneratedKeys(); if(rs.next()){//判斷是否有值 //得到新增數據后的主鍵值 int key=rs.getInt(1); } } close(con,pstmt,null);//關閉連接 return result; } /** * 修改演示[更新圖書] * @param book 要修改的圖書對象 * @return 返回受影響的行數 * @throws Exception */ private int updateBook(Book book)throws Exception{ Connection con=getCon();//得到數據庫鏈接 //新增語句 String sql="update t_book set bookName=?,price=?,author=?,bookTypeId=? where id=?"; //得到PreparedStatement對象 PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setString(1, book.getBookName());//設置圖書名稱 pstmt.setFloat(2, book.getPrice());//設置圖書價格 pstmt.setString(3, book.getAuthor());//設置圖書作者 pstmt.setInt(4, book.getBookTypeId());//設置圖書類型Id pstmt.setInt(5, book.getId());//設置要修改的圖書id //執行修改并返回受影響的行數 int result=pstmt.executeUpdate(); close(con,pstmt,null);//關閉連接 return result; } /** * 刪除演示[刪除圖書] * @param id 要刪除的圖書id * @return 返回受影響的行數 * @throws Exception */ private int deleteBook(int id)throws Exception{ Connection con=getCon();//得到數據庫鏈接 String sql="delete from t_book where id=?";//刪除語句 //得到PreparedStatement對象 PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setInt(1, id);//設置要刪除的圖書id //執行刪除并返回受影響的行數 int result=pstmt.executeUpdate(); close(con,pstmt,null);//關閉連接 return result; } /** * 查詢演示[查詢所有圖書] * @return 返回list集合 * @throws Exception */ private List<Book> listBook()throws Exception{ List<Book> bookList=new ArrayList<Book>(); Connection con = getCon(); //得到數據庫鏈接 String sql = "select * from t_book";//查詢語句 //得到PreparedStatement對象 PreparedStatement pstmt = con.prepareStatement(sql); //執行并返回結果集ResultSet ResultSet rs = pstmt.executeQuery(); while (rs.next()) {//遍歷結果集rs.next()返回true表示有數據 int id = rs.getInt("id"); // 獲取編號id String bookName = rs.getString("bookName"); // 獲取圖書名稱 bookName float price = rs.getFloat("price"); // 獲取圖書價格 price String author = rs.getString("author"); // 獲取圖書作者 author int bookTypeId = rs.getInt("bookTypeId"); // 獲取圖書類別id //---- 大數據字符集,一般存儲大文本等內容 ---- //大數據類型,獲取圖書內容, //這里演示mysql數據庫類型是longtext Clob c=rs.getClob("context"); //轉為字符串 String context=c.getSubString(1, (int)c.length()); //---大數據二進制,一般存儲圖片,視頻,音頻等 ------- //創建一個輸出流, //將數據庫中的封面圖片保存到該路徑中c:/pic.jpg FileOutputStream out=new FileOutputStream(new File("c:/pic.jpg")); //大數據類型,獲取封面圖片, //這里演示mysql數據庫類型是longblod out.write(b.getBytes(1,(int)b.length())); Book book=new Book(id,bookName,price, author,bookTypeId);//封裝圖書對象 bookList.add(book);//將圖書對象保存集合中 } close(con,pstmt,rs);//關閉連接 return bookList; } /** * JDBC調用存儲過程演示 * 數據庫中有一個存儲過程為 pro_getBookNameById * 該存儲過程功能是通過編號(id)查詢圖書名稱(bookName) * 該存儲過程中有分別有一個輸入參數 * 跟一個輸出參數(輸出參數名稱為 bN ) * @param id 圖書編號 * @return 返回圖書名稱 * @throws Exception */ private String getBookNameById(int id) throws Exception{ Connection con=getCon();// 獲取數據庫連接 //調用存儲過程語句,第一個為輸入參數, //第二個是輸出參數,輸出參數名稱是bN String sql="{CALL pro_getBookNameById(?,?)}"; //得到CallableStatement對象 CallableStatement cstmt=con.prepareCall(sql); cstmt.setInt(1, id);//設置第一個參數(即輸入參數) //設置返回類型(即輸出參數類型),指的是數據庫中的數據類型 cstmt.registerOutParameter(2, Types.VARCHAR); cstmt.execute();//執行 //獲取返回值(即輸出參數 bN ) String bookName=cstmt.getString("bN"); close(con,cstmt,null);//關閉連接 return bookName; } /** *元數據演示 */ public void demo () throws Exception { Connection con=getCon();//獲取數據庫鏈接對象 //---------- 元數據 ---------------- //獲取DatabaseMetaData對象 DatabaseMetaData dmd=con.getMetaData(); //dmd.getDatabaseProductName()獲取數據庫名稱 System.out.println("數據庫名稱:"+dmd.getDatabaseProductName()); //getDriverMajorVersion()得到數據庫大版本號, //dmd.getDriverMinorVersion()得到數據庫小版本號 System.out.println("數據庫版本:"+dmd.getDriverMajorVersion()+"."+dmd.getDriverMinorVersion()); String sql="select * from t_book";//查詢語句 //得到PreparedStatement對象 PreparedStatement pstmt=con.prepareStatement(sql); // 獲取元數據列的總數(即有多少列(字段)) int num=rsmd.getColumnCount(); System.out.println("共有"+num+"列"); for(int i=1;i<=num;i++){ //rsmd.getColumnName(i)獲取第i列的列名稱(即字段名稱), //rsmd.getColumnTypeName(i)獲取第i列的數據類型 System.out.println(rsmd.getColumnName(i)+"," +rsmd.getColumnTypeName(i)); } } /** * *事務演示 **/ public static void main(String[] args) throws Exception { Connection con=null; Savepoint sp=null; try { con=getCon();//得到數據庫連接 //取消自動提交(將事務設置為手動提交) con.setAutoCommit(false); System.out.println("張三開始向李四轉賬!"); int account=500; outCount(con, "張三", account);//此處假設轉出賬操作 //演示:設置一個保存點(即數據庫的備份點) //sp=con.setSavepoint(); inCount(con, "李四", account);//此處假設轉入賬操作 System.out.println("轉賬成功!"); con.commit(); //提交事務 } catch (Exception e) { con.rollback(); //回滾事務 //con.rollback(sp);//回滾事務到sp保存點 e.printStackTrace();//打印錯誤信息 }finally{ con.close();//關閉連接 } } /** * 假設轉出操作 * @param con 數據庫連接 * @param accountName 賬戶 * @param account 金額 * @throws Exception */ private static void outCount(Connection con,String accountName,int account)throws Exception{ String sql="update t_account set accountBalance=accountBalance-account? where accountName=?";// PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setInt(1, account); pstmt.setString(2, accountName); pstmt.executeUpdate(); } /** * 假設轉入操作 * @param con 數據庫連接 * @param accountName 賬戶 * @param account 金額 * @throws Exception */ private static void inCount(Connection con,String accountName,int account)throws Exception{ String sql="update t_account set account=accountBalance+account? where accountName=?"; PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setInt(1, account); pstmt.setString(2, accountName); pstmt.executeUpdate(); }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品视频免费观看| 中文字幕久热精品视频在线| 高潮白浆女日韩av免费看| 日韩av影院在线观看| 亚洲成人999| 国产精品欧美激情在线播放| 欧美专区第一页| 国产精品视频资源| 久久人人爽人人爽人人片亚洲| 久久久精品在线| 黄色成人在线播放| 欧美日韩国产综合视频在线观看中文| 亚洲激情视频在线播放| 亚洲性线免费观看视频成熟| 精品国产91久久久久久| 国产精自产拍久久久久久| 国产精品免费视频xxxx| 欧美激情网站在线观看| 日韩风俗一区 二区| 国产精品久久久999| 国产日韩欧美一二三区| 欧美成人午夜激情视频| 国产精品久久久久久久久| 久久97久久97精品免视看| 国产成人av网址| 在线视频日本亚洲性| 亚洲一区二区久久久久久久| 亚洲福利影片在线| 亚洲精品中文字幕有码专区| 97成人超碰免| 亚洲国产中文字幕在线观看| 亚洲在线www| 午夜精品久久久久久久99热浪潮| 奇米影视亚洲狠狠色| 欧美大片在线看| 国模精品视频一区二区| 欧美成人激情图片网| 欧美三级免费观看| 亚洲第一精品夜夜躁人人躁| 国产精品日韩在线一区| 日韩精品视频在线免费观看| 欧美激情一区二区三区高清视频| 亚洲视频电影图片偷拍一区| 国产一区二中文字幕在线看| 精品国模在线视频| 久久久久中文字幕| 美女av一区二区三区| 亚洲视频专区在线| 81精品国产乱码久久久久久| 国产精品福利片| 国产精品啪视频| 日韩中文字幕在线观看| 91视频免费在线| 国产精品激情av电影在线观看| 色综合亚洲精品激情狠狠| 国产激情久久久| 亚洲欧美日韩一区二区在线| 久久久欧美精品| 在线播放日韩av| 中文字幕精品国产| 亚洲影院色无极综合| 最近2019中文字幕一页二页| 97av在线视频| 成人免费观看网址| 久久亚洲成人精品| 韩日欧美一区二区| 国产乱肥老妇国产一区二| 91精品啪aⅴ在线观看国产| 日韩视频―中文字幕| 一区二区成人av| 最近免费中文字幕视频2019| 欧美黑人狂野猛交老妇| 韩国日本不卡在线| 91国产高清在线| 色在人av网站天堂精品| 精品人伦一区二区三区蜜桃免费| 国产精品情侣自拍| 伊人久久久久久久久久| 5566日本婷婷色中文字幕97| 日韩国产一区三区| 欧美一级免费看| 亚洲精品中文字幕av| 亚洲天堂男人的天堂| 91chinesevideo永久地址| 在线国产精品视频| 日韩精品免费看| 精品国产自在精品国产浪潮| 亚洲国产精品电影在线观看| 欧美激情欧美狂野欧美精品| 亚洲一区二区三区香蕉| 亚洲精品视频二区| 国产成人啪精品视频免费网| 久久久久久久国产| 中文字幕精品—区二区| 亚洲综合在线播放| 精品久久久久久久久久ntr影视| 欧美另类69精品久久久久9999| 国产精品www色诱视频| 国产精品久久91| 高清日韩电视剧大全免费播放在线观看| 懂色aⅴ精品一区二区三区蜜月| 亚洲a在线观看| 91在线精品播放| 久久久av免费| 国产精品视频区| 高清欧美性猛交xxxx黑人猛交| 国产一区二区三区视频免费| 国产精品久久久久久久美男| 国产精品jizz在线观看麻豆| 91国产高清在线| 午夜欧美不卡精品aaaaa| 欧美亚洲另类在线| 亚洲欧美日韩视频一区| 97视频在线观看网址| 日韩欧美在线免费观看| 国产日韩在线精品av| 亚洲精品久久久久中文字幕欢迎你| 国产精品啪视频| 国产婷婷成人久久av免费高清| 欧美一区二区三区……| 欧美日韩亚洲视频| 久久99久久99精品免观看粉嫩| 91在线观看免费网站| 欧美日韩加勒比精品一区| 高清欧美性猛交| 疯狂做受xxxx欧美肥白少妇| 国产精品美女久久久免费| 中文字幕少妇一区二区三区| 久热精品视频在线| 欧美日韩免费在线观看| 中文精品99久久国产香蕉| 日韩视频精品在线| 成人黄色免费片| 2019国产精品自在线拍国产不卡| 亚洲第一综合天堂另类专| 亚洲人成在线观| 久久久伊人欧美| 这里只有精品在线播放| 日本成人在线视频网址| 久久国产精品亚洲| 高清一区二区三区四区五区| 国产精品成人一区二区三区吃奶| 欧美人与性动交a欧美精品| 在线午夜精品自拍| 国产a级全部精品| 一本色道久久88亚洲综合88| 成人激情视频在线观看| 亚洲91精品在线观看| 日韩精品在线免费观看视频| 91九色精品视频| 91精品国产色综合久久不卡98| 色婷婷**av毛片一区| 欧亚精品在线观看| 成人在线视频福利| 日韩免费电影在线观看| 成人激情视频在线| 中文字幕亚洲专区| 中文字幕日韩av综合精品| 久久国产视频网站| 亚洲美女在线视频| 国产精品ⅴa在线观看h| 欧美小视频在线| 亚洲自拍欧美另类| 欧美性猛交99久久久久99按摩|