一、JDBC简介
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。
二、准备工作
- 导入对应jar包
使用JDBC需要导入对应的jar包。具体数据库与对应jar包对应关系如下图所示:
另附:各种数据库对应的驱动类名和URL格式
- 在eclipse中导入jar方法为:在项目上单击右键选择“Build Path"——“configure Build Path···”,在Libraries中单击"Add External JARs…",选择所需要的jar包,之后单击“OK”退出即导入了所需jar包。
三、使用JDBC操作数据库 - 1.建立实体类
这样做主要是为了便于操作和接口定义,是非必须的。
public class Student {
private String id;
private String name;
private String sex;
private String age;
public Student(String id,String name,String sex,String age){
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
- 2.连接数据库
public class MyConnect {
public static Connection getConn(){
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/myjdbc";
String user = "user";
String password = "password";
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static Integer getAll(){
Connection conn = getConn();
String sql = "select * from student_info";
PreparedStatement pst;
try {
pst = (PreparedStatement) conn.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
int amount = rs.getMetaData().getColumnCount();
while(rs.next()){
for(int i = 1;i < amount + 1;i++){
System.out.print(rs.getString(i) + "\t");
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static int insert(Student student){
Connection conn = getConn();
String sql = "INSERT student_info (id,name,sex,age) VALUES(?,?,?,?)";
PreparedStatement pst;
int i = 0;
try {
pst = (PreparedStatement) conn.prepareStatement(sql);
pst.setString(1, student.getId());
pst.setString(2, student.getName());
pst.setString(3, student.getSex());
pst.setString(4,student.getAge());
i = pst.executeUpdate();
pst.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
public static int delet(Student student){
Connection conn = getConn();
String sql = "DELETE FROM student_info where student_info.id = '" + student.getId() + "'";
PreparedStatement pst;
int i = 0;
try {
pst = (PreparedStatement) conn.prepareStatement(sql);
i = pst.executeUpdate();
pst.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return i;
}
public static void main(String[] args) {
System.out.println("插入前数据为:");
MyConnect.getAll();
MyConnect.insert(new Student("951", "王五", "男", "97"));
System.out.println("插入后数据为:");
MyConnect.getAll();
System.out.println("删除后数据为:");
MyConnect.delet(new Student("951", "王五", "男", "97"));
MyConnect.getAll();
}
}
- 代码分析
在上述对数据库进行增删改查的过程中,可以发现其共性部分,即通用的流程:
(1)创建Connection对象、SQL查询命令字符串;
(2)对Connection对象传入SQL查询命令,获得PreparedStatement对象;
(3)对PreparedStatement对象执行executeUpdate()或executeQurey()获得结果;
(4)先后关闭PreparedStatement对象和Connection对象。
可见,使用JDBC时,最常打交道的是Connection、PreparedStatement这两个类,以及select中的ResultSet类。查阅Java API手册可以了解其具体的意义和方法。
下面引用的Java API的资料出自http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/index.html。
java.sql
接口 Connection
所有超级接口:
Wrapper
public interface Connectionextends Wrapper
与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。
Connection 对象的数据库能够提供描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息。此信息是使用 getMetaData 方法获得的。
PreparedStatemnt
java.sql
接口 PreparedStatement
所有超级接口:
Statement, Wrapper
所有已知子接口:
CallableStatement
public interface PreparedStatementextends Statement
表示预编译的 SQL 语句的对象。
SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
常用方法
boolean execute()
在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。
ResultSet executeQuery()
在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。
int executeUpdate()
在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。
ResultSet
java.sql
接口 ResultSet
所有超级接口:
Wrapper
所有已知子接口:
CachedRowSet, FilteredRowSet, JdbcRowSet, JoinRowSet, RowSet, SyncResolver, WebRowSet
public interface ResultSetextends Wrapper
表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。