前面了解完MySql之后就可以动手做一个JDBC的入门小程序咯。那什么又是JDBC呢?他是干什么的呢?
JDBC全程 Java DataBase Connectivity,即Java数据库连接
SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC(由一些接口和类组成)。学习JDBC 技术目的,是使用Java技术操作数据库中数据记录。
JDBC的编程步骤如下:
1.装载驱动
驱动是个什么?
两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信 。
那如何装驱动呢?
JDBC可以装载多种数据库多种驱动,这里装在MySql的驱动。步骤:
1.官网下载驱动:https://dev.mysql.com/downloads/file/?id=480091;
2.将下载的驱动导入工程
3.在程序代码中装载注册驱动
方法1.注册驱动
DriverManager.deregisterDriver(new Driver());
方法2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
注册驱动用到的是DriverManager类,DriverManager是一个驱动管理的工具类,可以理解为一个容器(Vector),可以装很多种数据驱动
它的registDriver方法分析
public static synchronized void registerDriver(java.sql.Driver driver)
参数:java.sql.Driver
我们传递的是 com.mysql.jdbc.Driver;
但是在com.mysql.jdbc.Driver类中有一段静态代码块(静态代码块会优先于对象创建之前执行):
在com.mysql.jdbc.Driver类中有一段静态代码块:
static {
ry {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
因此上述代码会有生成两个对象的问题,所以一般不使用方法1,转而使用反射的方法2.
2.获得连接对象
调用DriverManager类的getConnection方法
// 获取连接对象
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/study2", "root", "123");
原方法:Connection con = DriverManager.getConnection(url, user, password)
url表示数据库的位置,格式为:
主协议 子协议 主机 : 端口 数据库名字
jdbc : mysql : //localhost:3306 /study2
password表示数据库密码
root表示数据库的用户
3.操作数据
1.statement的作用
* 执行sql
select:ResultSet executeQuery(String sql)
insert:int executeUpdate(String sql)
* 批量处理操作
addBatch(String sql); 将sql语句添加到批处理
executeBatch();批量执行
clearBatch();清空批处理
2.ResultSet的作用
* 用于封装select语句执行后查询的结果
.next()方法用于判断是否有下一条记录。如果有,返回true并让游标向下移动一位(就是换个位置为了读取下一位),如果没有返回false
public boolean next();
* 通过ResultSet提供的getXxx()方法来获取当前游标指向的这条记录中的列数据
getInt()
getString()
getDate()
getDouble()
参数有两种
1.getInt(int 列数);
2.getInt(String 字段名);
// 通过连接对象获取操作sql语句Statemate的对象
Statement st = con.createStatement();
// 操作sql语句
String sql = "select*from student";
// 操作sql(select)语句,得到一个ResultSet结果集
ResultSet rs = st.executeQuery(sql);
// 遍历结果集
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("username");
String password = rs.getString("password");
String email = rs.getString("email");
System.out.println(id+" "+name+" "+password+" "+email);
}
4.资源的释放
依次倒序释放
//资源释放,依次关闭,让资源迅速回收
rs.close();
st.close();
con.close();
贴上完成代码吧
public class demo2 {
public static void main(String[] args) {
Connection con = null;
Statement st = null;
ResultSet rs = null;
try {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//建立连接
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/study2", "root", "123");
//创建操作sql语句的Statement对象
st = con.createStatement();
//创建sql语句
String sql = "select*from student";
//操作sql语句,返回一个结果集
rs = st.executeQuery(sql);
//遍历结果集,输出
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("username");
String password = rs.getString("password");
String email = rs.getString("email");
System.out.println(id+" "+name+" "+password+" "+email);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if(rs != null)
rs.close();
if(st != null)
st.close();
if(con != null)
con.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}