1. 程式人生 > 實用技巧 >31、lt記錄

31、lt記錄

31:

講一個專案的亮點?應該答小論文

多執行緒如何實現? 3種方法

執行緒池中最大執行緒數和核心執行緒數的區別?

死鎖是怎麼產生的?如何在程式碼上避免死鎖產生。

lt:

字串批量刪除的演算法題(就是筆試題)

int indexOf(String str, int fromIndex)
返回指定子字串在此字串中第一次出現處的索引,從指定的索引開始

public static int countStr(String str1,String str2){
        int index=0;
        int count=0;
        while((index=str1.indexOf
(str2,index))!=-1){ index = index+str2.length(); count++; } return count; }

indexOf底層是什麼?讓你寫你怎麼實現?

不用框架,JDBC時得到結果集後,ORM操作是怎麼把取到的資料放到javaBean裡面的。

其實很簡單,就是用rs.getObject方法得到的行元素直接當做new javaBean物件構造方法的引數就是了。


ORM(Object Relationship Mapping)的基本思想

表結構跟類對應;表中欄位和類的屬性對應;表中記錄和物件對應;

javabean的屬性名和型別儘量和資料庫保持一致!

一條記錄對應一個物件。將這些查詢到的物件放到容器中(List,Set,Map)

將表中的一條記錄封裝到Object陣列中

將表中的一條記錄封裝到map

將表中一條記錄封裝到javabean物件中

DEMO1

* 使用Object[]來封裝一條記錄

* 使用List<Object[]>儲存多條記錄

ResultSet rs ;
rs = ps.executeQuery();//執行查詢
while(rs.next()){
System.out.println(rs.getString(1)+"--"+rs.getDouble(2)+"--"+rs.getInt(3));
//一個Object陣列封裝了一條記錄的資訊!這樣即使連線中斷也能從object陣列獲得資訊 Object[] objs= new Object[3];//一維陣列長度為3個元素
//是3個元素分別放的是姓名,薪水和年齡 objs[0]= rs.getString(1); objs[1] = rs.getObject(2); objs[2] = rs.getObject(3); list.add(objs);//這樣一個迴圈插入一個一維obj陣列 }

剛才是用Objiect陣列封裝一條記錄,由於一條記錄裝了3個元素,所以是Object[3]

接下來我們用Map封裝一條記錄 那是id為鍵,其他為值嗎?那是有很多值了??

呃。。。他這一條是map自己put3個元素不一樣的key用rs.getObject方法取3個元素各自取得的。。。

* 使用Map來封裝一條記錄

* 使用List<Map>,Map<Map>儲存多條記錄

lt的問題題解在這兒。。。

接下來採用將表中一條記錄封裝到javabean物件中(工作中用的比較多,但是會有ORM的框架幫著去做,比如hebnatemybatis幫著去做

首先要針對表名去建立相應的物件、欄位對應屬性

然後就和前面一樣,用rs.getOblect得到了一行中的每個元素資料,直接當成引數傳入構造方法引數

Emp.java Dept.java 寫上setget和構造器(javabean實體類先建好)

新建demo03.java

import java.sql.*;
import java.util.*;
/***
 * 使用Javabean物件來封裝一條記錄
 * 使用List<Javabean>儲存多條記錄
 * @author Administrator
 *
 */
public class Demo03 {
    
    public static void test01(){
        Connection conn = JDBCUtil.getMysqlConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        Emp emp = null;
        try {
            ps = conn.prepareStatement("select empname,salary,age from emp where id=?");
            ps.setObject(1, 1);
            rs = ps.executeQuery();
            while(rs.next()){
//                System.out.println(rs.getString(1)+"--"+rs.getDouble(2)+"--"+rs.getInt(3));
                emp = new Emp(rs.getString(1),rs.getDouble(2),rs.getInt(3));//構造器 new物件 前面是new obj陣列 和new map
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JDBCUtil.close(rs, ps, conn);
        }
        System.out.println(emp.getEmpname()+"-"+emp.getSalary()+"-"+emp.getAge());
    }
    
    public static void test02(){
        Connection conn = JDBCUtil.getMysqlConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        List<Emp> list= new ArrayList<Emp>();
        try {
            ps = conn.prepareStatement("select empname,salary,age from emp where id>?");
            ps.setObject(1, 1);
            rs = ps.executeQuery();
            while(rs.next()){
                Emp emp = new Emp(rs.getString(1),rs.getDouble(2),rs.getInt(3));
                list.add(emp);//把前面的存住了不會被迴圈覆蓋掉
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JDBCUtil.close(rs, ps, conn);
        }
        
        //遍歷List,就是遍歷這一行的多列的資訊
        for(Emp emp:list){
            System.out.println(emp.getEmpname()+"-"+emp.getSalary()+"-"+emp.getAge());
        }
    }
    
    public static void main(String[] args) {
        test02();    
    }
}
執行結果:
馬士兵-40000.0-13
萬欣-20000.0-14
裴新-30000.0-15