JDBC
JDBC(java data base connectivity) : java数据库连接技术。
JDBC是java的一个特性,他几乎可以让你连接所有的关系型数据库。
Java连接数据库的方式
- ODBC(桥连) 基于C,仅在Windows平台。通用型强,但效率低,用于一下小程序或测试。
- JDBC(直连) 基于java,高度的一致性、简单性
JDBC连接步骤
- 声明url String url = “jdbc:oracle:thin:@localhost:1521:orcl”;
- 注册驱动类 Class.forName(“oracle.jdbc.OracleDriver”);
- 创建Statement对象 Connection conn = DriverManager.getConnection(url, user, password);
- 执行sql
- 处理结果集
- 关闭连接
//JDBC连接的URL
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String sql = "select * from employees where department_id = 90";
try {
//注册驱动
Class.forName("oracle.jdbc.OracleDriver");
//连接数据库
String user = "hr";
String password = "88888888";
Connection conn = DriverManager.getConnection(url, user, password);
//创建一个Statement
Statement stmt = conn.createStatement();
//执行sql
ResultSet rs = stmt.executeQuery(sql);
//处理结果
System.out.println("连接成功!");
while(rs.next()){
String employee_id = rs.getString("employee_id");
String salary = rs.getString("salary");
System.out.println(employee_id+"----"+salary);
}
//关闭连接
if(rs != null){
rs.close();
}
if(stmt != null){
stmt.close();
}
if(conn != null){
conn.close();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Statement与PreparedStatement
创建与执行
- Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);
- PreparedStatement ps = conn.prepareStatement(sql);
绑定sql的参数
ps.executeUpdate();
PreparedStatement会经过预编译,能防止sql注入。对于执行结构相同的sql时,PreparedStatement执行效率比较高。当Statement执行的sql有大量的字符串拼接时,应选用PreparedStatement
ps一旦绑定了SQL,此ps就不能执行其他的Sql,即只能执行一条SQL命令。stmt 可以执行多条SQL命令
execute、executeUpdate、executeQuery
execute允许执行查询语句、更新语句、DDL语句。
返回值为true时,表示执行的是查询语句,可以通过getResultSet方法获取结果;返回值为false时,执行的是更新语句或DDL语句,getUpdateCount方法获取更新的记录数量
executeUpdate用于执行INSERT、UPDATE 或 DELETE 语句。返回值是更新的记录数量
executeQuery用于执行SELECT语句。返回一个ResultSet结果集
通常我们没有必要使用execute方法来执行SQL语句,而是使用executeQuery或executeUpdate更适合,但是在不清楚SQL语句的类型时则只能使用execute方法来执行该SQL语句