一、如何通过JDBC访问数据库
JDBC:Java DataBase Connectivity数据库连接用于在java程序中实现操作数据库。一般步骤如下:
- 加载JDBC驱动器。将数据库的JDBC驱动加载到classPath,web工程的一般放大WEB-INF/lib/下,java工程项目的则用build path将jar包导进去。
- 加载JDBC驱动,并将其注册到DriverManager中,一般使用反射Class.forName(String driveName).
- 简历数据库连接,取得Connection对象。一般通过Driver.getConnection(url,username,password)方法实现。
- 建立Statement对象或是PreparedStatement对象。
- 执行SQL语句
- 访问结果集ResultSet
- 依次将ResultSet、Statement、PreparedStatement、Connection对象关闭,释放掉所占用的资源。
实例代码如下:
首先创建一张表:
create tabel Employee(
id int primary key,
name varchar(20),
age int
);
示例程序:
import java.sql.*;
public class Test{
public static void main(String args[]){
String user="user1";
String password="pwd';
String url="jdbc:mysql://127.0.0.1:3306/Test";
String driver="com.mysql.jdbc.Driver";
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try{
Class.forName(driver);
con=DriverManager.getConnection(url,user,password);
stmt=con.createStatement();
stmt.execute("insert into Employee values(1,'James1',36)");
rs=stmt.executeQuery("select * from Employee");
while(rs.next()){
System.out.println(rs.getInt(1)+" " +rs.getString(2)+" " +rs.getInt(3));
}
}catch(SQLException e){
System.out.println(e.getMessage());
}finally{
try{
if(rs != null)rs.close();
if(stmt != null)stmt.close();
if(con != null)con.close();
}catch(SQLException fe){
System.out.println("fe:"fe.getMessage());
}
}
}
}
二、Statement、PreparedStatement和CallableStatement的区别
- Statement一般用于执行不带参数的SQL语句,并返回生成的结果,每次执行SQL语句时,数据库都要编译该SQL语句。
- PerparedStatement表示 与的SQL语句对象,用于执行带参数的SQL语句。效率高、安全性好、代码可读性和可维护性好。(推荐使用)
- CallableStatement用来调用数据库中存储过程的接口,如果有输出参数要注册,说明是输出参数。
举例说明PreparedStatement:
import java.sql.*;
public class Test{
public static void main(String args[]){
String user="user1";
String password="pwd';
String url="jdbc:mysql://127.0.0.1:3306/Test";
String driver="com.mysql.jdbc.Driver";
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
try{
Class.forName(driver);
con=DriverManager.getConnection(url,user,password);
ps=con.preparedStatement("select * from Emloyee where id=?");
ps.setInt(1,1);
rs=ps.executeQuery();
while(rs.next()){
System.out.println(rs.getInt(1)+" " +rs.getString(2)+" " +rs.getInt(3));
}
}catch(SQLException e){
System.out.println(e.getMessage());
}finally{
try{
if(rs != null)rs.close();
if(ps != null)ps.close();
if(con != null)con.close();
}catch(SQLException fe){
System.out.println("fe:"fe.getMessage());
}
}
}
}
三、getString()方法和getObject()方法有什么区别
在数据量很大的时候直接调用ResultSet方法的getString、getInt、getData方法会抛出异常:OrcalecException。此时应该使用getObject方法。因为其他方法会将查询结果都加载到内存中,如果数据量超过内存上限,则会导致异常。
四、JDBC与Hibernate有什么区别
Hibernate是JDBC的封装。采用配置文件的形式将数据库连接参数写到XML文件中。(下次再研究Hibernate)