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自己put了3個元素不一樣的key和用rs.getObject方法取3個元素各自取得的值。。。
* 使用Map來封裝一條記錄
* 使用List<Map>,Map<Map>儲存多條記錄
lt的問題題解在這兒。。。
接下來採用將表中一條記錄封裝到javabean物件中(工作中用的比較多,但是會有ORM的框架幫著去做,比如hebnate,mybatis幫著去做
首先要針對表名去建立相應的物件、欄位對應屬性
然後就和前面一樣,用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