虾米窝窝 -- » JAVA学习:连接MySQL数据库
Subscribe RSS
JAVA学习:连接MySQL数据库 03月 04

      java操作数据库一般要经过加载驱动程序类,建立数据库连接,创建Statement对象,执行SQL,关闭Statement对象,关闭数据库连接几个过程。

1.加载驱动程序类:

   java中加载数据库驱动是通过DriverManager 来完成的,DriverManager 类是 JDBC 的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。 另外,DriverManager 类也处理诸如驱动程序登录时间限制及登录和 跟踪消息的显示等事务。DriverManager 类包含一列 Driver 类,它们已通过调用方法 DriverManager.registerDriver 对自己进行了注册。所有 Driver类都必须包含有一个静态部分。它创建该类的实例,然后在加载该实例时 DriverManager 类进行注册。这样,用户正常情况下将不会直接调用 DriverManager.registerDriver;而是在加载驱动程序时由驱动程序自动调用。加载 Driver 类,然后自动在 DriverManager中注册的方式有两种:

      A.Class.forName。这将显式地加载驱动程序类。由于这与外部设置无关,因此经常使用这种加载驱动程序的方法。以下代码加载类 acme.db.Driver
Class.forName("acme.db.Driver");
*注:Class.forName(xxx.xx.xx)要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段。Class.forName(xxx.xx.xx).newInstance()可以通过含有一个类的包名和类名的字符串来实例化一个类。newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。和关键字new相比,它是个弱类型的,效率相对较低,只能调用无参构造。

      B.通过将驱动程序添加到java.lang.System的属性jdbc.drivers中这是一个由DriverManager类加载的驱动程序类名的列表,由冒号分隔:初始化DriverManager类时,它搜索系统属性jdbc.drivers,如果用户已输入了一个或多个驱动程序,则DriverManager类将试图加载它们。以下代码说明程序员如何在~/.hotjava/properties中输入三个驱动程序类(启动时,HotJava将把它加载到系统属性列表中):
jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.test.ourDriver;

2.建立数据库连接:
      加载Driver类并在DriverManager类中注册后,它们即可用来与数据库建立连接。当调用DriverManager.getConnection方法发出连接请求时,DriverManager 将检查每个驱动程序,查看它是否可以建立连接。
连接代码形式:Connection con = DriverManager.getConnection(dateBaseUrl, dbUser, dbPassword);

3.创建Statement对象
      Statement 对象用于将 SQL 语句发送到数据库中。实际上有三种 Statement 对象,它们都作为在给定连接上执行 SQL 语句的包容器:Statement、PreparedStatement(它从 Statement 继承而来)和 CallableStatement(它从 PreparedStatement 继承而来)。它们都专用于发送特定类型的 SQL 语句:Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带 IN 参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存储过程的调用。Statement 接口提供了执行语句和获取结果的基本方法。PreparedStatement 接口添加了处理 IN 参数的方法;而CallableStatement 添加了处理 OUT 参数的方法。CallableStatement 添加了处理 OUT 参数的方法。创建Statement代码:Statement stmt = con.createStatement();

4.执行SQL语句
      Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。使用哪一个方法由 SQL 语句所产生的内容决定。 
   * 方法executeQuery 用于产生单个结果集的语句,例如 SELECT 语句。 
   * 方法executeUpdate 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate的返回值总为零。 
   * 方法execute用于执行返回多个结果集、多个更新计数或二者组合的语句。因为多数程序员不会需要该高级功能,所以本概述后面将在单独一节中对其进行介绍。
执行语句的所有方法都将关闭所调用的 Statement 对象的当前打开结果集(如果存在)。这意味着在重新执行 Statement 对象之前,需要完成对当前 ResultSet 对象的处理。

5.最后用close()方法来关闭查询结果集和数据库连接:
      例如:rs.close();con.close();

 

附:一个简单的MySQL数据查询操作例子:

 

Java代码
  1. import java.sql.*;   
  2. import java.io.*;   
  3.   
  4. public class MySQLTest {   
  5.     public static void main(String[] args) {   
  6.         String tableName = "test";// 表名   
  7.         String dbhost = "jdbc:mysql://localhost/test";   
  8.         String dbuser = "test";   
  9.         String dbpwd = "test";   
  10.            
  11.         BufferedReader input = new BufferedReader(new InputStreamReader(System.in));   
  12.            
  13.         try {   
  14.             Class.forName("com.mysql.jdbc.Driver");// 加载驱动程序   
  15.             System.out.println("数据库驱动加载成功!");   
  16.             Connection con = DriverManager.getConnection(dbhost, dbuser, dbpwd);//建立数据库连接   
  17.                
  18.             con.setCatalog("test");   
  19.             System.out.println("数据库连接成功!");   
  20.             Statement statement = con.createStatement();// 数据库操作   
  21.             System.out.print("请输入想查询的表名:");   
  22.             tableName = input.readLine();   
  23.             String sql = "SELECT * FROM " + tableName;   
  24.             ResultSet rs = statement.executeQuery(sql);   
  25.             System.out.print("请输入想列出列名:");   
  26.             String cName = input.readLine();   
  27.                
  28.             // 获得数据结果集合   
  29.             if (!rs.next())   
  30.                 System.out.println("表名或列名输入有误或到了末尾");   
  31.             else {   
  32.                 System.out.println("查询结果为:");   
  33.                 do {   
  34.                     String result = rs.getString(cName);   
  35.                     result = new String(result.getBytes("ISO-8859-1"), "UTF-8");   
  36.                     System.out.println(result);   
  37.                 } while (rs.next());   
  38.             }   
  39.                
  40.             rs.close();   
  41.             con.close();   
  42.         } catch (Exception ex) {   
  43.             System.out.println(ex);   
  44.             System.exit(0);   
  45.         }   
  46.     }   
  47. }  

 

Category: JAVA学习  | 标签: , , , , , , ,  | 917次阅读
你可以通过RSS 2.0来关注此文章的评论. 也可以留言或者从你的主页trackback.
留言

XHTML: 你可以使用以下的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>