JDBC访问及相关问题

来源:互联网 发布:软件项目沟通计划 编辑:程序博客网 时间:2024/06/01 23:14

1、加载JDBC驱动程序:   

    加载想要连接的数据库的驱动到,这通过java.lang.Class类的静态方法forName(String  className)实现,

 Class.forName("com.mysql.jdbc.Driver") ;   

   成功加载后,会将Driver类的实例注册到DriverManager类中。   

 

 2、相关URL  

String url=” jdbc:mysql: //localhost:3306/test”

String user=”root”

   

 3、创建数据库的连接   

   Connection con= DriverManager.getConnectin(url , username , password )

     

 4、创建一个Statement   或者PreparedStatement  

        Statement stmt = con.createStatement() ;   

       PreparedStatement pstmt = con.prepareStatement(sql) ;   

      // CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;   

 

 5、执行SQL语句   

    (1) ResultSet executeQuery(sqlString):执行查询数据库的SQL语句 ,返回一个结果集(ResultSet)对象。   

     (2) int executeUpdate(sqlString):用于执行INSERTUPDATEDELETE语句以及SQL DDL语句,如:CREATE TABLEDROP TABLE等   

     (3) execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的   

        语句。   

   具体实现的代码:   

    ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;   

    int rows = stmt.executeUpdate("INSERT INTO ...") ;   

    boolean flag = stmt.execute(String sql) ; 

  

 6、访问结果

     while(rs.next()){   

         String name = rs.getString("name") ;   

      String pass = rs.getString(1) ; // 此方法比较高效   

     }   

    (列是从左到右编号的,并且从列1开始)   

 

 7、关闭JDBC对象    

     操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反。ResultSetStatementConnection


import java.sql.*;public class jdbcConn {   public static void main(String[] args) {      try {         Class.forName("org.apache.derby.jdbc.ClientDriver");      }      catch(ClassNotFoundException e) {         System.out.println("Class not found "+ e);      }      System.out.println("JDBC Class found");      int no_of_rows = 0;      try {         Connection con = DriverManager.getConnection         ("jdbc:derby://localhost:1527/testDb","username",         "password");           Statement stmt = con.createStatement();         ResultSet rs = stmt.executeQuery         ("SELECT * FROM employee");         while (rs.next()) {            no_of_rows++;         }         System.out.println("There are "+ no_of_rows          + " record in the table");      }      catch(SQLException e){         System.out.println("SQL exception occured" + e);      }   }}


 一、StatementPreparedStatementCallableStatement

1.PreparedStatement预编译,对于批量处理能够大大提高效率.用于执行带参数的sql语句,同时可以防止sql注入攻击(通过SQL命令插入到web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器)


2. Statement 对象。在对数据库仅仅运行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement对象的开销比Statement大,对于一次性操作并不会带来额外的优点。


3.statement执行不带参数的sql语句每次执行都要编译该sql语句preparedstatement是预编译得,preparedstatement支持批处理

 

4.CallableStatement提供调用数据库的存储接口

 

二、getString()getInt()getObject()

以上几种方法都是从ResultSet中获得数据,当结果集较小时不用考虑性能,但是当结果集非常大,前两者会抛出异常,因为这两种方法是一次性将所有数据都放入到内存中,而getObject()则不会有这个问题。