JDBC
Oracle驱动包
可以从Oracle安装路径下获取。
获取路径:D:\Oracle\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6.jar
Java连接数据库过程
过程
1、加载驱动 ->对一个类(oracle.jdbc.driver.OracleDriver)进行类加载,获取类对象
Class.forName("oracle.jdbc.driver.OracleDriver");
2、获取数据库连接
url组成 : jdbc:oracle:thin:@ip:1521:xe/orcl
DriverManager.getConnection(url , 数据库用户名, 数据库密码);
3、编写SQL语句 :例如select * from t_user ;
4、创建一个SQL执行器
// 创建SQL执行器
Statement statement = conn.createStatement() ;
或者
// 创建SQL预编译执行器
5、执行SQL语句,并返回结果集
ResultSet rs = statement.executeQuery(sql);
6、遍历结果集
while(rs.next()) {
//获取结果集
rs.getXXX("字段");
}
7、关闭资源
代码示例:
try {
// 1. 加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2. 获取数据库连接
String url = "jdbc:oracle:thin:@localhost:1521:XE";
Connection conn = DriverManager.getConnection(url, "shop", "shop");
// 3. 编写SQL语句
String sql = "select * from t_user";
// 4. 创建一个SQL执行器
Statement stat = conn.createStatement();
// 5. 执行SQL语句,并返回结果集
ResultSet rs = stat.executeQuery(sql);
// 6. 遍历结果集
while(rs.next()) {
// 7. 获取记录内容
int id = rs.getInt("ID");
String name = rs.getString("NAME");
String password = rs.getString("PASSWORD");
System.out.println("id:" + id + ", name:" + name + ",password:" + password);
}
// 8. 关闭资源
if(rs != null) {
rs.close();
rs = null;
}
if(stat != null) {
stat.close();
stat = null;
}
if(conn != null) {
conn.close();
conn = null;
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
调用存储过程
public UserInfo cunQian(Integer id, double money) throws Exception {
// 连接数据库
Connection conn = DBUtil.getConnection();
// 创建存储过程预编译执行器
CallableStatement cs = conn.prepareCall("{call cunqian(?, ?, ?)}");
// 设置输入参数
cs.setInt(1, id);
// 设置输出参数的处理
cs.registerOutParameter(2, Types.VARCHAR); // 第2个参数是数据类型
// 设置输入输出参数的处理; 对输入输出的参数模式,先设值再注册数据类型
cs.setDouble(3, money);
cs.registerOutParameter(3, Types.DOUBLE);
// 执行存储过程
boolean b = cs.execute(); // 如果有结果集返回true, 否则返回false
// 获取存储过程的执行结果
String email = cs.getString(2);
Double m = cs.getDouble(3);
UserInfo userInfo = new UserInfo();
userInfo.setEmail(email);
userInfo.setMoney(m);
DBUtil.close(null, cs, conn);
return userInfo;
}
调用函数
public Double zhuanZhang(Integer id, Integer toId, double money)
throws Exception {
// 连接数据库
Connection conn = DBUtil.getConnection();
// 创建预编译执行器
CallableStatement cs = conn.prepareCall("{? = call zhuanzhang(?, ?, ?)}");
// 设置输入参数
cs.registerOutParameter(1, Types.DOUBLE);
cs.setInt(2, id);
cs.setInt(3, toId);
// 设置输入输出参数的处理; 对输入输出的参数模式,先设值再注册数据类型
cs.setDouble(4, money);
cs.registerOutParameter(4, Types.DOUBLE);
// 执行函数
boolean b = cs.execute(); // 如果有结果集返回true, 否则返回false
// 获取存储过程的执行结果
Double m = cs.getDouble(1);
DBUtil.close(null, cs, conn);
return m;
}
将图片保存到数据库
数据库表中图片字段的数据类型:blob
Java实体中图片变量的数据类型:byte[]
示例:
测试用例:
public static void testSaveImg() throws Exception {
UserInfo userInfo = new UserInfo();
userInfo.setId(3);
userInfo.setTel("55555555");
userInfo.setEmail("lisi@qq.com");
userInfo.setIdCard("266-18");
userInfo.setUserId(1);
userInfo.setMoney(2000.2);
// 将图片转成字节数组
File file = new File("C:\\Users\\Administrator\\Desktop\\作业.bmp");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
FileInputStream fis = new FileInputStream(file);
byte[] buf = new byte[1024];
int len = -1;
while((len = fis.read(buf)) != -1) {
bos.write(buf, 0, len);
}
userInfo.setImg(bos.toByteArray()); // 获取图片的字节数组
int n = dao.saveImg(userInfo);
System.out.println(n);
}
数据库操作:
public int saveImg(UserInfo userInfo) throws Exception {
// 连接数据库
Connection conn = DBUtil.getConnection();
// 拼接SQL语句
String sql = "insert into t_user_info(id, tel, email, idcard, userId, money, img) values(?, ?, ?, ?, ?, ?, ?)";
// 创建SQL预编译执行器
PreparedStatement pstat = conn.prepareStatement(sql);
// 设置值
pstat.setInt(1, userInfo.getId());
pstat.setString(2, userInfo.getTel());
pstat.setString(3, userInfo.getEmail());
pstat.setString(4, userInfo.getIdCard());
pstat.setInt(5, userInfo.getUserId());
pstat.setDouble(6, userInfo.getMoney());
pstat.setBytes(7, userInfo.getImg());
// 执行SQL语句,并返回结果
int executeUpdate = pstat.executeUpdate();
// 关闭资源
DBUtil.close(null, pstat, conn);
return executeUpdate;
}
事务
Connection conn = DBUtils.getConnection(); // 获取数据库连接
conn.setAutoCommit(false); // 开启事务
代码...
conn.commit(); // 提交事务
conn.rollback(); // 回滚事务