JDBC(初识)
jdbc简介
JDBC:Java Database Connectivity(java数据库连接),主要由接口组成。
JDBC 是一个接口,其中有一套为了简化、统一对数据库操作的,java操作数据库的规范。可以通过jdbc加载具体的驱动,从而操作数据库。
jdbc程序的编写
jdbc简单来说就是关联数据库和java得到纽带
-
搭建实验环境,建立数据库,并在其中建立数据表;
create database jdbcStudy character set utf8 collate utf8_general_ci; use jdbcStudy; create table student( id int primary key, name varchar(40), password varchar(40), email varchar(60), birthday date); insert into student (id,name,password,email,birthday) values (1,'zhansan','123456','zs@sina.com','1980-12-04'); insert into student (id,name,password,email,birthday) values (2,'lisi','123456','lisi@sina.com','1981-12-04'); insert into student (id,name,password,email,birthday) values (3,'wangwu','123456','wangwu@sina.com','1979-12-04')
-
新建java工程,并导入数据库;
-
新建一个database.properties配置文件存放数据库相关信息;
jdbc:mysql://localhost:3306/school 协议:子协议://主机:端口/数据库
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/school user=root password=123456
-
编写程序从数据表中,读取数据;(友情提示一定要导包!!!!!)
import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; public class asd { private static String driver=null; private static String url=null; private static String user=null; private static String password=null; public static void main(String[] args) throws SQLException { inp(); } private static void inp() throws SQLException { try { InputStream ras = asd.class.getClassLoader().getResourceAsStream("ghjkl.properties"); Properties pro = new Properties(); pro.load(ras); driver=pro.getProperty("driver"); url=pro.getProperty("url"); user= pro.getProperty("user"); password= pro.getProperty("password"); Class.forName(driver); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } Connection con = DriverManager.getConnection(url, user, password); Statement sta = con.createStatement(); ResultSet res = sta.executeQuery( "select id,name,email,birthday from student"); while (res.next()){ System.out.println(res.getObject("id")); System.out.println(res.getObject("name")); System.out.println(res.getObject("email")); System.out.println(res.getObject("birthday")); } res.close(); sta.close(); con.close(); } }
DeiverManager类
-
DriverManager在jdbc中用于加载驱动,并创与数据库的链接;
-
使用方法:
DriverManager.registerDriver(new Driver())
DriverManager.getConnection(url, user, password)
-
由于采用registerDriver加载驱动会出现很多问题,所以实际我们并不推荐使用此方法加载驱动,而是使用Properties pro = new Properties();driver=pro.getProperty(“driver”);Class.forName(driver);(采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高)。
Connection类
- Connection类在jdbc中代表数据库的链接,Connection是数据库编程过程中的一个重要对象,客户端与数据库交互都是通过Connection对象完成的;
- Connection对象的常用方法:
- createStatement():创建向数据库发送sql的statement对象。
- prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
- prepareCall(sql):创建执行存储过程的callableStatement对象。
- setAutoCommit(boolean autoCommit):设置事务是否自动提交。
- commit() :在链接上提交事务。
- rollback() :在此链接上回滚事务。
Statement类
- Statement对象在jdbc中用于向数据库发送SQL语句,从而实现java操作数据库的目的;
- Statement对象常用方法:
- executeQuery(String sql) :用于向数据发送查询语句。
- executeUpdate(String sql):用于向数据库发送insert、update或delete语句
- execute(String sql):用于向数据库发送任意sql语句
- addBatch(String sql) :把多条sql语句放到一个批处理中。
- executeBatch():向数据库发送一批sql语句执行。
ResultSet类
-
Jdbc程序中的ResultSet用于代表Sql语句的执行结果;
-
Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
-
ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
-
获取任意类型的数据
getObject(int index)
getObject(string columnName)
-
获取指定类型的数据,例如:
getString(int index)
getString(String columnName)
-
-
ResultSet还提供了对结果集进行滚动的方法:
- next():移动到下一行;
- Previous():移动到前一行;
- absolute(int row):移动到指定行;
- beforeFirst():移动resultSet的最前面;
- afterLast() :移动到resultSet的最后面。
释放资源
- 在jdbc运行完成后切记释放资源。程序在运行过程中,创建的那些与数据库进行交互的对象(通常是ResultSet, Statement和Connection对象),尤其是Connection对象,它用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统问题。Connection的使用原则是尽量晚创建,尽量早的释放。
- 为确保资源释放代码能运行,资源释放代码也尽量要放在finally语句中,保证执行。