JDBC基础
1.搭建环境
1.JDBC开发的六步骤
1.1加载驱动
Class.forName("com.mysql.jdbc.Driver");
1.2获取连接
Connection conn = DriverManager.getConnection(url,username,password);
1.3书写sql
Sting sql="";
1.4创建Statement,执行
Statement stm = conn.createStatement();
ResultSet rs = stm.excutequery(sql); ----查询
int i = stm.excuteUpadte(sql); ----增删改
1.5处理结果集
1.6关流
--------------------------
1.preparedStatement ---Statement子接口
主要作用:也是发送sql命令到服务器执行,可以执行参数化的sql
参数化sql: select * from student where id=?;
以占位符的方式替代sql中的参数值,在执行sql之前,需要使用preparedStatement给占位符进行赋值
DBHelper工具类封装
思想:
对于有独立功能的代码块并且重复使用,我们需要进行封装,封装可以提高代码的复用性
工具类的特点
1.方法都是静态的
2.工具类是对外提供功能的
JAVA中两种常用的配置文件
1.xxx.XML 格式的配置文件 :以标签的形式描述和保存信息,对信息的描述更加的精致和精确
2.xxx.properties 格式的配置文件 : 以键值对的方式保存信息
DAO层
DAO是数据库对象,主要作用就是完成对数据库的增删改查
封装DAO,避免增删改查的重复使用,提高代码复用性
一张表封装成一个DAO
1.搭建环境
1.引入jar包
2.引入配置文件 src--mysql_jdbc.properties
3.引入工具类 cn.hp.util --DBHelper
2.编码流程
1.创建数据库中的表
2.封装实体类 cn.hp.entity
3.定义DAO接口 cn.hp.dao xxxDao xxxDaoImpl
4.实现DAO接口 cn.hp.dao xxxDao xxxDaoImpl
5.测试 cn.hp.test
多线程
方式1:继承Thread
1.自定义类继承Thread
2.覆盖run()方法
3.创建线程对象
4.启动线程
Thread类中的方法
String getName():返回该线程的名称。
void setName(String name):改变线程名称
void setPriority(int newPriority):更改线程的优先级。(1~10)
int getPriority():返回线程的优先级 (每个线程默认优先级5)
static Thread currentThread():返回当前正在执行的线程对象
static void sleep(long millis):睡眠
void join():等待该线程终止。
同步代码块:
synchronized (对象) {
原子操作
}
原子操作:一段代码在多线程环境下其中一个线程在执行时,必须一次性执行完毕,不能够有其他线程干预。
对象:如同锁的功能。
线程同步(安全):效率低(每个线程在执行的时候都会去判断有没有上锁)
线程异步(不安全):效率高
同步方法:将同步声明在方法上,表示整个方法只能有一个线程在执行。
同步方法
实例方法锁对象是:this
静态方法锁对象是:字节码文件对象
死锁
死锁问题:多个线程间互相等待的一种情况。
如何解决?
java提供了等待唤醒机制。
使用到的方法是Object类中:
void wait():让当前线程处于等待状态会放弃cpu的执行权和释放与该线程相关的所有锁标记,这个方法必须在同 步代码块中使用锁对象调用。
void notify()/notifyAll():必须在同步代码块中调用,表示唤醒当前锁对象的等待队列中一个线程/多个线程
线程间的通信
概念:不同种类线程操作同一个资源。
案例:生产者(添加数据)和消费者(消费数据)。