package cn.itcast.demo2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;
public class Demo2 {
/*
* 连接数据库,得到Connection就算成功!
* 对数据库做增、删、改
*/
@Test
public void fun1() throws ClassNotFoundException, SQLException {
/*
* 一、得到Connection
* 1. 准备四大参数
* 2. 加载驱动类
* 3. 得到Connection
*/
// 准备四大参数
String driverClassName = "com.mysql.jdbc.Driver";
// jdbc协议的格式!jdbc:工商的名称:子协议(由工商自己来规定)
// 对mysql而言,它的子协议结构://主机:端口号/数据库名称
String url = "jdbc:mysql://localhost:3306/mydb3";
String username = "root";
String password = "123";
// 加载驱动类
Class.forName(driverClassName);
// 使用DriverManager,以及省下的3个参数,得到Connection
Connection con = DriverManager.getConnection(url, username, password);
/*
* 二、对数据库做增、删、改
* 1. 通过Connection对象创建Statement
* > Statement语句的发送器,它的功能就是向数据库发送sql语句!
* 2. 调用它的int executeUpdate(String sql),它可以发送DML、DDL
*/
// 1. 通过Connection得到Statement对象
Statement stmt = con.createStatement();
// 2. 使用Statement发送sql语句!
// String sql = "INSERT INTO stu VALUES('ITCAST_0003', 'wangWu', 88, 'male')";
// String sql = "UPDATE stu SET name='zhaoLiu', age=22, " +
// "gender='female' WHERE number='ITCAST_0003'";
String sql = "DELETE FROM stu";
int r = stmt.executeUpdate(sql);
System.out.println(r);
}
/**
* 执行查询
* @throws ClassNotFoundException
* @throws SQLException
*/
@Test
public void fun2() throws ClassNotFoundException, SQLException {
/*
* 一、得到Connection
* 二、得到Statement,发送select语句
* 三、对查询返回的“表格”进行解析!
*/
/*
* 一、得到连接
* 1. 准备四大连接参数
*/
String driverClassName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/exam";
String username = "root";
String password = "123";
/*
* 2. 加载驱动类
*/
Class.forName(driverClassName);
/*
* 3. 通过省下的三个参数调用DriverManger的getConnection(),得到连接
*/
Connection con = DriverManager.getConnection(url, username, password);
/*
* 二、得到Statement,执行select语句
* 1. 得到Statement对象:Connection的createStatement()方法
*/
Statement stmt = con.createStatement();
/*
* 2. 调用Statement的ResultSet rs = executeQuery(String querySql)
*/
ResultSet rs = stmt.executeQuery("select * from emp");
/*
* 三、解析ResultSet
* 1. 把行光标移动到第一行,可以调用next()方法完成!
*/
while(rs.next()) {//把光标向下移动一行,并判断下一行是否存在!
int empno = rs.getInt(1);//通过列编号来获取该列的值!
String ename = rs.getString("ename");//通过列名称来获取该列的值
double sal = rs.getDouble("sal");
System.out.println(empno + ", " + ename + ", " + sal);
}
/*
* 四、关闭资源
* 倒关
*/
rs.close();
stmt.close();
con.close();//这个东东,必须要关,不关就死!
}
// 规范化
@Test
public void fun3() throws Exception {
Connection con = null;//定义引用
Statement stmt = null;
ResultSet rs = null;
try {
/*
* 一、得到连接
*/
String driverClassName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/exam";
String username = "root";
String password = "123";
Class.forName(driverClassName);
con = DriverManager.getConnection(url, username, password);//实例化
/*
* 二、创建Statement
*/
stmt = con.createStatement();
String sql = "select * from emp";
rs = stmt.executeQuery(sql);
rs.last();//把光标移动到最后一行
System.out.println(rs.getRow());
rs.beforeFirst();
/*
* 三、循环遍历rs,打印其中数据
*
* getString()和getObject()是通用的!
*/
// while(rs.next()) {
// System.out.println(rs.getObject(1) + ", "
// + rs.getString("ename") + ", " + rs.getDouble("sal"));
// }
int count = rs.getMetaData().getColumnCount();
while(rs.next()) {//遍历行
for(int i = 1; i <= count; i++) {//遍历列
System.out.print(rs.getString(i));
if(i < count) {
System.out.print(", ");
}
}
System.out.println();
}
} catch(Exception e) {
throw new RuntimeException(e);
} finally {
// 关闭
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(con != null) con.close();
}
}
}