分类: Java
2008-03-10 11:25:27
JDBC连接MySQL数据库
一,在Java程序中,通过JDBC API访问数据库包括以下步骤:
1, 获得要访问的数据库的驱动器的类库,添加到CLASSPATH中
例:在CLASSPATH中包含MySQL的类库
2, 在程序中加载并注册JDBC驱动器,其中JDBC-ODBC驱动器在JDK中自带了,默认已经注册,
所以不需要再注册.下面为加载各数据库驱动器的代码:
<1>ODBC
//加载JdbcOdbcDriver类
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
<2>SQL Server
//加载SQLServerDriver类
Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);
//注册SQLServerDriver类
java.sql.DriverManager.registerDriver
(new com.microsoft.jdbc.sqlserver.SQLServerDriver());
<3>Oracle
//加载OracleDriver类
Class.forName(“oracle.jdbc.driver.OracleDriver”);
//注册OracleDriver类
java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
<4>MySQL
//加载MySQLDriver类
Class.forName(“com.mysql.jdbc.Driver”);
//注册MySQLDriver类
java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver());//不是必需
(在旧版本的MySQL驱动器中,Driver类为org.gjt.mm.mysql.Driver,目前新的版本尽管
保留了这个类,但提倡使用新的Driver类,com.mysql.jdbc.Driver)
有些驱动器的Driver类在被加载的时候,能自动创建自身的实例,然后调用DriverManager.
RegisterDriver()方法注册自身,例如,对于MySQL的驱动器类com.mysql.jdbc.Drvier,当
Java虚拟机加载这个类的时,会执行它的如下静态代码块:
//mysql-connector-java-3.0.17-ga\com\mysql\jdbc\Drvier.java文件: package com.mysql.jdbc; public class Driver extends NonRegisteringDriver { // Register ourselves with the DriverManager Static { Try { java.sql.DriverManager.registerDriver(new Driver()); } catch(java.sql.SQLException E) { throw new RuntimeException("Can't register driver!"); } if (DEBUG) { Debug.trace("ALL"); } } public Driver() throws java.sql.SQLException { // Required for Class.forName().newInstance() } } |
所以在Java应用程序中,只要通过Class.forName()方法加载MySQL Driver类即可,不必注册
驱动器的Driver类
3, 建立与数据库的连接
Connection con = java.sql.DriverManager.getConnection(dburl,user,password);
getConnection方法有3个参数,dburl指连接数据库的JDBC URL,user和password分别指连接
数据库的用户名和密码
JDBC URL的一般形式为:
Jdbc:drivertype:driversubtype://parameters
drivertype指驱动器类型,driversubtype是可选的,表示驱动器的子类型,parameters通常用来
设定数据库服务器的IP地址,端口号和数据库名,
几种常用数据库的JDBC URL形式:
<1>通过JDBC-ODBC Driver连接数据库
jdbc:odbc:datasource
<2>Oracle数据库连接
jdbc.oracle:thin:@localhost:1521:sid
<3>SQLServer数据库连接
jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=STOREDB
<4>MySQL数据库连接
jdba:mysql://localhost:3306/STOREDB
4, 创建Statement对象,准备执行SQL语句
Statement stmt = con.createStatement(); //con为Connection对象
5, 执行SQL语句
String sql = “select ID,NAME,AGE,ADDRESS from CUSTOMES where AGE>20”;
ResultSet rs = stmt.executeQuery(sql);
6, 遍历ResultSet对象种的记录
//输出查询结果
while(rs.next())
{
long id = rs.getLong();
String name = rs.getString();
int age = rs.getInt();
String address = rs.getString();
//打印数据
System.out.println(“id= ”+id+”,name= ”+name+”,age= ”+age+”,address= ”+address);
}
7, 依次关闭ResultSet,Statement和Connection对象
rs.close();
stmt.close();
con.close();
二,DBTest.java演示了JDBC API的基本用法
在main()方法中,先加载并注册MySQL驱动器,接着得到一个于数据库连接的Connection对象,
然后再由Connection对象得到Statement对象,最后通过Statement对象执行各种SQL语句
软硬件环境:
OS: Windows XP Professional SP2
JDBC: 3.0.17,
MySQL: 5.0.22
import java.sql.*; public class DBTest { public static void main(String args[]) throws Exception { Connection con; //接口:Concectio,Statement,ResultSet Statement stmt; ResultSet rs; //加载驱动器,下面的代码加载MySQL驱动器 Class.forName("com.mysql.jdbc.Driver"); //注册MySQL驱动器(这一步可省略,可自动注册) DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //String dbUrl = "jdbc:mysql://localhost:3306/STOREDB"; //将连接到数据库的URL中的字符编码设置为GB2312 String dbUrl = "jdbc:mysql://localhost:3306/STOREDB?useUnicode=true&characterEncoding=GB2312"; String dbUser = "pl"; String dbPwd = "123"; //建立数据库连接 con = java.sql.DriverManager.getConnection(dbUrl, dbUser, dbPwd); //创建一个Statement对象 stmt = con.createStatement(); //增加新记录到CUSTOMERS数据库 stmt.executeUpdate("insert into CUSTOMERS(NAME,AGE,ADDRESS)" +"VALUES('小王',20,'上海')"); //查询记录 rs = stmt.executeQuery("SELECT ID,NAME,AGE,ADDRESS from CUSTOMERS"); //输出查询结果 while(rs.next()) { long id = rs.getLong(1); String name = rs.getString(2); int age = rs.getInt(3); String address = rs.getString(4); //打印数据 System.out.println("id= "+id+",name= "+name+",age= "+age+",address= "+address); } //删除新增加的记录 //stmt.executeUpdate("delete from CUSTOMERS where name='小王'"); /* *释放相关资源 *关闭数据库操作的顺序与打开数据库操作的顺序相反 *依次关闭结果集--操作--连接 */ rs.close(); stmt.close(); con.close(); } } |
执行后,打印
id= 1,name= 小张,age= 23,address= 北京
id= 2,name= 小红,age= 29,address= 天津
id= 3,name= 小白,age= 33,address= 香港
id= 4,name= 小彭,age= 28,address= 深圳
id= 5,name= 小王,age= 20,address= 上海
(注:id值自动增加为5,因为在创建CUSTOMERS表时,ID属性已经设置” auto_increment”了)
在MySQL中查看CTSTOMERS表数据:
mysql> select * from customers;
+----+------+------+---------+
| ID | NAME | AGE | ADDRESS |
+----+------+------+---------+
| 1 | 小张 | 23 | 北京 |
| 2 | 小红 | 29 | 天津 |
| 3 | 小白 | 33 | 香港 |
| 4 | 小彭 | 28 | 深圳 |
| 5 | 小王 | 20 | 上海 |
+----+------+------+---------+
5 rows in set (0.00 sec)
表示通过JDBC连接MySQL数据库,成功插入数据!