JDBC添加數據
數據庫連接的類型是 Connection 類型, 如果要操作數據庫還需要使用該對象來發送 sql語句
Connection 的方法:
viod close() throws SQLExection
關閉數據庫連接, 數據庫連接使用完畢之后必須關閉
boolean isClosed() throws SQL Exection
判斷該連接是否關閉
void commit() throws SQLExection
在程序中手工提交事務
void rollback() throws SQLExection
事務的回退
void setAutoCommit(boolean autoCommit) throws SQLExection
在 mysql 的 JDBC 中事務是自動提交的, 如果不需要事務自動提交則可以使用該方法進行設置
設置為false 則表示取消自動提交
Statement create Statement() throws SQLExection
取得一個發送 sql 語句的接口對象, 但是現在不是哦用該接口對象來發送 sql 語句了,
因為該接口存在一定的性能問題以及安全問題 (比如 sql 語句注入風險), 效率也低
sql 注入:sql 注入是多年前的一個概念了, 就是可以通過 sql 注入的方式實現無密碼的操作
PreparedStatement preparedStatement(String sql)
取得一個發送 sql 語句的接口對象,該對象的類型就是 PreparedStatement 接口,其他第三方數據層工具封裝也是該接口,
該接口可以避免類似於 sql注入 的安全風險問題, 並且效率更高 (現在程序中將 sql 語句編譯成指令后再發送到數據庫,
數據庫只需要直接執行指令即可)
PreparedStatement 中的發送 sql 語句的方法:
ResultSet executeQuery( ) throws SQLExection
執行查詢語句,將查詢到的結果封裝到 ResultSet 接口對象中
int executeUpdate( ) throws SQLExection
執行的是更新類型 (insert, update, delete) 的 sql 語句, 返回值的是成功更新數據的條數)
Demo: 定義插入數據的程序
public class TestMysql { //取得連接 private static Connection conn =ConnectionUitl.getConnection(); public static void main(String[] args) { System.out.println("插入的數據行數是: " + insertEmp()); } public static int insertEmp() { PreparedStatement pst = null; //定義出 sql 語句 String sql = "INSERT INTO emp(empno,ename,job,sal,hiredate,mgr,comm,deptno)" +" VALUES(1002,'王五','總裁',9000.00,NOW(),7788,2000.00,10)"; //使用連接對象取得發送 sql 語句的對象 (PreparedStatment 接口對象) try { conn.setAutoCommit(false); //取消事務的自動提交 pst = conn.prepareStatement(sql); //發送 sql 語句 return pst.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { ConnectionUitl.close(conn,pst); } return 0; } }
Demo: 手動提交事務
1 public class TestMysql { 2 //取得連接 3 private static Connection conn =ConnectionUitl.getConnection(); 4 5 public static void main(String[] args) { 6 System.out.println("插入的數據行數是: " + insertEmp()); 7 } 8 9 public static int insertEmp() { 10 int affectRow = 0; 11 12 PreparedStatement pst = null; 13 14 //定義出 sql 語句 15 String sql = "INSERT INTO emp(empno,ename,job,sal,hiredate,mgr,comm,deptno)" 16 +" VALUES(1002,'王五','總裁',9000.00,NOW(),7788,2000.00,10)"; 17 18 //使用連接對象取得發送 sql 語句的對象 (PreparedStatment 接口對象) 19 try { 20 conn.setAutoCommit(false); //取消事務的自動提交 21 pst = conn.prepareStatement(sql); 22 //發送 sql 語句(手動提交事務) 23 affectRow = pst.executeUpdate(); 24 conn.commit(); 25 return affectRow; 26 } catch (SQLException e) { 27 e.printStackTrace(); 28 } finally { 29 ConnectionUitl.close(conn,pst); 30 } 31 return 0; 32 } 33 }
