日期:2014-05-16 浏览次数:20675 次
?1)调用Class类的forName()方法,加载并注册数据库驱动。
?2)调用DriverManager类的getConnection()方法,建立到数据库的连接
?3)调用Connection对象的createStatement()方法,访问数据库
?4)调用Statement对象的executeQuery()方法得到ResultSet对象。
?5) 调用ResultSet对象的getObject()方法,处理结果。
?6)释放资源(连接应该尽可能晚建立,释放资源应尽可能早释放。)
?
下面是初始代码:
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*利用JDBC连接数据库
* @author Haowang
*/
public class Base {
public static void main(String[] args) throws Exception{
prime();
}
/**
* 初始代码,了解连接数据库的基本步骤
* @throws ClassNotFoundException
* @throws SQLException
*/
private static void prime() throws ClassNotFoundException, SQLException {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver"); //推荐使用这种方式,不会对具体的驱动类产生依赖
// DriverManager.registerDriver(new Driver()); //会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖
// System.setProperty("jdbc.Drivers", "com.mysql.jdbc.Driver"); //虽然不会对具体的驱动类产生依赖,但注册不太方便,所以很少使用
//2.建立连接(Connection)
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, user, password);
//3.创建语句(Statement)
Statement st = conn.createStatement();
//4.执行语句
ResultSet rs = st.executeQuery("Select * from Students;");
//5.处理结果
while(rs.next()) {
System.out.println(rs.getObject(1)+"\t"+rs.getObject(2)+"\t"+rs.getObject(3)+"\t"+rs.getObject(4));
}
//6.释放资源
rs.close();
st.close();
conn.close();
}
}
?上面代码有很多缺陷,在实际使用过程中应进行优化:
? 释放资源时应该保证即使前面代码出现异常也能正常释放资源;
??驱动只注册一次,采用单例模式(采用静态代码块也可以);
??新建一个工具类JdbcUtils,通过这个工具类来访问数据库;
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*Jdbc工具类
* @author HaoWang
*/
public class JdbcUtils {
private static String url = "jdbc:mysql://localhost:3306/test";
private static String user = "root";
private static String password = "123456";
private JdbcUtils() { }
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, user, password);
}
public static void free(Connection conn, Statement st, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException ex) {
System.out.println(ex.toString());
} finally {
try {
if(st!=null) {
st.close();
}
} catch (SQLException ex) {
System.out.println(ex.toString());
} finally {
try {
if(conn!=null){
conn.close();
}
} catch (SQLException ex) {
System.out.println(ex.toString());
}
}
}
}
}
?
package jdbc;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
* @author Haowa