|
|
1:JDBC
Java DataBase Connectivity(Java数据库连接技术)
2:JDBC设计的目的。
是一种接口的类组成。使用接口的特点,只定义规范,让不同的
数据库厂商实现。这样程序员不用关心如何连接各种数据库的底
层实现。
3:JDBC的组成结构
JDBC_API(SUN公司提供)
驱动管理器(用于连接API与驱动之间的连接关系)
数据库的驱动程序(数据库厂商提供)
4:JDBC的4种驱动的类型
A:JDBC_ODBC桥
B:本地API
C:网络协议驱动
D:本地协议驱动。
A/B:适合C/S架构
C/D:适合B/S架构。
效率:B>C>D>A
5:JDBC的连接过程:
前提:将数据库的驱动包拷到工程中。
A:加载驱动。
B:获取连接
C:构造SQL语句执行对象
D:发送SQL
E:关闭资源(关闭的先后问题)
6:Connection接口的方法:
close()
savePoint(name)
commit()
rollback()
rollback(SavePoint)
setAutoCommit();
createStatement();
prepareStatement(String sql)
prepareCall(String sql)
7:Statement
addBatch(String sql)
executeBatch
clearBatch()
close()
execute() //执行DDL,DML和Select语句。
true:表示执行的是SElect语句。
false:表示执行提DDL和insert/update/delete语句。
executeUpdate() //执行DDL和DML语句。返回影响行数的结果。
executeQuery();//执行Select语句。
8:ResultSet
结果集:结果集与游标或者迭代器的机制一致。停在第一条记录的前面。
要用的话,必须Next一下。
9、例子
import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;public class TestJDBC {public static void insertBatch() {// userid/username/spassword/deptidConnection connection = null;Statement statement = null;String driver = "oracle.jdbc.driver.OracleDriver";String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";String user = "user";String password = "password";try {// 1 加载驱动程序Class.forName(driver);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {// 2 建立数据库连接connection = DriverManager.getConnection(url, user, password);// 改变事务提交方式,以便手动控制事务connection.setAutoCommit(false);// 3 执行SQL语句statement = connection.createStatement();// 批量插入String sql = "insert into t_user values(seq_t_user.nextval,'oracle1105' || seq_t_user.currval,'666666',2)";statement.addBatch(sql);sql = "insert into t_user values(seq_t_user.nextval,'oracle1105' || seq_t_user.currval,'666666',2)";statement.addBatch(sql);sql = "insert into t_user values(seq_t_user.nextval,'oracle1105' || seq_t_user.currval,'666666',2)";statement.addBatch(sql);sql = "insert into t_user values(seq_t_user.nextval,'oracle1105' || seq_t_user.currval,'666666',2)";statement.addBatch(sql);sql = "insert into t_user values(seq_t_user.nextval,'oracle1105' || seq_t_user.currval,'666666',2)";statement.addBatch(sql);statement.executeBatch();// 手动提交connection.commit();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {// 4 关闭资源// try {// statement.close();// connection.close();// } catch (SQLException e) {// // TODO Auto-generated catch block// e.printStackTrace();// }}}public static void query() {Connection connection = null;Statement statement = null;ResultSet resultSet = null;String driver = "oracle.jdbc.driver.OracleDriver";String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";String user = "user";String password = "password";String sql = "select * from t_user";try {// 1 加载驱动程序Class.forName(driver);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {// 2 建立数据库连接connection = DriverManager.getConnection(url, user, password);// 3 执行SQL语句statement = connection.createStatement();// 4 接收查询结果resultSet = statement.executeQuery(sql);while (resultSet.next()) {// 1 字段顺序int userid = resultSet.getInt(1);String username = resultSet.getString("username");System.out.println("userid:" + userid + ",username:" + username);}ResultSetMetaData resultSetMetaData=resultSet.getMetaData();int count=resultSetMetaData.getColumnCount();System.out.println("列数:"+count);for (int i = 1; i <= count; i++) {System.out.println("列名:"+resultSetMetaData.getColumnName(i));System.out.print("类型:"+resultSetMetaData.getColumnTypeName(i));}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {// 4 关闭资源try {resultSet.close();statement.close();connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public static void main(String[] args) {query();}} |
|