jdbc提供的常用的接口和类
- DriverManager:驱动程序管理器,主要用来获得与数据库的连接,常用Connection getConnection(url,username,password);返回一个Connection对象。
- Connection:表示与数据库的连接,主要用于获取执行SQL语句的预置语句对象,常用方法
PrepareStatement preparedStatement(sql)。 - PrepareStatement:预置语句执行体,主要用于执行SQL语句。
int executeUpdate():执行非查询语句(INSERT、DELETE、UPDATE)
ResultSet executeQuery():执行查询语句(SELECT),返回结构集 - ResultSet :执行查询语句之后返回的结果集
boolean next()将结果集记录指针移动到下一条记录,如果有记录则返回true,否则返回false,常常跟循环搭配使用
getXXX()获取当前记录字段值,其中XXX表示数据库中字段的类型对应java的数据类型(注意数据库中的数据类型与Java数据类型不同的地方)。
jdbc访问数据库的步骤
第一步:导入数据库驱动jar包,并通过import java.sql.*导入。
第二步:加载注册驱动程序
Class.forName(“com.mysql.jdbc.Driver”);
第三步:定义好连接字符串以及连接数据库的用户名和密码;(以名为test的数据库为例)
String user=”root”;
String password=”root”;
String url=”jdbc:mysql://localhost:3306/test”;
也可以简写成String url=”jdbc:mysql:///test”;
第四步:利用驱动程序管理器获得数据库连接
Connection conn=DriverManager.getConnection(url,username,password);
第五步:定义待执行的SQL语句
String sql=”select name,age from users where id=?”;//?表示占位符
第六步:使用Connection对象的prepareStatement方法获得预置语句对象,并使用预置语句对象设定
占位符的值
PreparedStatement pstmt=conn.prepareStatement(sql);
//设置占位符的值
pstmt.setInt(1,1001);
//注意根据值得类型选择具体的set方法
第七步:使用pstmt的executeQuery方法执行SQL语句,得到结果集对象ResultSet
ResultSet rs = pstmt.executeQuery();
第八步:可以利用结果集进行数据操作了
Object getObject(int columnIndex); //通过列的编号获得任意数据类型的结果数据
Object getObject(String columnName); //通过列的名字获取任意数据类型的结果数据
ResultSetMetaData getMetaData(); //通过结果集返回结果集元数据信息
ResultSetMetaData:结果集元数据信息中还有常用的以下方法:
int getColumnCount(); //返回结果集中的列数
String getColumnName(int columnIndex) //根据列的索引得到列的名称
String getColumnTypeName(int columnIndex) //根据列的索引获取列的数据类型的名称
第九步:关闭资源(注意顺序)
rs.close();
pstmt.close();
conn.close();
封装一个成DBFactory
package com.edu.stu.Factory;
import java.sql.*;
public class DBFactory {
private static DBFactory ref = new DBFactory();
private DBFactory() {
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
String url = "jdbc:mysql:///test?useSSL=true";//设置连接字符串
return DriverManager.getConnection(url, "root", "root");//利用驱动程序管理器获取连接
}
//对sql语句进行非查询操作(查询操作类似只是返回的不是int型受影响行数而是返回ResultSet结果集,略),第一个参数是带sql语句(占位符式的),第二个参数是对应占位符中要设置的参数
public static boolean OperDML(String sql, Object[] args) {
boolean flag = false;
try {
Connection conn = getConnection();//获取连接
PreparedStatement pstmt = conn.prepareStatement(sql);//获得预置语句对象,并使用预置语句对对象设定
for (int i = 0; i < args.length; i++) {
pstmt.setObject(i + 1, args[i]);//填入占位符的参数值
}
int res = pstmt.executeUpdate();//update返回受影响行数
if (res > 0)
flag = true;
pstmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
//sql查询
public static ResultSet OperQuery(String sql,Object[] args){
ResultSet res=null;
try {
Connection conn=getConnection();
PreparedStatement pstmt=conn.prepareStatement(sql);
for(int i=0;i<args.length;i++)
{
pstmt.setObject(i+1, args[i]);
}
res=pstmt.executeQuery();
pstmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
}
扩展
事务
1.当我们使用DriverManager获得一条连接的时候,事务就处于自动提交模式,每条SQL语句都被当做一个事务来对待,并且事务在该语句执行完成后提交。
2.利用setAutoCommit(boolean)方法来决定是手动提交事务还是自动提交事务
–如果设置成手动提交事务,可以显式的使用Connection对象的commit()方法提交事务和rollback()方法回退事务。
JavaBean
1) 被用于封装各种操作细节,可以用来实现业务逻辑或数据访问逻辑,这样就可以显式的将软件分层,显式给客户的是一部分,访问数据库的是一部分。
2) JavaBean类跟普通类一样,数据成员不能被直接访问,只能通过共有的getter和setter方法来访问
3)JavaBean对数据的映射
I.映射单个实体:映射表中的一条记录
II.映射实体集:映射数据库中的一张表
如一个简单的学生类的javabean
package com.edu.stu.beans;
public class Student {
private int id;
public int getId() {
return id;
}
public void setId(int 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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
private String name;
private String sex;
private int age;
private int score;
public Student(int id, String name, String sex, int age, int score) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
this.score = score;
}
}