JDBC :
// JDBC基础操作步骤 :
1 加载驱动
2 获取链接对象
3 链接
4 传送数据,数据库处理,接受数据结果集
5 处理结果集
6 关闭资源
//增 :
1 加载驱动 三种方式
// 第一种
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
//第二种
Class.forName("oracle.jdbc.driver.OracleDriver");
//第三种
new oracle.jdbc.driver.OracleDriver();
2 链接数据库
//2 链接数据库
Connection conn = DriverManager.getConnection("全路径","用户名","密码");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");
3 创建语句对象
//3 创建语句对象
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from c##scott.emp");//需要查询的表
4 循环获取结果
next();//返回值是boolean true/false 是问下一位还有没有元素,如果有就返回true,否则返回false
while (rs.next()) {//判断下一位还有没有值
5 在循环中吧数据类型转换 得到自己想要的数据类型(java对应的数据类型),可以随意转换,只要不丢失精度就行
System.out.print(rs.getString("empno")+" ");//rs.getIn("empno");也行,因为emono用的 number 类型
System.out.print(rs.getString("ename")+" ");
System.out.println(rs.getString("job")+" ");
}
6 关闭资源
close();//关闭资源
rs.close();
stmt.close();
conn.close();
executeQuery :
executeQuery();//查询语句 返回值用ResultSet类型接收 获取之后是个数组,数组中每个元素都是表的一行的对象
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");
Statement stmt = conn.createStatement();//创建语句对象
ResultSet rs = stmt.executeQuery("select * from c##scott.emp");//需要查询的表 需要执行的语句 返回值类型是ResultSet类型
next :
next();//返回值是boolean true/false 是问下一位还有没有元素,如果有就返回true,否则返回false
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");
Statement stmt = conn.createStatement();//创建语句对象
ResultSet rs = stmt.executeQuery("select * from c##scott.emp");// 需要查询的表 需要执行的语句 返回值类型是ResultSet类型 获取之后相当于是个数组 每个数组的元素都是一行的对象
rs.next();//获取下一位元素(行)
getString :
statement.executeUpdate(sql);
getString();//获得字符串
executeUpdate :
executeUpdate(" ");//把字符串指令执行 添加insert into...
如 : String sql = "insert into c##scott.a_tab values(123,'xiaomei','beijing~')";
statement.executeUpdate(sql);//就会把添加指令 在结果集中修改 只是结果集
getInt :
getInt();//获得整型值
executeUpdate :
executeUpdate();
把语句插入到指定的表中
String sql = "insert into c##scott.a_tab values(123,'xiaomei','beijing~')";
statement.executeUpdate(sql);
DriverManager_getConnection :
DriverManager.getConnection();//链接数据库 是Connection类型
如 : //Connection conn = DriverManager.getConnection(全路径,用户名,密码);
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");
createStatement :
//没有参数的
createStatement();//创建语句对象 用Connection类型调用 返回Statement类型接收
如 :
Statement stmt = conn.createStatement();
//有参数的
createStatement(int resultSetType,int resultSetConcurrency);
//参数1
resultSetType - 结果集类型 :
它是 ResultSet.TYPE_FORWARD_ONLY,
ResultSet.TYPE_SCROLL_INSENSITIVE//如果写了这个就可以使用 ResultSet里面的所有方法
或 ResultSet.TYPE_SCROLL_SENSITIVE 之一
//参数2
resultSetConcurrency - 并发类型 ;
它是 ResultSet.CONCUR_READ_ONLY //查询(查)
或 ResultSet.CONCUR_UPDATABLE 之一 //添加/更改/删除 (增/删/改)
createStatement(参数1,参数2);//如果不写参数1 就只能调用ResultSet的next()方法,如果写了,就都能调用了
PreparedStatement :
PreparedStatement s = conn.PreparedStatement("insert into c##scott.a_tab values(?,?,?)");//预先准备好字符串,values值用?代替 因为我们还不知道里面是什么类型的情况下
要想改变结果集,要执行语句把,这个的执行语句是execute();
execute :
s.execute();//就行了 就执行了 每个创建语句对象的执行方法不一样
setInt :
setInt();//设置上面的问号,整型值
s.setInt(1,11);//前面 1 代表第一个问号,后面 11,代表要添加的值
setString :
setString();//设置上面的问号,字符串
s.setString(2,"sad");//前面 2 代表第二个问号,后面"sad",代表要添加的值
parseInt :
parseInt();//是Integer的方法(int的封装类型),是把纯数字的字符串,转换为int型
int i = Integer.parseInt("123");//转换为123
addBatch :
addBatch();//多条语句添加
如 :
s.setInt(1,123);
s.setString(2, "234");
s.setString(3, "456");
s.addBatch();//这算一条
s.setInt(1,123);
s.setString(2, "234");
s.setString(3, "456");
s.addBatch();//到这是两条
//上面只是弄好字符串和指令了 但是没有执行吧
//addBatch()多条语句执行,要用executeBatch()
executeBatch :
s.executeBatch();//多条语句添加执行
commit :
commit();//强制提交
Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");//链接数据库
conn.commit();//就是强制提交
setAutoCommit :
setAutoCommit();//设置自动提交(没输入一次指令,提交一次), true/false
conn.setAutoCommit(false);//设置不自动提交
conn.setAutoCommit(true);//设置自动提交
savepoint :
//添加设置回滚点
savepoint a;//设置回滚点 回滚点的名字叫 a
rollback_to :
//回滚到回滚点之前的操作,回滚点之后的操作都等于没有操作
rollback to a(回滚点名);//回滚到 a 点
rollback :
rollback();//回滚,如果没有设置回滚点,就会回滚到上次提交的地方 并把所有回滚点都取消
conn.rollback();//回滚
ResultSet_Li_Mian_De_Fang_Fa :
//查 : 修改的只是结果集
ResultSet rs = stmt.executeQuery("select * from c##scott.a_tab");
next :
next();//返回值是boolean true/false 是问下一位还有没有元素,如果有就返回true,否则返回false
rs.next();//光标指向下一位
last :
last();//指向最后一位(最后一列) 指针在最后一列上
rs.last();//把光标指向rs结果集的最后一位(最后一列)
isLast :
isLast();//判断当前光标指向的位置是否为最后一位,返回值为boolean布尔型,true/false
rs.isLast();//判断当前光标指向的是不是rs结果集的最后一位
absolute :
absolute();//把光标指向指定的位置
rs.absolute(3);//把光标指向rs结果集的第三位元素
previous :
previous();//把光标指向当前光标的前一个位置
//上面那个absolute(3);不是把光标指向了第三位了吗
rs.previous();//那么现在就是第二位, 就是把当前光标向上移动一位
//增 :
moveToInsertRow :
moveToInsertRow();//一个缓冲区,可以认为位于结果集最后一行的下面(也可以说是在结果集的最下面新建一个空行) 当有缓冲区的时候,光标不管指向哪里,默认操作都是这个缓冲区,一直到把这个缓冲区添加到结果集和数据库中
rs.moveToInsertRow();//在rs结果集的最后一行,新建一个空行
updateInt :
updateInt();//添加 列(number类型) 值
rs.updateInt(1,9999);//往第一列(第一个字段),添加值为9999
或者是 :
rs.updateInt("ID",9999);//或者是通过指定的列,添加值
updateString :
updateString();//添加 (或更改)列(varchar2类型) 值
rs.updateString(2, "youname");//第二列(第二个字段),添加值为"youname"
或者是 :
rs.updateString("ENAME", "youname");//通过指定的列,添加值
insertRow :
insertRow();//把以上添加的新行和里面的内容,添加到结果集中,也添加到数据库中
rs.insertRow();//把上面设置的这一个新行,添加到结果集和数据库中
moveToCurrentRow :
moveToCurrentRow();//把光标移动到新建的行
rs.moveToCurrentRow();//在rs结果集中,把光标移动到新建的行
deleteRow :
deleteRow();//删除当前光标指向的行,结果集和数据库都删
rs.deleteRow();//删除rs结果集中和数据库中,当前光标指向的行
//改 :
updateString :
updateString();////更改内存中数据集中的数据
rs.updateString("hello", "hellonimei");//更改内存中数据集中的数据(列为hello,值为hellonimei)
updateRow :
updateRow();//把更改的数据更新到数据库中
rs.updateRow();//把更改更新到数据库中,是数据库哦
close :
close();//关闭资源 一般都是从下往上关闭
如 : 打开资源的时候,先打开conn然后是stmt然后是rs
关闭的时候就是先关闭rs在关闭stmt,在关闭conn
// 1 驱动对象
new oracle.jdbc.driver.OracleDriver();
// 2 连接对象
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@127.0.0.1:1521:orcl", "c##scott", "root");
// 3 传输对象
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);//并发可更新,和前面对比
// 4 结果集对象
ResultSet rs = stmt.executeQuery("select * from emp");
rs.close();
stmt.close();
conn.close();