0.将驱动引入项目
- 在项目根目录新建文件夹lib,把数据库驱动mysql-connector-java-5.1.7-bin.jar放入该文件夹。
- 右键点击项目名称->properties->Java Build Path->Libraries->Add JARs->找到驱动文件->搞定
什么是mysql-connector-java-5.1.7-bin.jar?
数据库驱动。
为什么要另外引入一个jar包,sun公司怎么没有实现这些功能?
,mysql oracle sqlserver,每个数据库内部实现不同,sun公司提供标准接口,数据库提供商负责实现接口,把所有实现类打包成.jar文件。有了这个jar包,java程序就可以驱动着数据库做事。
*1.加载驱动
* 也叫注册驱动
* Class.forName("com.mysql.jdbc.Driver")
*
*2.获取连接对象
* Connection conn = DriverManager.getConnection("url",user,password);
例如:jdbc:mysql://127.0.0.1:3306/myschool
* url - jdbc:subprotocol:subname 形式的数据库 url
- URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。
- 也可认为由4部分组成:协议、主机、端口、路径
- URL的一般语法格式为:
- (带方括号[]的为可选项):
- protocol :// hostname[:port] / path / [;parameters][?query]#fragment
*3.获取sql执行器对象
* Statement 对象
Statement statement = conn.createStatement();
*PreparedStatement(Statement的子接口)表示预编译的sql语句的对象,
*SQL 语句被预编译并存储在 PreparedStatement
对象中。然后可以使用此对象多次高效地执行该语句。
*PreparedStatement pst = conn.prepareStatement(sql);
(相对于statement执行器对象)
1.代码可读性性高,由于是预编译sql语句对象,可以设置占位符
2.解决了statement拼串造成的sql 注入安全问题
3.由于是预编译之后发送的,减轻了服务器压力,提高了程序性能
*CallableStatement(PreparedStatement 的子接口)--用于执行sql存储过程的接口
String sql = "call pro_…"
* CallableStatement cas = conn.prepareCall(sql)
*4.执行并返回处理结果
* 增删改 sql语句 executeUpdate()-->返回值为sql语句操作的数据行数,行数为0则数据库指令操作不成功
* 查询sql语句-->executeQuery()-->返回java.sql.ResultSet结果集对象,你所查询的表数据
* 用next方法判断数据库结果集中是否有下一行元素,光标最初位于第一行之前
*
*5.关闭资源
* 关闭资源的顺序,先创建的后关闭
* 增删改sql语句 ----只需要关闭连执行器(Statement/PrepareStatement)和连接对象(Connection)
* 查询 ,需要关闭ResultSet结果集对象,执行器对象(Statement/PrepareStatement)和连接对象(Connection)
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
*1.加载驱动
* 也叫注册驱动
* Class.forName("com.mysql.jdbc.Driver")
*
*2.获取连接对象
* Connection conn = DriverManager.getConnection("url",user,password);
* url - jdbc:subprotocol:subname 形式的数据库 url
*
*3.获取sql执行器对象
* Statement 对象
* Statement statement = conn.createStatement();
*
*4.执行并返回处理结果
* 增删改 sql语句 executeUpdate()-->返回值为sql语句操作的数据行数,行数为0则数据库指令操作不成功
* 查询sql语句-->executeQuery()-->返回java.sql.ResultSet结果集对象,你所查询的表数据
* 用next方法判断数据库结果集中是否有下一行元素,光标最初位于第一行之前
*
*5.关闭资源
* 关闭资源的顺序,先创建的后关闭
* 增删改sql语句 ----只需要关闭连执行器(Statement/PrepareStatement)和连接对象(Connection)
* 查询 ,需要关闭ResultSet结果集对象,执行器对象(Statement/PrepareStatement)和连接对象(Connection)
* @author Administrator
*
*/
public class Test05 {
public static void main(String[] args) {
//1.加载驱动/注册驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//2.连接对象,在捕获异常外声明该对象,后续方法关闭该对象
Connection connection = null;
//3.执行器对象 ,在捕获异常外声明该对象,后续方法关闭该对象
Statement statement = null;
try {
//获取连接对象
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool","root","root");
System.out.println("连接数据库成功");
//获取执行器对象
statement=connection.createStatement();
//sql执行器对象用来向数据库发送sql语句,并执行sql语句,带有int返回值executeUpdate();
String sql = "update grade set gradename='9年级' where gradeid=9";
int count =statement.executeUpdate(sql);
if(count>0){
System.out.println("修改成功 ");
}else{
System.out.println("修改失败");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("数据库连接失败");
}finally{
//先创建的后关闭
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}