java基础知识总结(七)

1.      守护线程

又被成为“服务线程”、“精灵线程”、“后台线程”,是指在程序运行时后台提供一种通用服务的线程,这种线程并不是不可或缺的。用户线程全部退出运行,只剩下守护线程存在了JVM也就退出了。将一个用户线程设置为守护线程的方法就是在调用start()方法启动线程之前调用对象的setDamon(true)方法,若将以上参数设置为false,则表示的用户进程模式。

2.      join()方法的作用

就是让调用该方法的线程在执行完run()方法后,再执行join方法后面的代码。即将两个线程合并,用于实现同步功能。

public class JoinTest {

  public static void main(String[] args) {

      Thread t=new Thread(new ThreadImp());

      t.start();

      try{

          t.join(1000);//住线程等待1s结束

          if(t.isAlive()){//t已经结束

              System.out.println("t has  not finished");

          }else{

              System.out.println("t has finished");

          }

          System.out.println("joinfinish");

      }catch(InterruptedException e){

          e.printStackTrace();

      }

  }

}

public class ThreadImp implements Runnable {

 

  @Override

  public voidrun() {

      try{

          System.out.println("Begin ThredImp");

          Thread.sleep(5000);

          System.out.println("End ThreadImp");

      }catch(InterruptedException e){

          e.printStackTrace();

      }

  }

 

}

运行结果: BeginThredImp

t has  not finished

joinfinish

End ThreadImp

 

3.      JDBC(Java DataBase Connectivity)访问数据库

通过JDBC访问数据库一般的步骤如下:

1) 加载JDBC驱动器,

2) 加载JDBC驱动,并注册到DriverManager中

3) 建立数据库连接,取得Connection对象。一般通过DriverManager.getConnection(url,

Username,passwd)实现,url表示连接数据库的字符串,

4) 建立Statement对象或事PrepareStatement对象

5) 执行SQL语句

6) 访问结果集ResultSet对象

7) 依次将ResultSet、Statement、PrepareStatement、Connection对象关闭,释放掉所有占用资源,例如rs.close(),con.close()等。

  public classTest {

  public static void main(String[] args) {

      //初始化参数

      String user="root";

      String password="renfen";

      String url="jdbc:mysql://localhost:3306/datas";

      String driver="com.mysql.jdbc.Driver";

      Connection con =null;            

      Statement stmt=null;

      ResultSet rs=null;

     

      try{

         

          try {

              Class.forName(driver);

               System.out.println("Success loading Mysql Driver!");

          } catch (Exception e) {

              // TODO Auto-generated catch block

              System.out.print("Error loading Mysql Driver!");

              e.printStackTrace();

          }//加载JDBC驱动

          con=DriverManager.getConnection(url,user, password);//建立数据库连接

          stmt=con.createStatement();//建立Statement对象或PrepareStatement对象

          stmt.execute("insert into Employee values(1,'James1',25)");//执行SQL语句

          stmt.execute("insert into Employee values(2,'james2',24)");

          rs=stmt.executeQuery("select * from Employee");//获取访问结果集

          while(rs.next()){

              System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getInt(3));

          }

      }catch(SQLException e1){

          e1.printStackTrace();

      }finally{

          try{

              if(rs!=null)rs.close();

              if(stmt!=null)stmt.close();

              if(con!=null) con.close();

          }catch(SQLException e){

              System.out.println(e.getMessage());

          }

      }

  }

}

4.       JDBC处理事务的方法

一个事务是由一条或多条对数据库操作的SQL语句所组成的一个不可分割的工作单元。只有当事务中的所有操作都正常执行完了,整个事务才会被提交给数据库。commit()方法表示完成对事务的提交,rollback()方法表示完成事务回滚,多用于处理事务过程中出现异常的情况。


可以通过Connection对象的conn.setTransactionLevel()方法来设置隔离级别,通过conn.getTransactionIsolation()方法来确定当前事务的级别。

5.       Class.forName的作用及Statement、PrepareStatement、和CallableStatement的区别

就是把类加载到JVM中,会返回一个与带有给定字符串名的类或接口相关联Class对象,并且JVM会加载这个类,和执行该类的静态代码块。(类加载机制可以提高阮籍的可扩展性)。

1.Statement用于执行不带参数的简单SQL语句,并返回它所生成结果的对象,

Statementstmt=null;  stmt=con.createStatement();  或者Statementstmt= conn.getStatement();  

Stmt.executeUpdate(“insertinto client values(‘a’,’aaa’)”);

 

 2.PrepareStatement 表示预编译的SQL语句的对象用于执行带参数的预编译SQL语句。

3.CallableStatement则是提供了用来调用数据库中存储过程的接口,如果有输出参数要注册,说明是输出参数。

public class PrepareStatementTest {

  public static void main(String[] args) {

      String user="root";

      String passwd="renfen";

      String url="jdbc:mysql://localhost:3306/datas";

      String driver="com.mysql.jdbc.Driver";

      Connection con=null;

      PreparedStatement pstmt=null;

      ResultSet rs=null;

      try{

          try {

              Class.forName(driver);

          } catch (Exception e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

          }

          con=DriverManager.getConnection(url,user, passwd);

          pstmt= con.prepareStatement("select * from Employee where id=?");

          pstmt.setInt(1, 1);//传递参数

          rs=pstmt.executeQuery();

          while(rs.next()){

              System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getInt(3));

          }

         

      }catch(SQLException e1){

          e1.printStackTrace();

      }finally{

          try{

              if(rs!=null)

                  rs.close();

              if(pstmt!=null)

                  pstmt.close();

              if(con!=null)

                  con.close();

          }catch(SQLException e){

              e.printStackTrace();

          }

      }

  }

}

相比之下PrepareStatement优点是:1)效率高;2)代码可读性和可维护性更好;3)安全性更好。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值