Driver接口
每个数据库驱动程序必须实现Driver接口,对于java开发者而言,只需要使用Driver接口就可以了,我们在编程中要连接数据库,必须先装载特定厂商提供的数据库驱动程序(Driver),不同驱动程序的装载方法如下:
//装载Oracle JDBC 驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//装载MS SQLServer JDBC 驱动
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
//装载MySQL JDBC 驱动
Class.forName("org.gjt.mysql.Driver");
DriverManager
DriverManage(驱动程序管理器)类是JDBC的管理层,作用于用户和驱动程序之间.当DriverManager激发getConnection()方法时,DriverManager类首先从它已加载的驱动程序池中找到一个可以接受该数据库URL的驱动程序,然后请求该驱动程序使用相关的数据库URL去连接到数据库中.于是getConnection()方法建立了与数据库的连接.
常用的装载驱动方法:显式装载驱动程序
try{
//装载SQLServer 驱动
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
//装载Oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/jsp_library","root","");
Statement stmt = conn.createStatement();
}catch(ClassNotFoundException e)
{
System.out.println("Driver not found");
}
static Connection getConnection(String url, String user, String password): 连接到指定URL的数据库,使用用户名为user,密码为password
Statement
Statement提供在基层连接上运行SQL语句,并且访问结果.Connection接口提供了生成Statement的方法.
Statement提供了许多方法:
execute():运行语句,返回是否有结果集
executeQuery():运行查询语句,返回ResultSet对象
executeUpdate():运行更新操作,返回更新的行数
Statement有三种
Statment: 对象用于执行不带参数的简单SQL语句
.........
Connection conn = DatabaseConnection.getConnection();
Statement stmt = conn.createStatement();
ResultSet rst = stmt.executeQuery("select * from sometable");
........
PerparedStatement:对象用于执行带或不带IN参数的预编译SQL语句
........
Connection conn = DatabaseConnection.getConnection();
PreparedStatement pstmt = conn.prepareStatement("insert into user_info values(?,?,?,?,?,?,?,?)");
pstmt.setSting(1,"hellking");
pstmt.setInt(2,20);
.........
CallableStatement 对象用于执行对数据库的存储过程的调用
........
Connection conn = DatabaseConnection.getConnection();
strSQL = "{call demo_account(?,?,?,?,?,?)}";
CallableStatement sqlStmt = conn.prepareCall(StrSQL);
sqlStmt.setString(1,"userid_1");
sqlStmt.setString(2,"userid_2");
.........
//执行存储过程
int i = sqlStmt.executeUpdate();
ResulteSet
在Statement执行SQL语句时,有时会返回ResultSet结果集,ResultSet往往包含的是查询的结果集.
通过ResultSet.next()方法把当前的指针向下移动一位.最初它位于第一行之前,因此,第一次调用next将把指针置于第一行上,使它成为当前行.随着每次调用next导致指针向下移动,按照从上到下的次序获取 ResultSet行
.................
try{
Connection conn = DatabaseConnection.getConnection();
Statement stmt = conn.createStatement();
ResultSet rst = stmt.executeQuery("select * from User_info");
while(rst.next())
{
out.println(rst.getString("userName");
out.println(rst.getDate("regDate");
out.println(rst.getString(4));
........
}
}catch(SQLException e)
{
out.println(e.getMessage());
}