廖胤松

1》JDBC(java databas connectivity):java数据库连接技术的简称,由一组使用java语言编写的类和接口组成,可以为多个数据库提供统一的访问

作用:jdbc充当了java应用程序和各个不同数据库之间的媒介,实现了对数据库的访问

资料:oracle公司提供了对jdbc接口的规范--JDBC API,数据库厂商或第三方根据接口提供不同的实现--jdbc驱动

存在包:集成在jdk的java.sql和javax.sql


JDBC-API: oracle公司提供了对jdbc接口的规范,为java程序和各个不同数据库交互的规范了标准接口,

如Connection,Statement,preparedStatement,Resultset

DriverManager:负责管理各种不同的jdbc驱动,就是管理对jdbc-api接口的实现类

Connection:负责连接数据库并担任传送数据的任务

Statement:由Connection产生,负责执行SQL语句

ResultSet: 负责保存和处理Statement执行后所产生的查询结果

PrepardStatement:Statement的子接口,同样负责执行sql语句,但是比Statement更安全更高效

关闭资源的顺序:ResultSet-->Statement-->Connection

2》ODBC-桥连接方式,适合个人开发和测试

特点:无需jar包,配置odbc数据源即可

方式:java应用程序-->java API-->JDBC-ODBC桥-->ODBC API-->ODBC层-->OD Server

配置方式:

64位系统,在新建dsn要用64bit的odbc 运行 C:WindowsSysWOW64odbcad32.exe

32位系统,控制面板-->管理工具-->数据源(odbc)-->系统文件DSN-->添加sqlserver-->配置名称和服务器(.)-->测试连接

示例:省略try

//加载驱动
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

//建立连接,jdbc:odbc:建立odbc时候dsn的名称
Connection conn = DriverManager.getConnection("jdbc:odbc:tina", "sa","sa");

3》纯java方式连接,驱动程序由java语言编写,运行速度块,跨平台

缺点:jdbc驱动只对应一种数据库,有些只对应某版本,数据库升级或者更换,需要更换jdbc


4》使用JDBC连接数据库的步骤

4.1》加载驱动

Class.forName("JDBC驱动对应的类名");//com.mysql.jdbc.Driver

4.2》与数据库建立连接,使用DriverManager获取连接

Connection conn = DriverManager.getConnnection(数据库连接地址,用户名,密码);

注意:数据库连接地址:jdbc:mysql://localhost:3306/myschool?useUnicode=true&characterEncoding=utf-8

4.3》发送SQL语句,返回结果

Statement stmt = conn.createStatement();//获取Statement发送命令

int line = stmt.executeUpdate(sql) ; //返回受影响的行数,执行 insert ,delete ,update

ResultSet rs = stmt.executeQuery(sql); //返回结果集,执行select

boolean flag = stmt.execute(sql); //如果返回结果集,为true,反之为假,可以执行任何sql语句

4.4》处理结果,返回是结果集时

while(rs.next()){
System.out.println(rs.getInt(1));//通过列号
System.out.println(rs.getInt("age"));//通过列名
}

5》ResultSet 结果集

boolean next() 将关标从当前位置向下移动一行,有下一行返回true ***********

boolean previous() 将关标从当前位置向上移动一行

void close() 关闭对象

int getRow() 获取光标当前的行号

boolean absolute(int row) 光标移动到row指定的行

String getString(int columnIndex) 获取指定【列号】的值,返回String类型

String getString(String fieldname) 获取指定【列名】的值,返回String类型

int getInt(int columnIndex) 获取指定【列号】的值,返回int 类型

int getInt(String fieldname) 获取指定【列名】的值,返回int 类型


类中有多种根据列名和列号获取对应的值的方法:getXXX(int index) 和 getXXX(String columnName) 列名从1开始 ***********

6》PrepardStatement : 会对sql进行预编译,执行速度高于Statement,如果在程序中需要执行多次的sql语句,优先使用此


使用步骤:1》创建对象,并传递sql语句,在sql语句中使用占位符:?

PrepardStatement pstmt = conn.prepareStatement(sql);

2》设置sql语句中的参数,pstmt.setXXX(位置,值),【注意:位置从1开始,XXX为对应的数据类型,如setInt(),setString()】

pstmt.setObject(1,值);//位置记住从1开始

3》执行sql语句【注意,与statement的区别,执行时候没有参数sql,因为在创建对象时,已经传递sql】

int line = pstmt.executeUpdate() ; //返回受影响的行数,执行 insert ,delete ,update

ResultSet rs = pstmt.executeQuery( ); //返回结果集,执行select

boolean flag = pstmt.execute(); //如果返回结果集,为true,反之为假,可以执行任何sql语句


【模糊查询:】 //占位符:?
String sql = "select * from grade where gradeName like ?";

//创建preparedStatement
pstmt=conn.prepareStatement(sql);

//设置参数值
pstmt.setString(1,"%"+name+"%");//位置 从1开始


原文地址:https://www.cnblogs.com/1Ezzzzz/p/1Ezzzzz.html