JDBC
Java Database Connectivity java 数据库连接
- 为什么会出现JDBC
SUN公司提供的一种数据库访问规则、规范,由于数据库种类较多,并且Java语言使用比较广泛,sun公司就提供了一种规范,让其他的数据库提供商去实现底层的访问规则。我们的Java程序只要使用sun公司提供的jdbc驱动即可。
使用JCBC的基本步骤
1.注册驱动
//1.注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
2.建立连接
// DriverManager.getConnection("jdbc:mysql://localhost/test?" + "user=monty&password=greatsqldb");
//2.建立连接 参数一:协议 + 访问的数据库,参数二:用户名,参数三:密码。
conn = DriverManager.getConnection("jdbc:mysql://localhost/school", "root", "");
3.创建statement
//3.创建statement,跟数据库打交道,一定需要这个对象。
st = conn.createStatement();
4.执行sql,得到ResultSet
//4.执行查询,得到结果集
String sql = "select * from student";
rs = st.executeQuery(sql);
5.遍历结果集
//5.遍历查询每一条记录
while(rs.next()) {
int id = rs.getInt("student_no");
String name = rs.getString("student_name");
String sex = rs.getString("sex");
System.out.println("id=" + id + "name=" + name + "sex=" + sex);
}
6.释放资源
if (rs != null) {
try {
rs.close();
} catch (SQLException sqlEx) { } // ignore
rs = null;
}
...
###JDBC 工具类构建
1.资源释放工作的整合
2.驱动防二次注册
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Driver 这个类里面有静态代码块,一上来就执行了,所以等同于我们执行了两次驱动,其实没有这个必要的。
//静态代码块 ---> 类加载了,就执行。java.sql.DriverManager.registerDriver(new Driver());
最后形成以下代码即可
Class.forName("com.mysql.jdbc.Driver");
3.使用properties配置文件
1.在src底下声明一个文件 xxx.properties,里面的内容如下
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/school
name=root
password=
2.在工具类里面,使用静态代码块,读取属性
static {
try {
//1.创建一个属性配置对象
Properties properties = new Properties();
//对应文件位于工程根目录
//InputStream is = new FileInputStream("jdbc.properties");
//使用类加载器,去读取src底下的资源文件,后面在servlet
//对应文件位于src目录底下
InputStream is = JDBCUtil.class.getResourceAsStream("jdbc.properties");
//导入输入流
properties.load(is);
//读取属性
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
name = properties.getProperty("name");
password = properties.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
}
###数据库的CRUD sql
-
insert
insert into student(student_no,student_name,sex) values('1000000','吃吃','女'); //1.获得连接对象 conn = JDBCUtil.getConn(); //2.根据连接对象,得到statement st = conn.createStatement(); //3.执行添加 String sql = "insert into student(student_no,login_pwd,student_name,sex,grade_id,phone,address,born_date,email,identity_card) values\r\n" + "(121212,default,'吃吃','女',1,'13645667783','成都市婧将区','1990-09-08 00:00:00','chichi@163.com','511121200001021234')"; //影响的行数,如果大于0表明操作成功,否则失败 int result = st.executeUpdate(sql); if(result > 0) { System.out.println("添加成功"); }else { System.out.println("添加失败"); }
-
delete
delete from student where student_name = '张三'; //删除 Connection conn = null; Statement st = null; try { //1.获得连接对象 conn = JDBCUtil.getConn(); //2.根据连接对象,得到statement st = conn.createStatement(); //3.执行添加 String sql = "delete from student where student_name = '吃吃'"; //影响的行数,如果大于0表明操作成功,否则失败 int result = st.executeUpdate(sql); if(result > 0) { System.out.println("删除成功"); }else { System.out.println("删除失败"); } } catch (SQLException e) { e.printStackTrace(); }finally { JDBCUtil.release(conn, st); }
-
query
select * from student; //查询 Connection conn = null; Statement st = null; ResultSet rs = null; try { //1.获得连接对象 conn = JDBCUtil.getConn(); //2.根据连接对象,得到statement st = conn.createStatement(); //3.执行sql语句,返回ResultSet String sql = "select * from student"; rs = st.executeQuery(sql); //4.遍历结果集 while(rs.next()) { int id = rs.getInt("student_no"); String name = rs.getString("student_name"); System.out.println("学号:" + id + "姓名:" + name); } } catch (SQLException e) { e.printStackTrace(); }finally { JDBCUtil.release(conn, st, rs); }
-
update
update student set sex = '女' where student_name = '呵呵'; //修改 Connection conn = null; Statement st = null; try { //1.获得连接对象 conn = JDBCUtil.getConn(); //2.根据连接对象,得到statement st = conn.createStatement(); //3.执行添加 String sql = "update student set sex = '神' where student_no = 20010"; //影响的行数,如果大于0表明操作成功,否则失败 int result = st.executeUpdate(sql); if(result > 0) { System.out.println("修改成功"); }else { System.out.println("修改失败"); } } catch (SQLException e) { e.printStackTrace(); }finally { JDBCUtil.release(conn, st); }
注:使用update,delete更新删除,如果列被外键绑定,那么需要先进行外键约束检查关闭,然后执行更新删除操作,然后再次开启外键约束检查
SET foreign_key_checks = 0; // 先设置外键约束检查关闭
XXXX; // 操作数据,表或者视图
SET foreign_key_checks = 1; // 开启外键约束检查,以保持表结构完整性
###使用单元测试,测试代码
1.定义一个类,TestXXX,里面定义方法 testXXX
2.添加junit的支持。
右键工程 --- add Library --- Junit --- Junit4(最新即可)
3.在方法的上面加上注释,其实就是一个标记
@Test
public void testQuery(){
...
}
4.光标选中方法名字,然后右键执行单元测试。或者是打开outline视图,然后选中方法右键执行。