jdbcUtil.java 数据库连接,关闭 工具类
package c_util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/*
* jdbc工具类
* */
public class jdbcUtil {
private static String url = "jdbc:mysql://localhost:3306/day15";
private static String user = "root";
private static String password = "root";
/*
* 静态代码块
* */
static{
//注册驱动程序
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("驱动程序注册出错");
}
}
/*
* 抽取获取连接对象的方法
* */
public static Connection getConnection(){
try {
Connection conn = DriverManager.getConnection(url,user,password);
return conn;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException();
}
}
/*
* 释放查询资源
* */
public static void close(Connection conn,Statement stat,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
throw new RuntimeException(e);
}
}
if(stat!=null)
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/*
释放增删改查资源
*/
public static void close(Connection conn,Statement stat){
if(stat!=null)
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
demo1.java 未使用jdbc.java工具类
package b_statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;
/**
* 使用Statement对象执行静态sql语句
* @author APPle
*
*/
public class demo1 {
private String url = "jdbc:mysql://localhost:3306/day15";
private String user = "root";
private String password = "root";
/**
* 执行DDL语句(创建表)
*/
@Test
public void test1(){
Statement stat = null;
Connection conn = null;
ResultSet rs = null; //(在线式)结果集接口,必须保持与数据库的连接
try {
//1.驱动注册程序
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接对象
conn = DriverManager.getConnection(url, user, password);
/*3.创建statment对象,
statement:执行命令对象,把sql语句发送到数据库执行
Statement 是 Java 执行数据库操作的一个重要接口,
用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。
Statement对象,用于执行不带参数的简单SQL语句。*/
stat = conn.createStatement();
//4.准备sql
String sql = "CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),gender VARCHAR(2))";
//5.发送sql语句,执行sql语句,得到返回结果
int count = stat.executeUpdate(sql);
//6.输出
System.out.println("影响了"+count+"行!");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally{
//7.关闭连接(顺序:后打开的先关闭)
if(stat!=null)
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
demo2.java 已使用jdbcUtil.java工具类
int count = stat.executeUpdate(sql);
/*
* 使用statement执行DML语句
* */
public class demo2 {
@Test
public void testInsert(){
Connection conn = null;
Statement stat = null;
try {
conn = jdbcUtil.getConnection();
//3.使用statment对象
stat = conn.createStatement();
//4.准备sql语句
String sql = "insert into student(name,gender) values('王五','男');";
//5.发送sql语句
int count = stat.executeUpdate(sql);
//6.输出
System.out.println("影响了"+count+"行!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//7.关闭连接(顺序:后打开的先关闭)
jdbcUtil.close(conn, stat);
}
}
}
demo3.java 查询操作
ResultSet rs = stat.executeQuery(sql);
/*
* jdbc查询操作
* */
public class demo3 {
Connection conn = null;
Statement stat = null;
@Test
public void testSelect(){
try {
conn = jdbcUtil.getConnection();
stat = conn.createStatement();
String sql = "select * from student";
ResultSet rs = stat.executeQuery(sql);
//移动光标取第一行数据
//boolean flag = rs.next();
while(rs.next()){
/*
根据索引取值
int id = rs.getInt(1);
String name = rs.getString(2);
String gender = rs.getString(3);
System.out.println(""+id+"|"+name+"|"+gender);
* */
//根据列名称取值
int id = rs.getInt("id");
String name = rs.getString("name");
String gender = rs.getString("gender");
System.out.println(""+id+"|"+name+"|"+gender);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
jdbcUtil.close(conn, stat);
}
}
}
demo4.java 预编译,防止sql注入
stat = conn.prepareStatement(sql);
/*
* 模拟用户登录效果
* */
public class demo2 {
@Test
public void test(){
Connection conn = null;
PreparedStatement stat = null;
ResultSet rs = null;
try {
conn = jdbcUtil.getConnection();
String sql = "select * from users where name= ? and password=?";
stat = conn.prepareStatement(sql);
stat.setString(1, "张三");
stat.setString(2, "123456");
rs = stat.executeQuery();
if(rs.next()){
System.out.println("登录成功");
}else {
System.out.println("登录失败");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
jdbcUtil.close(conn, stat,rs);
}
}
}
demo5.java 获取自增长列
public class demo3 {
@Test
public void test(){
Connection conn = null;
PreparedStatement stat = null;
ResultSet rs = null; //结果集
String sql = "insert into student(name,gender,age) values(?,?,?)";
try {
//1.连接数据库
conn = jdbcUtil.getConnection();
//2.构建stat对象(在参数中,指定返回自增长列)
stat = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
stat.setString(1,"张三");
stat.setString(2,"男");
stat.setString(3,"16");
//3.执行sql
stat.executeUpdate();
//4.执行完更新,获取自增长列
rs = stat.getGeneratedKeys();
if(rs.next()){
System.out.println("刚才插入数据的自增长编号是:"+rs.getInt(1));
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
jdbcUtil.close(conn, stat,rs);
}
}
}