一、jdbc步骤(创建BaseDao类):
1、创建返回Connection对象的方法:
1、Class.forName("com.mysql.jdbc.Driver");
2、DriverManager.getConnection("jdbc:mysql://localhost:3306/库名");
3、return Connection对象;
4、解读:1是加载驱动2是通过驱动类获得连接。
2、创建返回增删改的结果集(int类型)的方法,有两个参数sql,obj数组:
1、通过Connection对象的prepareStatement(sql)方法获得PreparedStatement对象;
2、判断传入的数组不为null、长度不等于0;
3、在if实体里for循环,用ps.setObject(i+1,obj[i])给占位符赋值;
4、通过ps的executeUpdate()方法得到结果集int类型);
5、返回结果集即可。
3、创建返回查询的结果集(ResultSet类型)的方法,参数同上:
1、同上;
2、同上;
3、同上;
4、通过ps的executeQuery()方法得到结果集(ResultSet类型);
5、返回结果集即可。
4、创建关闭所有对象的方法,参数就是上面所出现的对象(3个):(目前没用到,写的时候都省略了,)
1、if(对象!=null){对象.close(0},写三个if即可。
二、创建PetDao接口:与BaseDao类同一个包
1、里面写问题的方法,比如addPet、updatePet、getFive(前5条方法)、requestRow(获得数据的行数);
1、int addPet(Pet pet);//添加的方法
2、int update(Pet pet);//修改的方法
3、List<Pet> getFive();//分页查询前5条数据
4、int requestRow(); //查看数据有多少行
三、新建一个impl包:
1、创建一个PetDao的实现类继承BaseDao类、实现PetDao接口,重写接口的全部方法;
2、举例写三个方法:addPet()、getFive()、requestRow()
1、public int addPet(Pet pet){
//插入的sql语句
String sql="insert into pet values(?,?,?,?,?)";
//占位符的值
Object[] obj={pet.getpId(),pet.getpName(),pet.getpHealth(),pet.getpLove(),pet.getpStrain()};
//调用BaseDao的增删改方法utilMethod()
int num=this.utilMethod(String sql,Object[] obj);
return num;
}
2、public List<pet> getFive(){
//查询的sql语句
String sql="select * from pet limit 0,5";
//占位符的值
//Object[] obj={};
//调用BaseDao的查询方法selectAll()得到结果集ResultSet
ResultSet rs=this.select(sql,null);
//声明一个集合放Pet的数据
List<Pet> list=new ArrayList<Pet>();
//初始化Pet对象
Pet pet=null;
//判断结果集是否有值
while(rs.next()){
//实例化Pet对象
pet=new Pet();
//把从数据库拿到的值放到对象
pet.setpId(rs.getInt("pId"));
pet.setpName(rs.getString("pName"));
pet.setpHealth(rs.getInt("pHealth"));
pet.setpLove(rs.getInt("pLove"));
pet.setpStrain(rs.getString("pStrain"));
//将Pet对象放入集合
list.add(pet);
}
return list;
}
3、public int requestRow(){
//随便查一列数据的sql语句
String sql="select pid from pet ";
//调用查询的方法
ResultSet rs=this.select(sql,null);
//把结果集的浮标移到最后一行
rs.last();
//获取最后一行的行下标(从1开始的)
int row=rs.getRow();
return row;
}
三、创建一个Test包:
1、用接口的对象指向接口实现类的对象(多态)。
2、调用实现类的具体方法。
四、注意:
1、statement弊端:安全性比较差,拼接麻烦,所以引出其子类preparedStatement。
2、prepareStatement优点:1、安全性高。2、预编译sql语句,执行效率更高,开发都用这个。
五、解决乱码的办法:
1、第一个创建数据库与表时,设置为UTF-8;
具体步骤:右击库名-->更改数据库-->数据库字符集
2、第二个把你的项目设置为UTF-8;
具体步骤:右击项目-->properties-->Resource-->改为utf-8