1.加载驱动(加载驱动之前需要先把加载对应的jar)
Class.forName();
oracle: oracle.jdbc.driver.OracleDriver
mysql:com.mysql.jdbc.Driver
2.create statement
执行静态SQL语句,通常通过Statement实例实现;
执行动态SQL语句,通常通过PreparedStatement实例实现;
执行数据库存储过程,通常通过CallableStatement实例实现。
备注:所谓的语句静态和动态是指sql语句在合适被编译和执行,对于主体结构已明确的sql,在java编译时,直接交给数据库去分析,数据库对进行语法详解,生成数据库方面的可执行代码,这样的sql称为静态sql,有占位符?的也是静态sql.动态sql一般是用户输入或外部条件动态组合的语句块。
Statement stmt = conn.createStatement();
PreparedStatement pstmt = conn.preparedStatement(sql);
CallableStatement cstmt = conn.prepareCall("{CALL demoSp(?,?)}");
3.执行语句
execute(sql):可以执行各种sql,返回值为Boolean,表示是否返回ResultSet;
executeQuery(sql):执行查询语句,返回值为ResltSet对象;
executeUpdate(sql):执行增删改语句,返回收到影响的行数。
4.处理结果
(1)使用结果集(ResultSet)对象的访问方法获取数据。
· next():用于移动到ResultSet中的下一行,使下一行成为当前行;
· first():将光标移动到此ResultSet对象的第一行;
· last():将光标移到到此ResultSet对象的最后一行;
· previous():将光标移动到此ResultSet对象的上一行。
(2)通过字段名或列索引取得数据:
String name = rs.getString("name");
String pass = rs.getString(1);
5.其他
拼接Sql时String类型的两边要加''单引号。
可以用占位符?定义sql,在PreparedStatement执行前必须设置每个?的值。调用pe.set(int,param)来设置值。
6.call带输入输出参数的存储过程(前两个为输入参数,后两个为输出参数):
CallableStatement call=con.prepareCall("CALL BANK_DATA_CHECH(?,?,?,?");
输入参数直接注入调用pe.set(int,param)来设置值。
call.setString(1,"AA");
call.setStrinf(2,"BB");
输出参数注入方法:
call.registerOutParameter(3,Types.INTEGER);
call.resgisterOutParameter(4,Typea.String);
执行:
call.execute();
获取输出结果:
call.getInt(3);
call.getString(4);
7.获取列的信息
ResultSetMetaData data =resultSet.getMetaData();
ResultSetMetaData data=rs.getMetaData();
while(rs.next()){
for(int i = 1 ; i<= data.getColumnCount() ; i++){
//获得所有列的数目及实际列数
int columnCount=data.getColumnCount();
//获得指定列的列名
String columnName = data.getColumnName(i);
//获得指定列的列值
String columnValue = rs.getString(i);
//获得指定列的数据类型
int columnType=data.getColumnType(i);
//获得指定列的数据类型名
String columnTypeName=data.getColumnTypeName(i);
//所在的Catalog名字
String catalogName=data.getCatalogName(i);
//对应数据类型的类
String columnClassName=data.getColumnClassName(i);
//在数据库中类型的最大字符个数
int columnDisplaySize=data.getColumnDisplaySize(i);
//默认的列的标题
String columnLabel=data.getColumnLabel(i);
//获得列的模式
String schemaName=data.getSchemaName(i);
//某列类型的精确度(类型的长度)
int precision= data.getPrecision(i);
//小数点后的位数
int scale=data.getScale(i);
//获取某列对应的表名
String tableName=data.getTableName(i);
// 是否自动递增
boolean isAutoInctement=data.isAutoIncrement(i);
//在数据库中是否为货币型
boolean isCurrency=data.isCurrency(i);
//是否为空
int isNullable=data.isNullable(i);
//是否为只读
boolean isReadOnly=data.isReadOnly(i);
//能否出现在where中
boolean isSearchable=data.isSearchable(i);