JDBC

来源:互联网 发布:java se8.0 编辑:程序博客网 时间:2024/06/06 21:53

JDBC简介

JDBC(Java Database Connectivity)是标准Java访问数据库API,在java.sql下。

必须把mysql-connector-java-5.1.7-bin.jar导入到tomcatlib目录下面!

java项目中,只需要引入mysql-connector-java-5.1.7-bin.jar就可以运行java项目。

web项目中,当Class.forName("om.mysql.jdbc.Driver");myeclipse是不会去查找字符串,不会去查找驱动的。所以只需要把mysql-connector-java-5.1.7-bin.jar拷贝到tomcatlib目录就可以了。

Java使用JDBC访问数据库简单的例子

访问JDBC访问数据库一般步骤:注册驱动,获取连接,获取Statement,执行SQL返回结果集,遍历结果集,释放连接。

importjava.sql.DriverManager;
import
java.sql.ResultSet;
//importjava.sql.SQLException;
import java.sql.Connection;
import
java.sql.Statement;
public class
DUBtil {
  
private staticfinal StringURL ="jdbc:mysql://localhost:3306/databaseWeb";
   private static final
String USER= "root";
   private static final
String PASSWORD= "0000";
   public static void
main(String[] args)throws Exception {
     
// 1.加载驱动程序
     
Class.forName("com.mysql.jdbc.Driver");
     
// 2.获得数据库连接
     
Connection conn = DriverManager.getConnection(URL,USER,PASSWORD);
     
// 3.通过数据库连接操作数据库,增删改查
     
Statement stmt =conn.createStatement();
     
ResultSet rs =stmt.executeQuery("select* fromtb_person");
      while
(rs.next()) {
         System.
out.println(rs.getString("id") + rs.getString("name"));
     
}
   }
}

注册数据库驱动

三种方法:

DriverManager.registerDriver(new com.mysql.jdbc.Driver());new com.mysql.jdbc.Driver();Class.forName("com.mysql.jdbc.Driver");

JDBC基本操作:CRUD

CRUD:create、read、update、delete

executeQuery(String sql)用于执行SELECT语句,返回

executeUpdate(String sql)用于执行INSERT、UPDATE、DELETE。

流程与上面的例子类似。

注意是取 request 参数而不是地址栏参数,因此用 getAttribute方法而不是 getParameter

Statement和PreparedStatement

使用Statement是最简单的方式,使用SQL语言然后执行executeQuery或executeUpdate。

PreparedStatement接口继承Statement接口,是Statement子类。最大区别是PreparedStatement可以使用参数。

如:

Statement

String updateString = "UPDATE COFFEES SET SALES = 75 " + "WHERECOF_NAME LIKE ′Colombian′"

stmt.executeUpdate(updateString);

PreparedStatement:

PreparedStatement preStmt = con.prepareStatement("UPDATE COFFEES SETSALES = ? WHERE COF_NAME LIKE ? ");

preStmt.setInt(175);

preStmt.setString(2"Colombian");

preStmt.executeUpdate();

Statement执行批量SQL语句使用stmt.addBatch(Stringsql);//不同的sql语句

PreparedStatement执行批量SQL语句使用preStmt.addBatch();//同一条带参数的语句,preStmt已经set过参数。

处理结果集

进行两次查询不必rs.close(),因为返回ResultSet时会自动关闭上一次查询的结果集。

Statement默认返回的ResultSet只可往后滚动,因此只有next()、last()方法可用,若想使用previous()、first(),需要

Statement stmt = conn.createStatement(

ResultSet.TYPE_SCROLL_INSENSITIVE,

ResultSet.CONCUR_UPDATABLE);

Pagination分页显示

MySQL分页是利用LIMIT实现,如:

SELECT * FROM tb_person LIMIT 21,10//只取出从第21行开始的10行记录

分页显示时需要先查询记录总数,如SELECT count(*) FROM tb_person

不同数据库采用不同的方式实现分页,语法不同。

ResultSetMetaData元数据

rs.getString(“name”)来获取name列内容。

ResultSet对象的列名可由ResultSetMetaData元数据获得

DAO模式

DAO(Database Access Object)数据库操作对象,保存数据时它将JavaBean属性拆分成正确的SQL语句保存到数据库中,读取数据时将数据库中数据通过setter方法设置到JavaBean中。

DAO的出现使数据库代码和业务代码分离,Servlet或JSP只操作JavaBean与DAO层,DAO层只操作数据库。

抛出异常自动回滚

conn.setAutoCommit(false);//将自动提交设置为False,默认true

再执行多条SQL语句执行完毕,确认没有发生错误,在执行

conn.commit()提交,如果有异常抛出或者返回值不对,执行

conn.rollback()回滚。

 

事务的提交必须执行conn.commit(),事务的回滚不一定要显示的执行conn.rollback(),如果程序直接抛出异常,事务也会回滚。

事务性是数据库区分与其他存储技术的重要特征之一,基本上所有的数据库编程都会涉及事务编程。

连接池

减少创建与断开Connection开销,要操作数据库,程序并不是直接创建Connection,而是向连接池申请。

。。。

原创粉丝点击