【JavaWeb】JDBC的基本操作和事务控制+登录和转账案例
生活随笔
收集整理的這篇文章主要介紹了
【JavaWeb】JDBC的基本操作和事务控制+登录和转账案例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 JDBC操作數據庫
1.1 連接數據庫
首先導入jar包到lib
1.2 數據庫相關對象詳解
1.2.1DriverManager:驅動管理對象
注冊驅動
-Class.forName("com.mysql.jdbc.Driver");
com.mysql.jdbc.Driver類中存在靜態代碼塊
MySQL 5 之后的驅動jar包可以省略注冊驅動的步驟
獲取數據庫連接
-DriverManager.getConnection("jdbc:mysql://localhost:3306/db2", "root", "password");
url語法:jdbc:mysql:// [ip地址] : [端口號] / [數據庫名稱]
如果連接的是本機的mysql 默認是3306 url可以簡寫為"jdbc:mysql:///db2"
1.2.2 Connection:數據庫連接對象
- Statement createStatement();
- PreparedStatement preparedStatement(String sql);
- 開啟事務:void setAutoCommit(boolean autoCommit) 設置參數為false即開啟事務
- 提交事務:void commit()
- 回滾事務:void rollback()
1.2.3 Statement:執行sql的對象
- boolean execute(String sql):可以執行任意sql
- int executeUpdate(String sql):執行DML(C、U、D)語句、DDL(表、庫)語句,返回值是受影響的行數。判斷DML是否執行成功,返回值>0則成功。
- ResultSet executeQurey(String sql):執行DQL(R)語句
1.2.4 ResultSet:結果集對象
-next():游標向前移動一行
-getXxx(int column):獲取第column列的Xxx類型的數據 索引從1開始
-getXxx(String name):獲取命名為name字段的Xxx類型的數據
1.2.5 PreparedStatement:
sql:-select * from user where username = 'xxxx' and password = 'a' or 'a' = 'a'
1.3 基本操作練習
增刪改
public static void main(String[] args){Connection conn = null;Statement statement = null;try{Class.forName("com.mysql.jdbc.Driver");String sql = "insert into account values(null,'王五',3000)";conn = DriverManager.getConnection("jdbc:mysql:///db2", "root", "password");statement = conn.createStatement();int count = statement.executeUpdate(sql);if(count > 0){System.out.println("添加成功");}else {System.out.println("添加失敗");}}catch (ClassNotFoundException | SQLException e){e.printStackTrace();}finally {//避免空指針異常if(statement!=null){try {statement.close();}catch (SQLException e){e.printStackTrace();}}if(conn!=null){try {conn.close();}catch (SQLException e){e.printStackTrace();}}}}查詢
public static void main(String[] args){Connection conn = null;Statement statement = null;ResultSet resultSet = null;try{Class.forName("com.mysql.jdbc.Driver");String sql = "select * from account";conn = DriverManager.getConnection("jdbc:mysql:///db2", "root", "password");statement = conn.createStatement();resultSet = statement.executeQuery(sql);while(resultSet.next()){int id = resultSet.getInt(1);String name = resultSet.getString("name");double balance = resultSet.getDouble(3);System.out.println(id+ " "+ name+" "+balance);}}catch (ClassNotFoundException | SQLException e){e.printStackTrace();}finally {//避免空指針異常if(resultSet!=null){try {resultSet.close();}catch (SQLException e){e.printStackTrace();}}if(statement!=null){try {statement.close();}catch (SQLException e){e.printStackTrace();}}if(conn!=null){try {conn.close();}catch (SQLException e){e.printStackTrace();}}}}新建一個Account類型的JavaBean
讀取表到Account類型的列表中
1.4 抽取JDBC的工具類
簡化代碼的書寫
編寫jdbc配置文件,設置url、user、password、driver
jdbc.properties
使用工具類
package jdbc;import domain.Account;import java.sql.*; import java.util.ArrayList; import java.util.List;public class JdbcDemo2 {public List<Account> findAll(){Connection conn = null;Statement stmt = null;ResultSet rs = null;List<Account> accounts = null;try {conn = JdbcUtil.getConnection();String sql = "select * from account";stmt = conn.createStatement();rs = stmt.executeQuery(sql);accounts = new ArrayList<>();Account account = null;while(rs.next()){account = new Account();int id = rs.getInt("id");String name = rs.getString("name");double balance = rs.getDouble("balance");account.setBalance(balance);account.setId(id);account.setName(name);accounts.add(account);}} catch (SQLException e) {e.printStackTrace();}finally {JdbcUtil.close(stmt,conn,rs);}return accounts;}public static void main(String[] args) {List<Account> all = new JdbcDemo2().findAll();for(Account a : all){System.out.println(a);}} }2 登錄案例
public class JdbcDemo3 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("請輸入用戶名:");String username = sc.nextLine();System.out.println("請輸入密碼:");String password = sc.nextLine();boolean check = login(username, password);if(check){System.out.println("登錄成功");}else{System.out.println("登錄失敗");}}public static boolean login(String username, String password){if(username == null || password == null){return false;}Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultSet = null;try {connection = JdbcUtil.getConnection();//注意參數兩端都有單引號 因為他們是字符串String sql = "select * from user where username= ? and password= ? ";preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1,username);preparedStatement.setString(2,password);resultSet = preparedStatement.executeQuery();return resultSet.next();} catch (SQLException e) {e.printStackTrace();}finally {JdbcUtil.close(preparedStatement,connection,resultSet);}return false;} }3 JDBC控制事務-轉賬案例
使用Connection對象來管理事務
執行操作之前開事務 置為false
事務結束之后提交事務
在catch里面回滾 catch捕獲的異常范圍要擴大 不能僅僅時sql異常
總結
以上是生活随笔為你收集整理的【JavaWeb】JDBC的基本操作和事务控制+登录和转账案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【LeetCode】3月27日打卡-Da
- 下一篇: java美元兑换,(Java实现) 美元