JDBC简说

JDBCjava DataBase Connectivity)是使用Jaca存取数据库系统的解决方案,它将不同数据库间各自差异API与标准SQL(Structured Query Language)语句分开看待,实现数据库无关的Java操作接口。开发人员使用JDBC同一的API接口,并专注于标准SQL语句,就可以避免直接处理底层数据库驱动程序与相关操作接口的差异性。

1.       简介JDBC

简单地说,JDBC希望达到的目的,是让Java程序设计人员在编写数据库操作程序的时候,可以有个同意的操作接口,无需依赖于特定的数据库API,希望达到“写一个Java程序,适合所有的数据库”的目的。

 

JDBC数据库驱动程序按实现方式可以分为4个类型:

     Type 1 : JDBC-ODBC Bridge

     Type 2 : Native-API Bridge

     Type 3 : JDBC-middleware

     Type 4 : Pure Java Driver

使用纯Java程序来编写驱动程序与数据库进行沟通,而不通过桥接或中间件来存取数据库。

应用程序-àPure Java Driver--à数据库

2.       连接数据库

接下来将使用MySQL数据库进行操作,所以请将下载的tar.gz文件使用解压缩软件解开,并将其中mysql-connector-*.jar加入至Classpath的设置之中,假设是D/MyStrutsProject/WebRoot/WEB-INF/lib/mysql-connector-java-3.0.17-ga-bin.jar,则Classpath中必须有D/MyStrutsProject/WebRoot/WEB-INF/lib/mysql-connector-java-3.0.17-ga-bin.jar这个路径设置。

 

Java SE中与数据库操作相关的JDBC类都位于java.sql包中,要连接数据库,基本上必须有以下几个动作。

     加载JDBC驱动程序

首先必须通过java.lang.Class 类的forName()动态加载驱动程序类,并向DriverManager注册JDBC驱动程序(驱动程序会自动通过DriverManager.registerDriver()方法注册)。MySQL 的驱动程序类是com.mysql.jdbc.Driver,一个加载JDBC驱动程序的程序片段如下所示:

Try{

   Class.forName(“com.mysql.jdbc.Driver”):

}

Catch(ClassNotFoundException e){

   System.out.println(“找不到驱动程序类”);

}

 

     提供JDBC URL

JDBC URL定义了连接数据库时的协议、子协议、数据源识别。

   协议:子协议:数据源识别

  jdbc : mysql : // 主机名称:连接端口/数据库名称?参数= &参数=

jdbc : mysql : // localhost:3306/demo?user=root&password=123456

     协议JDBC中总是jdbc开始

     “子协议”是桥接的驱动程序或是数据库管理系统名称,使用MySQL的话是”mysql”

     数据源识别标出找出数据库来源的地址与连接端口。

     获得Connection

要连接数据库,可以向java.sql.DriverManager要求并获得java.sql.Connection对象。Connection是数据库连接的具体代表对象,一个Connection对象就代表一个数据库连接,你可以使用DriverManagergetConnection()方法,指定JDBC URL作为自变量并获得Connection对象

 

Try{

String url=”jdbc:mysql://localhost:3306/demo?”+”user=root&password=123456”;

Connection conn = DriverManager.getConnection(url);

}

    Catch(SQLException e){

~~~~~~
}

 

  Java.sql.SQLException是在处理JDBC时经常遇到的异常对象,SQLException是受检异常(Checked Exception),你必须使用try……catchthrows明确处理,它表示JDBC操作过程中入发生错误时的具体对象代表。

   获得Connection对象或,可以使用isClosed()方法测试与数据库的连接是否关闭,在操作完数据库之后,如果确定不再需要连接,则必须使用close()来关闭与数据库的连接,以释放连接时相关的必要资源。

 

3.       使用JDBC进行数据操作

     Statement / ResultSet

Connection对象是java中数据库连接的代表对象,接下来要执行SQL的话,必须获得java.sql.Statement对象,它是java中一个SQL叙述的具体代表对象,可以使用ConnectioncreateStatement()来建立Statement

      Statement stmt = conn.createStatement();

获得Statement对象之后,可以使用executeUpdate(),executeQuery()等方法来执行SQL.

 

executeUpdate()主要用来执行CREATE TABLE/ INSERT DROP TABLE/ALTER TABLE等来改变数据库内容的SQL. executeUpdate()方法会返回int结果,表示记录变动的数目。

   Stmt.executeUpdate(INSERT INTO t_message values (1,’xuweijian’));

executeQuery()方法主要用于SELECT等查询数据库的SQL, executeQuery()方法会返回java.sql.ResultSet()对象,代表查询的结果,查询的结果会是一条一条的记录。可以使用ResultSet next()来移动至一条记录,它会返回truefalse表示是否有下一条记录,接着可以使用get???()方法来获得数据,例如getString(),getInt(),getFloat(),getDouble()等方法,分别获得相对应的字段类型记录,get???()方法都提供有按字段名称获得记录,或是按字段顺序获得记录的方法。

 

 

ResultSet result = stmt.executeQuery(“select * from t_message”);

Whilt(result.next()){

System.out.print(result.getInt(”id”)+”/t”);

System.out.print(result.getString(”name”)+”/t”);

}

     Statement主要用于执行静态的SQL语句,也就是在执行executeQuery()  executeUpdate()等方法时,指定内容固定不变的SQL语句字符串,每一句SQL只适合于当时的执行,如果你有些操作只是SQL语句中某些参数会有所不同,其余的SQL子句皆相同,则你可以使用java.sql.PrepareStatement.

         使用ConnectionpreparedStatement()方法建立好一个预先编译(precompile)的SQL语句,其中参数会变动的部分,先指定“?”作为占位符。

       PreparedStatement stmt = conn.prepareStatement(“INSERT INTO t_message VALUES(?,?,?,)”);

     等到需要真正指定参数执行时,再使用相对应的setInt()/setString()等方法,指定“?”处真正应该有的参数。

       Stmt.setInt(1,2);

       Stmt.setString(2,”momor”);

       Stmt.setString (3,”momor@mail.com”);

       Stmt.setString (4,”message2”);

 

例如:

PreparedStatement stmt = conn.prepareStatement(“INSERT INTO t_message VALUES(?,?,?,)”);

Stmt.setInt(1,2);

       Stmt.setString(2,”momor”);

       Stmt.setString (3,”momor@mail.com”);

       Stmt.setString (4,”message2”);

Stmt.executeUpdate();

Stmt.clearParameters();

 

 

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值