概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库
* JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
实现 步骤:
1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
2.右键-->build path-->Add to build path
-
注册驱动
-
获取数据库连接对象 Connection conn = DriverManager.getConnection(url, user, password);
这里的url是指要运行sql文件的路径,user指用户名,password指密码。 -
定义sql
-
获取执行sql语句的对象 Statement
Statement statment = conn.createStatement();用于调用执行sql语句 -
执行sql,接受返回结果
-
处理结果
-
释放资源
public class Until {
public static void main(String[] args) {
query();
}
public static void query() {
Connection conn = null;
Statement statment = null;
ResultSet rs = null;
try {
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//获取数据库连接对象 Connection
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/school?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "qwerdf");
//定义sql
String sql = "select s_id,s_name,s_birth,s_sex from student";
//获取执行sql语句的对象 Statement
statment = conn.createStatement();
//执行sql,接受返回结果
rs = statment.executeQuery(sql);
//处理结果
while(rs.next()) {
int s_id = rs.getInt(1);
String s_name = rs.getString(2);
Date s_birth = rs.getDate(3);
String s_sex = rs.getString(4);
System.out.println(s_id+"=="+s_name+"=="+s_birth+"=="+s_sex);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//释放资源
try {
if(rs!=null) {
rs.close();
}
if(statment!=null) {
statment.close();
}
if(conn!=null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
上述是一个查阅的基本样式,可以简化很多,即封装。
运行结果:
1==赵雷==1990-01-01==男
2==钱电==1990-12-21==男
3==孙风==1990-05-20==男
4==李云==1990-08-06==男
5==周梅==1991-12-01==女
6==吴兰==1992-03-01==女
7==郑竹==1989-07-01==女
8==王菊==1990-01-20==女
9==小虹==1997-11-11==女
10==小白==1997-11-01==女
下面用删除函数为例来封装:
public class PackDemo {
private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/school?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
private static final String USER = "root";
private static final String PASSWORD = "qwerdf";
private static Connection conn = null;
private static Statement statment = null;
private static ResultSet rs = null;
public static void main(String[] args) {
String sql = "delete from student where s_id=9";
delete(sql);
}
/**
* 删除
*/
public static void delete(String sql) {
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL, USER, PASSWORD);
statment = conn.createStatement();
// String sql = "delete from student where s_id=9";
int ida = statment.executeUpdate(sql);
if(ida > 0){
System.out.println("添加成功!");
}else{
System.out.println("添加失败!");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
close(statment,conn,null);
}
}
public static void close(Statement statment,Connection conn,ResultSet rs) {
try {
if(rs != null) {
rs.close();
}
if(statment!=null) {
statment.close();
}
if(conn!=null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
上述为删除函数的样式:直接将注册驱动路径,数据库路径,用户名,密码等常量直接用变量代替以及将释放资源的部件直接封装以简便多次使用,其实增、删、改的步骤差不多,唯一不同的就是主函数内的String类型的sql到底是增、是删、是改。就到这吧!