jdbc 连接mysql 数据库
使用jdbc连接数据库是比较简单的,下面介绍一下基本步骤。
1.注册数据库驱动
市面上有很多的数据库产品如:
- mysql
- oracle
- sql server
- db2
如何与数据库对接是依赖于特定的数据库产品的,java并没有关于此的特定实现。实际上java只是制定了数据库连接的接口(也就是jdbc),具体的实现是由数据库厂商提供的。因此若要操作某一数据库,程序中要依赖于第三方提供的驱动包。本文中使用的是mysql数据库,在安装目录下可以找到驱动包。
导入jar包之后下一步要做的是注册数据库驱动,代码如下所示:
code1(注册驱动1)
try {
// The newInstance() call is a work around for some
// broken Java implementations
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (Exception ex) {
// handle the error
}
上面代码的意义实际上是将mysql的驱动注册给jdbc,上面的代码可能有点难以理解,创建那么一个对象有什么用呢?查看com.mysql.jdbc.Driver的源码可以发现,Driver内部有一个静态代码块,上面的代码将导致代块的代码得到执行。其实质就是将mysql的驱动注册给java的驱动管理者。
code2(com.mysql.jdbc.Driver内部静态静态代码块)
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can\'t register driver!");
}
}
所以采用反射的方式实质是与下面的代码是等效的
code3(注册驱动2)
try {
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can\'t register driver!");
}
2.连接数据库
注册完数据库之后,下一步要做的就是连接库。连接数据库的话需要三个参数 数据库地址,用户名,以及密码。
下面是我的代码
String url="jdbc:mysql://localhost/test?user=tiger&password=123456";
Connection conn = DriverManager.getConnection(url);
上面的url惟一指定一个数据库,
- localhost 服务器地址,使用默认端口3306
- test 这是我的数据库名
- user 后接用户名
- password 后接密码
- jdbc:mysql mysql连接协议固定格式,不同的类别数据库格式不一样
3数据库操作
//假定已经连接到数据库了
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
//执行查询,会得到一个结果集
rs = stmt.executeQuery("SELECT foo FROM bar");
// 上面的代码可以用如下方式替换
// 普通的数据库操作
if (stmt.execute("SELECT foo FROM bar")) {
rs = stmt.getResultSet();
}
//得到查询结果后可以在这里做一些操作
}
catch (SQLException ex){
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
finally {
// 执行完操作后,如果不在需要,记得释放资源
// it is a good idea to release
// resources in a finally{} block
// in reverse-order of their creation
// if they are no-longer needed
if (rs != null) {
try {
rs.close();
} catch (SQLException sqlEx) { } // ignore
rs = null;
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException sqlEx) { } // ignore
stmt = null;
}
}
注:上面中的参数都是直接写到代码里的,这样子的话数据库之间切换会比较麻烦,实际上应该写到配置文件里。