微信小程式訂閱訊息-springboot
阿新 • • 發佈:2020-10-20
基本步驟:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /* * JDBC:為sun公司提供的一個訪問資料庫的包 * */ public class MainTest { public static void main(String[] args) throws SQLException, ClassNotFoundException { /* * 1.註冊驅動 * 在Driver類今天程式碼塊中,new Driver() * * 在JDK5後 META-INF/services,資料夾中自動註冊,可以省略 **/ Class<?> aClass = Class.forName("com.mysql.jdbc.Driver"); //2.獲取連線:如果是本機且埠為預設,可以簡寫jdbc:mysql:///db1 // Connection conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db1","root","root"); Connection conn= DriverManager.getConnection("jdbc:mysql:///db1","root","root"); String sql="INSERT student (id,NAME,age,score) VALUES(3,\"b\",19,67)"; //3.獲取用於執行靜態SQL語句並返回其生成的結果的物件 Statement statement = conn.createStatement(); //4.執行aql語句 int cout = statement.executeUpdate(sql); System.out.println(cout); //5.釋放資源 statement.close(); conn.close(); } }
增刪改:
/* * 增刪改:呼叫方法statement.executeUpdate(sql),返回受到影響的行數 * */ public class UpdataTest { public static void main(String[] args) { Connection conn=null; Statement statement=null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db1", "root", "root"); String sql="INSERT student (id,NAME,age,score) VALUES(3,\"b\",19,67);"; statement = conn.createStatement(); int res = statement.executeUpdate(sql); System.out.println(res); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (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(); } } } } }
查詢;
/* * 查詢:呼叫stat.executeQuery(sql),返回ResultSet,ResultSet為一個結果集。 * */ private static void test1() { Connection conn=null; Statement stat=null; ResultSet rs=null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db1", "root", "root"); String sql="SELECT * FROM student"; stat = conn.createStatement(); rs = stat.executeQuery(sql); List<Student> list=new ArrayList<>(); Student stu=null; while (rs.next()){ //可以通過列下標來獲取也可以通過屬性名稱 //int id=rs.getInt(1); stu=new Student(); stu.setId(rs.getInt("id")); stu.setAge(rs.getInt("age")); stu.setName(rs.getString("name")); stu.setBirthday(rs.getDate("birthday")); stu.setInsert_time(rs.getDate("insert_time")); stu.setScore(rs.getDouble("score")); list.add(stu); } System.out.println(list.size()); System.out.println(list); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally { if (rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stat!=null){ try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
帶引數查詢:
/* * 帶引數化查詢:使用的是conn.prepareStatement(sql)獲取的PreparedStatement物件。 * 與Statement對比: * 1.Statement:是執行靜態的sql語句,及不帶引數的sql語句,可以用字串拼接完成帶引數,缺點:sql注入 * 2.PreparedStatement:預載入sql,引數用?,表示。用pstmt.setString(1,"0")來加入引數。 * */ private static void test2() { Connection conn=null; PreparedStatement pstmt = null; ResultSet rs=null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db1", "root", "root"); //sql語句通過?代表引數 String sql="SELECT * FROM student WHERE score>?"; //預載入sql語句 pstmt = conn.prepareStatement(sql); //根據❓下標,將引數設定 pstmt.setString(1,"0"); //執行帶引數sql語句 rs = pstmt.executeQuery(); List<Student> list=new ArrayList<>(); Student stu=null; while (rs.next()){ stu=new Student(); stu.setId(rs.getInt("id")); stu.setAge(rs.getInt("age")); stu.setName(rs.getString("name")); stu.setBirthday(rs.getDate("birthday")); stu.setInsert_time(rs.getDate("insert_time")); stu.setScore(rs.getDouble("score")); list.add(stu); } System.out.println(list.size()); System.out.println(list); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally { if (rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt!=null){ try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
JDBC中connect和close封裝:
封裝類:
import java.io.FileReader; import java.io.IOException; import java.net.URL; import java.sql.*; import java.util.Properties; public class JDBCUitls { private static String user; private static String password; private static String url; private static String driver; /* * 靜態程式碼塊 * 內載入的時候執行,並且只執行一次。可實現單例模式 * */ static { try { //獲取類載入器 ClassLoader clsLoader = JDBCUitls.class.getClassLoader(); //在JDBCUitls所在的src資料夾,第一級目錄下查詢jdbc.properties檔案 URL resource = clsLoader.getResource("jdbc.properties"); //返回檔案絕對路徑 String path = resource.getPath(); //Properties載入檔案 Properties prop=new Properties(); prop.load(new FileReader(path)); user = prop.getProperty("user"); password=prop.getProperty("password"); url=prop.getProperty("url"); driver=prop.getProperty("driver"); Class.forName(driver); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /* * 連線方法 * */ public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); } /* * 釋放連結 * */ public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs){ if (rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt!=null){ try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /* * 釋放連結 * */ public static void close(Connection conn, Statement stmt){ if (stmt!=null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
呼叫方法:
/* * 封裝Connect和close * */ private static void test3() { Connection conn=null; PreparedStatement pstmt = null; ResultSet rs=null; try { conn = JDBCUitls.getConnection(); //sql語句通過?代表引數 String sql="SELECT * FROM student WHERE score>?"; //預載入sql語句 pstmt = conn.prepareStatement(sql); //根據❓下標,將引數設定 pstmt.setString(1,"0"); //執行帶引數sql語句 rs = pstmt.executeQuery(); List<Student> list=new ArrayList<>(); Student stu=null; while (rs.next()){ stu=new Student(); stu.setId(rs.getInt("id")); stu.setAge(rs.getInt("age")); stu.setName(rs.getString("name")); stu.setBirthday(rs.getDate("birthday")); stu.setInsert_time(rs.getDate("insert_time")); stu.setScore(rs.getDouble("score")); list.add(stu); } System.out.println(list.size()); System.out.println(list); } catch (SQLException e) { e.printStackTrace(); }finally { JDBCUitls.close(conn,pstmt,rs); } }
JDBC事物:
import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; /* * MySql中事物預設是自動提交的:每條sql語句執行完成後自動提交 * 修改事務的預設提交方式: * 檢視事務的預設提交方式:SELECT @@autocommit; -- 1 代表自動提交 0 代表手動提交 * 修改預設提交方式: set @@autocommit = 0; * * JDBC中用: * conn.setAutoCommit(false);---設定事物為手動提交 * conn.commit();---手動提交事物 * conn.rollback();--回滾事物 * */ public class TransTest { public static void main(String[] args) { String sql1="UPDATE student SET age=age+5 WHERE NAME='a'"; String sql2="UPDATE student SET age=age-5 WHERE NAME='c'"; Connection conn=null; Statement stmt = null; try { conn = JDBCUitls.getConnection(); conn.setAutoCommit(false); stmt = conn.createStatement(); int res1 = stmt.executeUpdate(sql1); // int i=3/0; int res2 = stmt.executeUpdate(sql2); conn.commit(); } catch (SQLException e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); }finally { JDBCUitls.close(conn,stmt); } } }