第一步:加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
第二步:通过驱动管理器获取对应连接对象
Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,创建方法为:
Connection conn = DriverManager.getConnection(url,user,pass);
该对象常用方法为:
方法 | 描述 |
---|---|
createStatement() | 创建向数据库发送sql的statement对象。 |
prepareStatement(sql) | 创建向数据库发送预编译sql的PrepareSatement对象。 |
prepareCall(sql) | 创建执行存储过程的callableStatement对象。 |
setAutoCommit(boolean autoCommit) | 设置事务是否自动提交。 |
commit() | 在链接上提交事务。 |
rollback() | 在此链接上回滚事务。 |
//url:使用jdbc访问数据库地址 user:登录数据库的用户名 password:登录数据库的密码
//url jdbc:oracle:thin:@数据库服务器IP:数据库端口号:数据库实例名
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","lw");
第三步:编写sql语句
String sql="select empno,ename,job from emp";
第四步:创建语句对象
Statement stmt=conn.createStatement();
第五步:执行sql语句,返回结果集对象
statement对象常用方法:
方法 | 含义 |
---|---|
executeQuery(String sql) | 用于向数据发送查询语句。 |
executeUpdate(String sql) | 用于向数据库发送insert、update或delete语句 |
execute(String sql) | 用于向数据库发送任意sql语句 |
addBatch(String sql) | 把多条sql语句放到一个批处理中 |
executeBatch() | 向数据库发送一批sql语句执行 |
ResultSet rs=stmt.executeQuery(sql);
第六步:对结果集进行处理
ResultSet提供了对结果集进行滚动的方法:
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。
while(rs.next()){//next()将光标移动到下一行最前面
//根据列编号获取列的值
/*int empno=rs.getInt(1);
String ename=rs.getString(2);//
String job=rs.getString(3);
*/
int empno=rs.getInt("empno");
String ename=rs.getString("ename");
String job=rs.getString("job");
System.out.println("员工编号:"+empno+"\t员工姓名:"+ename+"\t员工职业:"+job);
}
第七步:关闭资源
rs.close();
stmt.close();
conn.close();
PreperedStatement
现在我们有一种更高效的方法:
通过创建预编译对象,SQL语句被预编译并存储在PrepareStatement 对象中。然后使用此对象多次高效的执行该语句。
PreperedStatement是Statement的孩子,它的实例对象可以通过调用:
PreperedStatement st = conn.preparedStatement()
第三步中,sql语句,预编译的对象使用占位符?代替。
相对于Statement对象而言
PreperedStatement可以避免SQL注入的问题。
该方法部分代码如下:
//编写sql语句,从外界插入的参数此时使用占位符?代替
String sql="select empno,ename,job from emp where ename=?";
//创建预编译对象
pstmt=conn.prepareStatement(sql);// SQL语句被预编译并存储在PrepareStatement 对象中。然后使用此对象多次高效的执行该语句
//对占位符设值
pstmt.setString(1, ename);
//执行sql,返回结果集对象
rs=pstmt.executeQuery();//注意:不能传入参数
//处理结果集
while(rs.next()){
String name=rs.getString("ename");
int empno=rs.getInt("empno");
String job=rs.getString("job");
System.out.println(empno+"\t"+name+"\t"+job);
}