package cn.itcast.jdbc;
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//解决关于加载驱动问题
public class JdbcDemo2 {
public static void main(String[] args) throws SQLException, ClassNotFoundException { //1.注册驱动
//DriverManager.registerDriver(new Driver());//一注册驱动,驱动就加载到内存里面了 也就是说我们就可以用它了 加载了两个驱动
Class.forName("com.mysql.jdbc.Driver");//优点是加载一次 替换registerDriver()这个方法 这个不耦合,根本就没用mysql驱动的东西 不是意味着那就不用驱动了,只是不依赖jar包
//在代码上、表现上根本就看不到驱动那包 用的都是公共的那种接口(Connection、DriverManager、ResultSet、SQLException、Statement),就是JDK里面提供的公共的接口
//编程的都知道不依赖任何东西是最好的,因为没有耦合,但是那是不可能的。所以要尽量让耦合度降低
//加载mysql驱动
Class.forName("oracle.jdbc.driver.OracleDriver");//加载oracle驱动
//它怎么知道这是oracle驱动还是mysql驱动呢?它是如何区分的? //String url = "jdbc:mysql://localhost:3306/day17";
String url = "jdbc:mysql:///day17"; //2.获取连接对象
//Connection con = DriverManager.getConnection(url, "root", "");
Connection con = (Connection) DriverManager.getConnection(url, "root", "");
System.out.println(con);
//connection是接口,是驱动,驱动肯定把这个接口实现了 编程用最顶层去接收操作起来会比较方便 前面是父,后面是子 用最顶层接收
//3.通过连接对象获取操作sql语句的Statement
Statement st = con.createStatement();
//4.操作sql语句
String sql = "select * from user";
ResultSet rs = st.executeQuery(sql);//ResultSet就是查询的结果,可以想象成是集合,但是它不是集合 //5.遍历结果集
/* boolean flag = rs.next();//向下移动,返回值为true,代表有下一条记录。 System.out.println(flag);
int id = rs.getInt(1);
int id1 = rs.getInt("id");
System.out.println(id);
System.out.println(id1);
String username = rs.getString(2);
String username1 = rs.getString("username");
System.out.println(username);
System.out.println(username1);*/
while(rs.next()){
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
String email = rs.getString("email");
System.out.println(id+" "+username+" "+password+" "+email);
}
//只要Java程序跟任何设备进行了连接,用完之后必须释放资源。最简单基础班讲I/O流,Java跟文件进行了连接,用完之后关闭文件流。数据库也是一个设备。Java跟数据库连接上了用完之后也要关闭。必须把资源释放。
//6.释放资源
rs.close();//结果集得关
st.close();
con.close();
//直接把con关闭了,数据库和程序断开了。但是statement和resultset没有及时释放,它还在内存存着。close()是释放和回收资源。
//close()的顺序和进门出门是一样的,是进门的时候先进大门,出门的时候是最后才出大门
//=============
//Java可以操作数据库
}
}

最新文章

  1. iPhone开发学习
  2. Android -- EditText方法
  3. c语言字符串操作大全
  4. 编程工具系列之一------使用GDB的堆栈跟踪功能
  5. linux进程间通信之信号
  6. 求第i个小的元素 时间复杂度O(n)
  7. 使用Intent启动组件
  8. windows下安装MongoDB进度条不动
  9. ListView 无 DataSource 依然用 DataPager 翻页
  10. 201621123062《java程序设计》第八周作业总结
  11. Collection集合框架详解
  12. EBS客户化迁移SQL
  13. 杭电ACM2007--平方和与立方和
  14. 动态嵌套form,使用Stimulus Js库(前后端不分离)
  15. Python 携程
  16. html5本地存储技术 localstorage
  17. 20145230熊佳炜《网络对抗》实验九:web安全基础实践
  18. 基于leveldb,levigo做二次开发
  19. (转)Python之文件读写
  20. golang select 退出结束goroutine

热门文章

  1. Javascript-我对作用链、闭包、原型及原型链的理解
  2. [项目部署] CentOs7 安装 MySQL/Tomcat/JDK 笔记
  3. url编码有个bug,不能直接用decodeURIComponent,如果遇到前面的$会报错。
  4. A*B problem(FFT)
  5. python3中zip()函数的用法
  6. C8051F340 USB Fn hacking
  7. Linux开放80、8080端口或者开放某个端口
  8. Asp.net工作流workflow实战之工作流启动与继续(三)
  9. 通过php的MongoDB driver连接Azure的DocumentDB PaaS
  10. 机器学习:PCA(实例:MNIST数据集)