JDBC執行不同SQL語句調用的方法示例


一、執行DDL(數據庫定義語言)   

CREATE , DROP , ALTER 語句 : 使用PreparedStatement對象的execute()方法

對於DDL是否執行成功:對於任何sql語句執行報錯(不成功),都會報錯SQLException錯誤

舉例:CREATE語句

@Test
public void test() throws Exception {
    Connection conn = JDBCUtils.getConnection();
    String sql = "CREATE TABLE student(\n" +
                "  id INT PRIMARY KEY AUTO_INCREMENT,\n" +
                "  sname VARCHAR(200) NOT NULL,\n" +
                "  note VARCHAR(200) NOT NULL\n" +
                ")";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.execute();
  JDBCUtils.closeResource(conn,ps);//關閉資源 }

 

 二、執行DQL(數據庫查詢語言)

SELECT 語句 : 使用PreparedStatement對象的executeQuery()方法

對於DQL,只要執行成功,返回的必然是ResultSet對象,獲取其中的值類似於迭代器。

 查詢一行數據(這里的異常沒有處理,簡化代碼,勿怪)

@Test
public void test() throws Exception {
    Connection conn = JDBCUtils.getConnection();
    String sql = "SELECT `id`,`name`,`email`,`birth` FROM customers WHERE id = ?";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setObject(1,1);//設置第一個參數為1,填充?替代的值
    ResultSet rs = ps.executeQuery();
if(rs.next()){ int id = rs.getInt(1); String name = rs.getString(2); String email = rs.getString(3); Date date = rs.getDate(4); System.out.println(id+"\t"+name+"\t\t"+email+"\t"+date); //這里可以new一個對象接受 }
  JDBCUtils.closeResource(conn,ps,rs);//關閉資源
}

 

查詢多行數據(這里的異常沒有處理,簡化代碼,勿怪)

@Test
public void test() throws Exception {
    Connection conn = JDBCUtils.getConnection();
    String sql = "SELECT `id`,`name`,`email`,`birth` FROM customers WHERE id BETWEEN ? AND ?;";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setInt(1,2);//設置第一個參數為2,填充?替代的值
    ps.setInt(2,5);//設置第二個參數為5,填充第二個?替代的值
    ResultSet rs = ps.executeQuery();
    while(rs.next()){
        int id = rs.getInt("id");
        String name = rs.getString("name");
        String email = rs.getString("email");
        Date date = rs.getDate("birth");
        System.out.println(id+"\t"+name+"\t"+email+"\t"+date); //這里可以new一個對象接受,然后添加到集合中去
    }
  JDBCUtils.closeResource(conn,ps,rs);//關閉資源
}

  如何做到通用查詢,通過ResultSetMetaDate提取出結果集的元數據。

public <T> T getInstance(Class<T> clazz, String sql, Object... args) {

  Connection conn = null;
  PreparedStatement ps = null;
  ResultSet rs = null;
  try {
    // 1.獲取數據庫連接
    conn = JDBCUtils.getConnection();

    // 2.預編譯sql語句,得到PreparedStatement對象
    ps = conn.prepareStatement(sql);

    // 3.填充占位符
    for (int i = 0; i < args.length; i++) {
      ps.setObject(i + 1, args[i]);
    }

    // 4.執行executeQuery(),得到結果集:ResultSet
     rs = ps.executeQuery();

    // 5.得到結果集的元數據:ResultSetMetaData
    ResultSetMetaData rsmd = rs.getMetaData();

    // 6.1通過ResultSetMetaData得到columnCount,columnLabel;通過ResultSet得到列值
    int columnCount = rsmd.getColumnCount();
    if (rs.next()) {
      T t = clazz.newInstance();
      for (int i = 0; i < columnCount; i++) {// 遍歷每一個列

        // 獲取列值
        Object columnVal = rs.getObject(i + 1);
        // 獲取列的別名:列的別名,使用類的屬性名充當
        String columnLabel = rsmd.getColumnLabel(i + 1);
        // 6.2使用反射,給對象的相應屬性賦值
        Field field = clazz.getDeclaredField(columnLabel);
        field.setAccessible(true);
        field.set(t, columnVal);
      }
      return t;

       }
     } catch (Exception e) {

        e.printStackTrace();
     } finally {
        // 7.關閉資源
        JDBCUtils.closeResource(conn, ps, rs);
     }
        return null;
}

 

三、執行DML(數據庫操作語言)

INSERT UPDATE DELETE 語句:使用PreparedStatement對象的executeUpdate()方法

//通用的增、刪、改操作(體現一:增、刪、改 ; 體現二:針對於不同的表):返回的是對數據庫影響的行數
public int update(String sql,Object ... args){
    Connection conn = null;
    PreparedStatement ps = null;
    try {
       //1.獲取數據庫的連接
       conn = JDBCUtils.getConnection();
            
       //2.獲取PreparedStatement的實例 (或:預編譯sql語句)
       ps = conn.prepareStatement(sql);
       //3.填充占位符
       for(int i = 0;i < args.length;i++){
            ps.setObject(i + 1, args[i]);
       }
        
        //4.執行sql語句
 return ps.executeUpdate();
    } catch (Exception e) {
        
        e.printStackTrace();
    }finally{
        //5.關閉資源
       JDBCUtils.closeResource(conn, ps);
    }
  return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM