package cn.taylor.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 {
@Test
public void fun1() throws ClassNotFoundException, SQLException{
/*
* 一. 得到Connection
* > 准备四大参数
* > 加载驱动类
* > 得到Connection
*/
String driverClassName="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/taylor";
String username="root";
String password="123456";
//加载驱动类
Class.forName(driverClassName);
//得到Connection
Connection con=DriverManager.getConnection(url, username,password);
/*
* 二.对数据库做增,删,改
* 1.通过Connection对象创建Statement,Statement语句的发送器,它的功能就是发送sql语句。
* 2.调用它的 int excuteUpdate(String sql),可以发送DML,DDL
*/
//1.通过Connection得到Statement对象
Statement stmt=con.createStatement(); //注意这个Statement的包
//2.使用 Statement发送sql语句
//插入一条数据记录
//String sql="INSERT INTO user VALUES('hahaha','shiyishi','123456')";
//改变数据记录
String sql="UPDATE user SET use6rname='lisi',password='111111' WHERE age='20'";
//返回值r表示是影响几行
int r=stmt.executeUpdate(sql);
System.out.println(r);
}
/*
* 三.执行查询
*/
@Test
public void fun2() throws ClassNotFoundException, SQLException{
/*
* 1.得到Connection
* 2.得到Statement,发送sql查询语句
* 3.对查询返回的“表格”进行解析
*/
String driverClassName="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/taylor";
String mysql_username="root";
String mysql_password="123456";
//加载驱动类
Class.forName(driverClassName);
Connection con=DriverManager.getConnection(url, mysql_username,mysql_password);
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("SELECT * FROM user");
//System.out.println(rs);
/*
* 解析ResultSet
* 1.把光标向下移动一行,并判断下一行是否存在
* 2.利用循环,将表中数据输出
*/
while(rs.next()){
String username=rs.getString("username"); //通过列名称来获取该列的值
String password=rs.getString(2);
String age=rs.getString(3); //通过列编号来获取该列的值
System.out.println(username+ ","+password+","+age);
}
/*
*
*四. 关闭资源
*/
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/taylor";
String m_username="root";
String m_password="123456";
Class.forName(driverClassName);
//实例化
con=DriverManager.getConnection(url, m_username,m_password);
stmt=con.createStatement();
rs=stmt.executeQuery("SELECT * FROM user");
//rs.last(); //把光标移动到最后一行
//System.out.println(rs.getRow()); //获取当前行所在编号
//rs.beforeFirst(); //将光标移动到第一行前面
//循环遍历
/*
* rs的getString()和getObject()方法比较通用。
*/
// while(rs.next()){
//
// String username=rs.getString(1);
// String password=rs.getString(2);
// String age=rs.getString(3);
// System.out.println(username + ","+password+","+age);
//
// }
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{ //finally里面的语句是一定会执行的
//关闭操作,倒序关闭
if(rs!=null)rs.close(); //判断空指针是为了增强代码的健壮性。
if(stmt!=null)stmt.close();
if(con!=null)con.close();
}
}
}