java学习日记 JDBC
JDBC java date base connectivity java数据库连接
JDBC 总体包括两大部分内容
第一部分 java.sal.* JDBC基础内容
java.sql.Connection ---数据库连接对象:到数据库的连接
作用:连接数据库
java.sql.statement --- 语句对象:代表程序需要执行的sql语句,性能和安全性不好。
作用:处理sql语句
java.sql.PreparedStatement--- 预编译语句对象
性能和安全性更好
java.sql.ResultSet ---结果集对象: 代表sql语句执行的结果
结果处理
java.sql.DriverManager ---驱动管理器:管理驱动,负责具体链接目标数据库
java.sql.ResultSetMateDate ---结果集元数据(结果集描述对象)
作用: 描述ResultSet相关信息
第二部分 java.sql.* JDBC 拓展内容
java.sql.DataSource ---数据库连接池
驱动jar 是各个数据库厂商为java准备 的让其通过jar包来实现对自己数据的操作
在本代码敲之前应该先导入驱动jar包,ojdbc5 或者ojbdc6
基本的Oracle数据库连接
public boolean addAb01()throws Exception { //1 定义驱动串 private static final String driver="oracle.jdbc.driver.OracleDriver"; //2.定义链接串 private static final String url="jdbc:oracle:thin:@localhost:1521:orcl"; //3.加载驱动器 Class.forName(driver); //4.创建连接 /** * "admin" 是我要连接的数据库账号 * "admin1234" 是我要连接的数据库账号对应的口令 也就是密码 */ Connection conn=DriverManager.getConnection(url,"admin","admin1234"); //5.定义sql语句 /** * 我的表已经创建完了 我是在添加数据 */ StringBuilder sql=new StringBuilder() .append("INSERT INTO AB01(AAB101,AAB102,AAB103,AAB104,AAB105,") .append(" AAB106,AAB107,AAB108,AAB109,AAB110,") .append(" AAB111,AAB112,AAB113,AAB114,AAB115,") .append(" AAB116,AAB117,AAB118,AAB119,AAB120)") .append(" VALUES(A_AB01.NEXTVAL,?,?,?,?,") .append(" TO_DATE(?,'YYYY-MM-DD'),?,?,?,?,") .append(" ?,?,?,?,?,") .append(" ?,?,SYSDATE,?,?)") ; //6.编译sql语句 PreparedStatement pstm=conn.prepareStatement(sql.toString()); //7.给变量赋值,在定义sql语句时,将其中的变量全部用问好替代 pstm.setObject(1, "2001"); pstm.setObject(2, "王徽"); pstm.setObject(3, "55555"); pstm.setObject(4, "1"); //row2 pstm.setObject(5, "1999-12-26"); pstm.setObject(6, "11"); pstm.setObject(7, "青岛黄岛"); pstm.setObject(8, "中国胶州"); pstm.setObject(9, "王徽"); //row3 pstm.setObject(10, "110"); pstm.setObject(11, "02"); pstm.setObject(12, "**网"); pstm.setObject(13, "山东**大学"); pstm.setObject(14, "02"); //row4 pstm.setObject(15, "山东**大学"); pstm.setObject(16, "01"); pstm.setObject(17, "50"); pstm.setObject(18, "01"); //8.执行sql 并将结果 返回 他返回的是执行的行数,大于0说明成功即大于0为true反之为false return pstm.executeUpdate()>0; }
这样一次基本的oracle数据库就连接上啦 ,在这之前你需要导入一个链接用的驱动jar 。
这只是针对一次链接,不需要考虑内存虚耗之类的问题,如果多次链接 就不能这样写了,,可以将链接部分拿出来写一个静态块 ,new一个类是就建立连接,不再重重复建立连接,另外操作完毕后,应该关闭pstm.close()与conn.close()将他们俩关闭
要放到一个final中,这样不管有没有异常抛出 最后都是将其关闭。但是要注意的是 pstm与conn的顺序,先关pstm后关闭conn,还一点将他们俩放在一起,一旦pstm出现异常就会结束方法,conn并不能关闭,所以要给他们分别try-catch,这样就可以确保关闭了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import java.sql.Connection; import java.sql.PreparedStatement; import java.util.Map; import com.neusoft.system.db.DBUtils; public class Ab02Service { public boolean addAb01(Map<String, Object> dto)throws Exception { //定义JDBC接口变量 Connection conn=null; PreparedStatement pstm=null; try { // 创建链接对象 conn=DBUtils.getConnection(); //3.定义SQL语句 StringBuilder sql=new StringBuilder() .append("INSERT INTO AB01(AAB101,AAB102,AAB103,AAB104,AAB105,") .append(" AAB106,AAB107,AAB108,AAB109,AAB110,") .append(" AAB111,AAB112,AAB113,AAB114,AAB115,") .append(" AAB116,AAB117,AAB118,AAB119,AAB120)") .append(" VALUES(S_AB01.NEXTVAL,?,?,?,?,") .append(" TO_DATE(?,'YYYY-MM-DD'),?,?,?,?,") .append(" ?,?,?,?,?,") .append(" ?,?,SYSDATE,?,?)") ; ; //4.编译SQL语句 pstm=conn.prepareStatement(sql.toString()); //5.参数赋值 pstm.setObject(1, dto.get("aab102")); pstm.setObject(2, dto.get("aab103")); pstm.setObject(3, dto.get("aab104")); pstm.setObject(4, dto.get("aab105")); pstm.setObject(5, dto.get("aab106")); pstm.setObject(6, dto.get("aab107")); pstm.setObject(7, dto.get("aab108")); pstm.setObject(8, dto.get("aab109")); pstm.setObject(9, dto.get("aab110")); pstm.setObject(10, dto.get("aab111")); pstm.setObject(11, dto.get("aab112")); pstm.setObject(12, dto.get("aab113")); pstm.setObject(13, dto.get("aab114")); pstm.setObject(14, dto.get("aab115")); pstm.setObject(15, dto.get("aab116")); pstm.setObject(16, dto.get("aab117")); pstm.setObject(17, dto.get("aab119")); pstm.setObject(18, dto.get("aab120")); //6.返回 return pstm.executeUpdate()>0; } finally { try { pstm.close(); } catch (Exception e) { e.printStackTrace(); } try { conn.close(); } catch (Exception e) { e.printStackTrace(); } } } }
我们用map来实现数据的放入:
public class Ab01ServicesTest { public static void main(String[] args) { Ab02Service abs=new Ab02Service(); boolean tag=false; Map<String, Object> map=new HashMap<>(); map.put("aab102", "119"); map.put("aab103", "宋振华"); map.put("aab104", "110"); map.put("aab105", "1"); map.put("aab106", "1995-03-10"); map.put("aab107", "05"); map.put("aab108", "潍坊"); map.put("aab109", "淄博"); map.put("aab110", "11"); map.put("aab111", "8792"); map.put("aab112", "02"); map.put("aab113", "01"); map.put("aab114", "03"); map.put("aab115", "05"); map.put("aab116", "01"); map.put("aab117", "03"); map.put("aab119", "200"); map.put("aab120", "1"); try { tag=abs.addAb01(map); } catch (Exception e) { e.printStackTrace(); } System.out.println(tag); } }