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>存储多条记录

31、lt记录

 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

 

上一篇:用户留存率R的由来 以及 留存率的计算


下一篇:设置UITableView的separatorInset值为UIEdgeInsetsZero,分隔线不最左端显示的问题