package com.shujia.day18.ketang;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/*
我们要想操作mysql数据库,jdk本身是无法操作的,因为java并不知道将来开发者需要使用java连接什么样的数据库,所以jdk本身只提供一系列接口
要想使用java链接并操作mysql的话,需要找到mysql团队开发好的驱动包,包中具有实现了jdk接口的类的class文件
需要找到这样一份驱动包,放在我们的项目中,这样我们就可以使用java语言操作mysql了。
JDBC编程6步:
1.注册驱动(告诉Java程序,即将连接的是哪个品牌的数据库)
2.获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完后记得关闭通道)。
3.获取数据库操作对象(专门执行sql语句的对象)
4.执行SQL语句(DQL,DML…)
5.处理查询结果集 (只有当第四步执行的是select语句的时候,才有本步)
6.释放资源(使用完资源后一定要关闭资源,Java和数据库之间属于进程间的通信,开启之后一定要记得关闭)
*/
public class JDBCDemo1 {
public static void main(String[] args) throws Exception {
//1.注册驱动(告诉Java程序,即将连接的是哪个品牌的数据库)
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完后记得关闭通道)。
/**
* url: 超链接,指定mysql服务器的地址
* jdbc:mysql://192.168.136.100:3306/car_db
* user: root
* password: 123456
*
*/
Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.136.100:3306/bigdata31?useUnicode=true&characterEncoding=utf-8&useSSL=false", "root", "123456");
//3.获取数据库操作对象(专门执行sql语句的对象)
Statement state = conn.createStatement();
/*
PreparedStatement preparedStatement = conn.prepareStatement("SELECT user from ?");//获得预编译数据库操作对象
preparedStatement.setString(1,newPassword);//表示第一个?传入newPassword值
ResultSet resultSet = preparedStatement1.executeQuery();//启动预编译查询语句
*/
//4.执行SQL语句(DQL,DML…)
//executeQuery: 查询语句
//executeUpdate: 增删改语句
// int i = state.executeUpdate("insert into author values(1003,'陈真','中国')"); //返回的是受影响的行数
// if(i==1){
// System.out.println("数据添加成功!");
// }else {
// System.out.println("数据添加失败!");
// }
/*
删除操作
*/
// int i = state.executeUpdate("delete from author where id=1003");
// if (i == 1) {
// System.out.println("数据删除成功!");
// } else {
// System.out.println("数据删除失败!");
// }
/*
修改操作
*/
// int i = state.executeUpdate("update author set nation='俄罗斯' where id=1002");
// if (i == 1) {
// System.out.println("数据更新成功!");
// } else {
// System.out.println("数据更新失败!");
// }
/*
查询操作
*/
String sql = "SELECT\n" +
"\tt1.empno AS eno,\n" +
"\tt1.ename AS ename,\n" +
"\tt1.hiredate AS edate,\n" +
"\tt2.empno AS lno,\n" +
"\tt2.ename AS lname,\n" +
"\tt2.hiredate AS ldate \n" +
"FROM\n" +
"\temp t1\n" +
"\tJOIN emp t2 ON ( t1.mgr = t2.empno ) \n" +
"WHERE\n" +
"\tt1.hiredate < t2.hiredate;\n";
//返回的是一个结果集
ResultSet resultSet = state.executeQuery(sql);
//next()判断表中是否有多余的条数数据
while (resultSet.next()){ //判断下一行是否有数据
//取出每一条数据中的每一列,去除每一行数据的每一列
//根据列名获取每一列的值
// int eno = resultSet.getInt("eno");
// String ename = resultSet.getString("ename");
// String edate = resultSet.getString("edate");
// int lno = resultSet.getInt("lno");
// String lname = resultSet.getString("lname");
// String ldate = resultSet.getString("ldate");
// System.out.println(eno+","+ename+","+edate+","+lno+","+lname+","+ldate);
//若不知道列名呢
int eno = resultSet.getInt(1);
String ename = resultSet.getString(2);
String edate = resultSet.getString(3);
int lno = resultSet.getInt(4);
String lname = resultSet.getString(5);
String ldate = resultSet.getString(6);
System.out.println(eno+","+ename+","+edate+","+lno+","+lname+","+ldate);
}
//6.释放资源(使用完资源后一定要关闭资源,Java和数据库之间属于进程间的通信,开启之后一定要记得关闭)
state.close();
conn.close();
}
}