数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:
1.数据以表格的形式出现
2.每行为各种记录名称
3.每列为记录名称所对应的数据域
4.许多的行和列组成一张表单
5.若干的表单组成database
JDBC
首先我们需要利用jdbc技术搭建java和数据库之间的桥梁,以便我们能搞顺利访问并修改数据库,这就需要我们添加相应的驱动包,并且利用到java当中的Connection接口以及Statement接口来相辅。
以下的几个小程序分别展示了该如何利用jdbc来访问数据库当中的test库数据。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class 连接数据库 {
public static void main(String[] args) {
try {
//加载驱动包
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/test";
String username = "root";
String password = "root";
//获取数据库连接对象
Connection con = DriverManager.getConnection(url,username,password);
System.out.println(con);
con.close();
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
利用sql接口向数据库发送sql语句,用来搜索tb_st表中的数据
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;
public class 数据库搜索 {
public static void main(String[] args) {
Connection con = null;//连接接口
Statement stmt = null;//发送sql接口
ResultSet rs = null;//结果集接口
try {
//添加驱动
Class.forName("com.mysql.jdbc.Driver");
//连接数据库
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test","root","root");
//创建对象
stmt = con.createStatement();
//发送sql语句并回送结果
rs = stmt.executeQuery("select * from tb_st");
//遍历寻找
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString(2);
String sex = rs.getString("sex");
String birthday = rs.getString(4);
System.out.println("编号="+id+"姓名="+name+"性别="+sex+"生日="+birthday);
}
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally {
//依次关闭
try {
rs.close();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
try {
stmt.close();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
利用sql接口向数据库发送sql语句,用来对tb_st表中的数据进行增添,删除,修改。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class 数据库的添_修_删 {
public static void main(String[] args) {
Connection con = null;
Statement sate = null;
try {
//添加数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//连接数据库
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test","root","root");
sate = con.createStatement();
//插入数据
String sql1 = "insert into tb_stu(name,sex,birthday) values('tom','男','2012-02-01')";
int result1 = sate.executeUpdate(sql1);
System.out.println("有"+result1+"行数据被修改");
//修改数据
String sql2 = "update into tb_stu set birthday = '1970-01-01' where id = 5";
int result2 = sate.executeUpdate(sql2);
System.out.println("有"+result2+"行数据被修改");
//删除数据
String sql3 = "delete from tb_stu where id = 5";
int result3 = sate.executeUpdate(sql3);
System.out.println("有"+result3+"行数据被修改");
} catch (ClassNotFoundException | SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally {
try {
sate.close();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
在利用JDBC技术连接mysql过程当中要注意许多细节问题,添加相关的try-catch
语句用来抛出异常,其次桥梁之间利用流操作,为了避免相关数据的丢失,要在使用完毕之后进行关闭操作,层层关闭,切记遗漏。
其次,为了避免信息的不安全,我们还需提供数据动态搜索操作。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class 数据库动态搜索 {
public static void main(String[] args) {
Connection con = null;
try {
//添加数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//连接数据库
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test","root","root");
//动态规划 可以避免数据库安全漏洞,使用?通配符进行改善
String sql = "select * from tb_stu where name = ? or sex = ?";
//PreparedStatement继承于statement,更加安全,强大
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, "%");
ps.setString(2, "男");
ResultSet rs = ps.executeQuery();
System.out.println("id\tname\tsex\tbirthday");
while(rs.next()) {
System.out.println(rs.getInt(1)+"\t"+rs.getInt(2)+"\t"+rs.getInt(3)+"\t"+rs.getInt(4));
}
rs.close();
ps.close();
con.close();
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}