日期:2014-05-16  浏览次数:20414 次

JDBC总结
JDBC开发

JDBC的开发过程:
1. 首先建立数据库,插入表的记录,新建一个Java项目,在项目下建立lib文件,并把mysql驱动导入到Java项目中lib文件中。
2. 编写代码,并把mysql驱动加载到Java项目中,构建路径
推荐方法:class.froName(“com.mysql.jdbc.Driver”);
3. 建立连接
String url=”jdbc:mysql://localhost:3306/xsgl”:
String user=”root”:
Sting pass=”root”:
Connection con=DriverManager.getConnection(url,user,pass);
4. 创建Statement对象
Statement st=con.createStatement();
5. 执行
ResultSet rs=st.excuteQuery(sql);
6. 遍历结果集
while(rs.next()){
}
7. 关闭资源
rs.close();
st.close();
con.close()
注意:关闭资源之前,必须判断rs,st,con是否为空,如果为空就不需要关闭,否则关闭资源。//if(rs!=null || st!=null || con!=null){
//关闭资源
rs.close();
st.close();
con.close()
}//if尽可能的写在finally中,确保资源的释放
Connection对象是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
为了确保资源的释放,尽量把资源释放代码放到finally语句块中。

Connection对象常用的方法有:
? createStatement():创建向数据库发送sql的statement对象。
? prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
? prepareCall(sql):创建执行存储过程的callableStatement对象。 
? setAutoCommit(boolean autoCommit):设置事务是否自动提交。 
? commit() :在链接上提交事务。
? rollback() :在此链接上回滚事务。
Statement对象常用方法:
? execute(String sql):用于向数据库发送任意sql语句
? executeQuery(String sql) :只能向数据发送查询语句。
? executeUpdate(String sql):只能向数据库发送insert、update或delete语句
? addBatch(String sql) :把多条sql语句放到一个批处理中。
? executeBatch():向数据库发送一批sql语句执行。 
ResultSet对象常用的结果集进行滚动的方法:
? next():移动到下一行
? Previous():移动到前一行
? absolute(int row):移动到指定行
? beforeFirst():移动resultSet的最前面。
? afterLast() :移动到resultSet的最后面。
提取代码到配置文件中,文件名.properties
在实际开发中为了避免数据库改动,需要把一些必要的代码写到一个单独的配置文件中,这就简化了对大量代码的改动:如
在驱动连接数据库时,String url=”jdbc:mysql://localhost:3306/xsgl”:
String user=”root”:
Sting pass=”root”:
像这些代码都可以提取到配置文件中,在配置文件中就可以写为user=root
在写代码需要使用配置文件的内容时,
InputStream in=DBManager.class.getClassLoader().getResourceAsStream("db.properties");
Properties pro=new Properties();
try {
pro.load(in);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
driver=pro.getProperty("driver");
url=pro.getProperty("url");
user=pro.getProperty("user");
password=pro.getProperty("password");
}catch(Exception e){
}
通过输入流就可以读取获取到配置文件的内容,附加给创建的成员变量,并加以使用
当系统运行时,需要读取一下配置文件,以获取配置文件的内容

多线程
多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。

多线程的优势:
1.提高界面程序的响应速度.
2.充分利用系统资源.

在线程编程中,继承Thread类或实现Runnable接口的类才具备多线程的能力。


线程的生命周期与主要的线程状态:
1. 新建状态(New).
2. 就绪状态(Runnable).
3. 运行状态(Run).
4. 阻塞状态(Block).
5. 终止状态(Dead).

线程的优先级用1~10表示,1表四优先级最高,默认值是5,每个优先级值对应Thread类中的一个公共静态常量。
如果有多个线程在等待,并不是优先级越高就肯定越早执行,只是获得的机会更多一些,因此通常情况下,不要依靠线程优先级来控制线程的状态。

线程调度
1. 线程睡眠sleep()
i. 调用sleep()方法使线程处于睡眠,线程由运行状态进入不可运行的状态,睡眠时间过后线程再次进入可运行状态。
2. 暂停线程yield()
i. 调用yield()方法可暂停当前线程执行,将CPU资源让出来,允许其他线程执行。
ii. Yield()的优点是保证有工作时不会让CPU闲置,主要用于编写多个合作线程,也适合于强制线程间的合作。
3. 连接线程join()
i. 调用join()方法可使当前线程暂停执行,等待调用该方法的线程的结束后再继续执行本线程。
4. 中断线程interrupt()
i. Interrupt()方法可为线程设置一个中断标记,以便于run()方法运行时使用isInterrupted()方法能够检测到。此时,线程在sleep()之类的方法中被阻塞时,由sleep()方法抛出一个InterruptException()异常,然后捕捉这个异常以处理超时。
ii. Interrupt()只是一个中断标记,并没有中断线程运行。

将线程标记为守护线程(后台线程):setDaemon(true); 注意该方法要在线程开启前使用。和前台线程一样开启,并抢资源运