jdbc作为最基础也最重要的javaAPI之一,其意义无言自明。做为java语言的初级使用者,免不了的要与数据库打交道,而操做数据库的最简单工具能够说就是jdbc了。而且编码者若是想学习掌握更高级的数据库操做技术好比说orm框架例如hibernate或者mybatis等,对其熟悉也是有事半功倍的效果。本着方便本身帮助他人的目的现把网上查找到的jdbc的基本知识点整理以下,java
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@172.16.0.6:1521:tangjl"; String user="openlab"; String password="open123"; Connection Con=DriverManager.getConnection(url,user,password);
Connection 链接是经过DriverManager的静态方法getConnection方法获得的这个方法的实质时把参数传到实际的Dirver中的connect()方法中来得到数据库链接.mysql
Jdbc:oracle:this:(协议)@xxx.xxx.xxx:xxx(ip地址及端口号):xxx(使用数据库名)sql
Mysql的url是jdbc:mysql://localhost:3306/test数据库
String sql="select * from a_yyy"; Statement s=con.createStatment(); PreparedStatement ps=con.prepareStatement(sql);
Statement接口表明了一个数据库的状态,在向数据库发送相应的SQL语句时,都须要建立Statement接口或者PreparedStatement接口。在具体应用中,Statement主要用于操做不带参数(能够直接运行)的SQL语句,好比删除语句、添加或更新。编程
Sta.execute():适合任何语句api
sta.executeQuery(sql):适合查询语句.返回一个查询结果集.mybatis
sta.executeUpdate(sql);适合增删改建立语句,返回值为影响记录的条数oracle
//////////////////////////////////////////////////框架
PreparedStatement:预编译的Statement .工具
如果PreparedStatement:获得ps以后:
一样的,如果增删改建立的就用ps.executeUpdate();如果查询则用ps.executeQuery()返回一个结果集;
预编译的PreparedStatement,对于执行同构的sql语句来讲,它的效率比较高,提高性能.
第一步:经过链接得到PreparedStatement对象,用带占位符(?)的sql语句构造。
PreparedStatement pstm = con.preparedStatement(“select * from test where id=?”);
第二步:设置参数
pstm.setString(1,“ganbin”);
pstm.setDate(2,date);
第三步:执行sql语句
Rs = pstm.excuteQuery();
statement发送完整的Sql语句到数据库不是直接执行而是由数据库先编译,再运行,而PreparedStatement是先发送带参数的Sql语句,再发送一组参数值.若是是同构的sql语句,PreparedStatement的效率要比statement高。而对于异构的sql则二者效率差很少。
同构:两个Sql语句可编译部分是相同的,只有参数值不一样。
异构:整个sql语句的格式是不一样的
注意点:1、使用预编译的Statement编译多条Sql语句一次执行
2、能够跨数据库使用,编写通用程序
3、能用预编译时尽可能用预编译
只有执行了select语句才有结果集
六关闭数据源
关闭细节:最早获得的,最后关闭.
元数据:是关于数据的信息,例如类型或者容量,经过JDBC API 能够访问:
1 数据库元数据:
使用Connection.getMetadata方法返回DataBaseMetaData引用.
2 结果集元数据
a使用ResultSet.getMetadata方法返回ResultSetMetaData引用
B能使用getColumnCount等类的方法获取结果集信息.(查api)
① connection.setAutoCommit(false); //把自动提交关闭
② 正常的DB 操做//如有一条SQL 语句失败了,自动回滚
③ connection.commit() //主动提交或connection.rollback() //主动回滚
完整代码:
try{ con.setAutoCommit(false); //step1 把自动提交关闭 Statement stm = con.createStatement(); stm.executeUpdate("insert into person(id, name, age) values(520, 'X-Man', 18)"); stm.executeUpdate("insert into Person(id, name, age) values(521, 'Super', 19)"); //step2 正常的DB 操做 con.commit(); //step3 成功主动提交 } catch(SQLException e){ con.rollback();//step3 失败则主动回滚 }
JDBC经过元数据(MetaData)来得到具体的表的相关信息,能够查询数据库中有哪些表,表有哪些字段,以及字段的属性等.MetaData中经过一系列getXXX将这些信息返回给咱们。
数据库元数据 DatabaseMetaData 使用connection.getMetaData()得到
MetaData包括: 包含了关于数据库总体元数据信息。
结果集元数据 ResultSetMetaData 使用resultSet.getMetaData()得到
比较重要的是得到表的列名、列数等信息。
结果集元数据对象:ResultSetMetaData meta = rs.getMetaData();
字段个数:meta.getColomnCount();
字段名字:meta.getColumnName();
字段JDBC类型:meta.getColumnType();
字段数据库类型:meta.getColumnTypeName();
数据库元数据对象:DatabaseMetaData dbmd = con.getMetaData();
数据库名=dbmd.getDatabaseProductName();
数据库版本号=dbmd.getDatabaseProductVersion();
数据库驱动名=dbmd.getDriverName();
数据库驱动版本号=dbmd.getDriverVersion();
数据库Url=dbmd.getURL();
该链接的登录名=dbmd.getUserName();