连接MySQL的简单流程:
- 导jar包:驱动!
- 加载驱动类:Class.forName(“类名”);
- 给出url、username、password,其中url背下来!
- 使用DriverManager类来得到Connection对象!
1.JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。
2.JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库
JDBC中的核心类有:DriverManager、Connection、Statement,和ResultSet
- DriverManger(驱动管理器)的作用有两个: 注册驱动:这可以让JDBC知道要使用的是哪个驱动;获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。
- Connection对象表示连接,与数据库的通讯都是通过这个对象展开的:
Connection最为重要的一个方法就是用来获取Statement对象; - Statement是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句: void
executeUpdate(String sql):执行更新操作(insert、update、delete等); ResultSet executeQuery(String sql):执行查询操作,数据库在执行查询后会把查询结果,查询结果就是ResultSet;
JDBC开发步骤
- 注册驱动.
- 获得连接.
- 获得语句执行平台
- 执行sql语句
- 处理结果
- 释放资源.
一、导入驱动jar包
创建一个lib文件,用于存放当前项目所需要的jar包
(注意:我这里使用的是版本五的MySQL,mysql数据库的驱动jar包:mysql-connector-java-5.1.13-bin.jar,),把jar包添加完毕要记得手动加载一下jar才能生效有用,具体效果如下:
二、注册驱动
注册驱动就只有一句话:Class.forName(“com.mysql.jdbc.Driver”),也可以是使用DriverManager来注册驱动【DriverManager.registerDriver(new com.mysql.jdbc.Driver())】,但不推荐,因为如果将来想连接Oracle数据库,那么必须要修改代码的。并且其实这种注册驱动的方式是注册了两次驱动!
下面我们来看看com.mysql.jdbc.Driver类的源代码:
publicclass Driver extends NonRegisteringDriver implements java.sql.Driver {
static {
try {
//从这里可以看出,在com.mysql.jdbc.Driver源码中的静态代码块中就已经注册驱动,因此我们通过反射技术获取该类就可以直接注册驱动
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
thrownew RuntimeException("Can't register driver!");
}
}
……
}
三、获取连接
**获取连接的也只有一句代码:DriverManager.getConnection(url,username,password),其中username和password是登录数据库的用户名和密码,mysql的url:
jdbc:mysql://localhost:3306/db1
**
//获取数据库连接的代码,连接数据库中db1库
Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/db1”,”root”,”123”);
四、获取Statement
在得到Connectoin之后,说明已经与数据库连接上了,下面是通过Connection获取Statement对象的代码:
//Statement是用来向数据库发送要执行的SQL语句的!
Statement stmt = con.createStatement();
五、发送SQL增、删、改语句 和 查询语句
这里要注意:增删改和查询是有区别的,别搞混,执行查询使用的不是execute()方法,而是executeQuery()方法
如果SQL语句执行失败,那么execute会抛出一个SQLException
executeQuery()方法返回的是ResultSet,ResultSet封装了查询结果,我们称之为结果集,
//execute()方法增删改
String sql = “insert into user value(’zhangSan’, ’123’)”;
stmt.execute(sql);
//executeQuery()方法查询
String sql = “select * from user”;
ResultSet rs = stmt.executeQuery(sql);
六、读取结果集中的数据
ResultSet就是一张二维的表格,它内部有一个“行光标”,光标默认的位置在“第一行上方”,我们可以调用rs对象的next()方法把“行光标”向下移动一行,在ResultSet类中提供了一系列的getXXX()方法,比较常用的方法有:
Object getObject(int col)
String getString(int col)
int getInt(int col)
double getDouble(int col)
七、关闭释放资源
与IO流一样,使用后的东西都需要关闭!关闭的顺序是先得到的后关闭,后得到的先关闭。
resultSetclose();
statement.close();
connection .close();
代码
这里只是简单的演示了添加的操作,
public static void main(String[] args) {
Connection con=null;
Statement stmt=null;
try {
//获取驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
String url = "jdbc:mysql://localhost:3306/db1";
con = DriverManager.getConnection (url, "root", "123");
//获取Statement,执行添加sql语句
stmt = con.createStatement();
String sql = "insert into user values('zhangSan', '123')";
stmt.executeUpdate(sql);
System.out.println("插入成功!");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace ();
}finally {
try {
if(stmt != null) stmt.close();
if(con != null) con.close();
} catch(SQLException e) {}
}
}