11. JDBC

JDBC:java操作数据库的一组API(注意模仿)

1.JDBC驱动方式:

*JDBC-ODBC桥驱动(必须先建立数据源,性能比较低,不推荐使用)

*JDBC纯驱动:必须把JDBC的jar包加入到构建路径,一般使用JDBC纯驱动 

2.JDBC操作数据库的流程

*使用Class.forName("")加载驱动程序

*使用DriverManager.getConnection()获得Connection(连接)\

*使用Connction 创建语句(语句有Statement,PreparedStatement)

*执行语句

*关闭Connection

3.执行数据库操作在JDBC分为两种

*更改数据库:executeUpdate(),返回所影响的数据库的行数。包括insert ,update,delete

*执行查询: executeQuery(),返回结果集ResultSet。包括select 

4.ResultSet的常用操作:

*ResultSet代表查询出的结果集,并且包含游标的概念

*ResultSet.getMetaData可以取得每一列的元信息:列名,列的类型,列的长度

*rs.next()使得游标往下移一行,并且返回是否还有下一行的boolean值

*rs.getXXX可以取得游标当前所指向的行里面的信息

*在只进的ResultSet里,取数据不允许倒退

*常用遍历结果集的方式:while(rs.next()) {  rs.getString(1) }

5.PreparedStatement

*可以对sql语句里的占位符进行设值setXXX

*执行executeUpdate()时不需要传sql语句,因为在创建 PreparedStatement的时候就指定了sql语句

*注意PreparedStatement与Statement

6.使用事务的方式

*禁止自动提交:设置Connection.setAutoCommit(false);

*在最后手动提交:Connection.commit();

*可以在数据操作中捕获异常,一旦捕获异常,使用Connection.rollBack();

7.批处理sql

*对于一个语句来将,可以使用addBatch()添加多个sql语句

*可以使用executeBatch一次执行所有加入的sql语句

8.建议大家使用Dao这中方式访问数据库

*实体类

*实体类的DAO

9.建议大家使用DBUtil管理取得连接与关闭连接

 12. 图形-布局,常用Swing组件

 图形用户界面(Swing常用组件,布局管理器,事件模型,绘图)

1.AWT与Swing

*AWT是重量级的组件,Swing是轻量级别组件,Swing是从awt的基础上发展过来的

*swing依然使用awt里面的布局与事件模型

*组件:每一个界面元素都称为一个组件,如按钮,文本框

*容器的概念:可以容纳其他元素的组件,通过add()往容器里面加入组件,每一个容器都可以设置自己的布局管理器(Layout)

2.常用组件

*框架:JFrame(有一个默认的内容面板),一般来将,所有的其他组件都放在JFrame的默认面板上。通过JFrame.getContentPane()获得默认内容面板

*面板:JPanel

*标签:JLabel

*文本输入框:JTextField

*文本域(多行文本):JTextArea

*单选按钮:JRadioButton

*复选框:JCheckBox

*下拉列表:JComboBox

*按钮:JButton

3。布局管理器(流布局Flowlayout,边框布局 BorderLayout,网格布局GridLayout)

*使用setLayout(new FlowLayout())方法设置容器的布局管理器

*Flowlayout:当拖动界面的时候,元素的大小不会改变,仅改变元素的位置,可以指定居中对齐,左对齐,右对齐等对齐方式

*BorderLayout:将界面分为东西南北中五部分.:元素大小会发生改变,但是相对位置不变。除中间区域(自动填充)之外,区域里面不加组件,默认大小为0.如果往区域里加入多个组件,只显示最后添加的组件。

*GridLayout:每个网格的大小相等,位置不发生改变,大小随容器大小变化而变化

13. 图形-事件处理,绘图

图形用户界面

1.内部类:在一个类的里面再定义一个类称为内部类

*内部类可以访问外部类的所有的成员变量与成员方法

*如果想在外部实例化内部类,必须使用全名:外部类.内部类

2.事件模型:

*java事件采用委托模型(授权模型),即事件源本身不处理事件,交给事件监听器来处理,因此需要把事件监听器绑定到事件源里面

*事件源,事件,事件监听器。事件有许多种,不同的事件使用不同监听器来处理

*事件触发后,系统自动调用事件处理方法(不需要手动调用事件处理方法),并传递事件信息作为方法参数

*事件编写步骤:1.实现监听器接口(完成事件处理方法);2.实例化实现监并绑定到事件源

3.事件实现方式

*外部类

*内部类

14. 多线程

线程:

1.线程的概念

*程序里面不同的执行路径,每一个执行路径称为一个线程

*对于单cpu来讲,某一具体的时刻,只会有一个线程在运行,但是CPU的速度非常快,表面上看起来是许多个线程并行执行

2.java中线程的创建与启动

*两种实现线程的方式:继承Thread,实现Runnable接口

*线程的启动:start.启动线程,运行线程的run方法,run方法运行完线程就结束(注意,start只在Thread里面有,start不同于run)

*注意一个Thread对象,只能一次调用start方法

*Thread与Runnable的区别:1:Runnable是接口,比Thread灵活(因为java只能单继承,可以同时实现许多接口);2.一个Runnable对象可以启动许多个线程,线程之间共享对象(Thread不能共享对象)

3.线程的状态:new ,可运行,运行中,阻塞,死亡

4.线程的调度

*Thread.sleep,使该线程睡眠

*join:线程合并(结果类似与方法调用)

*yield:线程让出当前CPU,留给其他线程运行

*线程优先级:setPriority设置线程优先级

*后台线程:setDaemon,必须在线程运行前设置为后台线程.当所有的前台线程都结束了,后台线程自动结束

*线程可以指定名字,取得当前线程的方法Thread.currentThread();

5.线程同步

*synchronized:同一时刻,只会有一个线程执行synchronized代码块

6.线程间通讯

*wait(),notify(),notifyAll是Object类中定义的方法

*wait():使得运行该代码的线程进入对象的等待池进行等待,线程进入阻塞状态,wait的线程一直阻塞,指导其他线程调用该对象的notify方法唤醒它。

*notify():唤醒对象等待池中的一个线程,使得被唤醒的线程进入可运行状态,如果等待池中没有线程,notify什么也不做。

*notifyAll():唤醒对象等待池中的所有线程

*wait(),notify,notifyAll都必须放在同步代码块里面(Synchronized代码块).

*wait()的线程会释放对象的锁,而Thread.sleep的线程不会释放对象的锁

7.线程安全的类:多线程的环境下使用类或者调用类的方法不会造成同步问题的类称为线程安全的类

*JDK1.1以前,java的集合框架中有一些线程安全的类:如Vector(被ArrayList代替),HashTable(被HashMap代替)

15. IO

16. 网络

17. 类与对象的生命周期

18. 补充知识点

代码书写规范

代码跟踪调试

有时候需要知道程序的具体执行过程,这时候跟踪程序很有用

跟踪调试程序

*设置断点

*调试,跟踪程序的运行

*程序的运行过程,变量的值