3.JDBC
https://www.bilibili.com/video/BV1eJ411c7rf?p=7
JDBC编写步骤

一、介绍
①JDBC(Java Database Connectivity)是一个 独立于特定数据库管理系统、的通用的SQL 数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql,javax.sql)使用这个类库可以以一种标准的方法、方便地访问数据库资源
②JDBC为访问不同的数据库提供了一种 统一的途径,为开发者屏蔽了一些细节问题。
③JDBC的目标是使Java程序员使用JDBC可以连接任何 提供了JDBC 驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。
mysql库的jar包记得build path
手动启动mysql 服务 管理员运行黑框 net start mysql
二、建立连接的五种方式
package connection;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import org.junit.Test;
import org.junit.Test;
public class ConnectionTest {
@Test//方式一:原理 定义式
public void connection1() throws SQLException
{
//1.获取Driver实现类对象
Driver driver=new com.mysql.jdbc.Driver();
//2.提供数据库 用户名 密码 四个基本信息
String url="jdbc:mysql://localhost:3306/test";//test是数据库
Properties info=new Properties();
info.setProperty("user","root");
info.setProperty("password", "123456");
//3.获取连接
Connection conn =driver.connect(url, info);
System.out.println(conn);// 麻了 忘记手动打开mysql服务 所以Communications link failure
}
@Test //方式二:反射 不出现第三方api 提高可移植性
public void connection2() throws Exception
{
Class clazz =Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
String url="jdbc:mysql://localhost:3306/test";
Properties info=new Properties();
info.setProperty("user","root");
info.setProperty("password", "123456");
Connection conn =driver.connect(url, info);
System.out.println(conn);
}
@Test //方式三:使用DriverManager类
public void connection3() throws Exception
{
Class clazz =Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
String url="jdbc:mysql://localhost:3306/test";
String user=("root");
String password=("123456");
//注册驱动
DriverManager.registerDriver(driver);
Connection conn =DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
@Test //方式四
public void connection4() throws Exception
{
String url="jdbc:mysql://localhost:3306/test";
String user=("root");
String password=("123456");
Class.forName("com.mysql.jdbc.Driver");//mysql的Driver类源码中 静态代码块 就注册了
Connection conn =DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
@Test//方式五:将基本信息配置在设置文件中 数据与代码分离 好处是如修改配置信息时避免重新打包
public void connection5() throws Exception
{
//1读取配置文件中的4个基本信息
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
String user = pros.getProperty("user");
String url = pros.getProperty("url");
String password=pros.getProperty("password");
String driverClass=pros.getProperty("driverClass");
//2加载驱动
Class.forName(driverClass);
//3获取连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
}
statement有 拼串、 sql注入问题

三、preparedstatement增删改
package preparedstatement.CRUD_2;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;
import org.junit.Test;
import connection_1.ConnectionTest;
public class PreparedStatement_UpdateTest {
@Test//为了保证资源释放所以使用了try catch
public void insert()
{
//1读取配置文件中的4个基本信息
//3获取连接
Connection conn=null;
PreparedStatement ps=null;
try {
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
String user = pros.getProperty("user");
String url = pros.getProperty("url");
String password=pros.getProperty("password");
String driverClass=pros.getProperty("driverClass");
//2加载驱动
Class.forName(driverClass);
conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
//4预编译sql语句 并返回prepared实例
String sql="INSERT INTO stuinfo (id,NAME) VALUES(?,?);";
ps = conn.prepareStatement(sql);
//5填充 占位符
ps.setString(1, "3");
ps.setString(2, "Dev1ce");
//6执行操作
ps.execute();
} catch (Exception e) {
e.printStackTrace();
}finally{
//7资源关闭
try {
if(ps!=null)ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null)conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
@Test //这里封装了函数getConnection()和closeResource 具体封装在下面
public void update()
{
Connection conn=null;
PreparedStatement ps=null;
try {
//1获取连接
conn = jdbc_utils.getConnection();
//2sql
String sql="update stuinfo set name=? where id =?";
ps = conn.prepareStatement(sql);
//3占位符
ps.setObject(1, "Jame");
ps.setObject(2, 10);
//4执行
ps.execute();
} catch (Exception e) {
e.printStackTrace();
}
finally{
//5关闭
jdbc_utils.closeResource(conn, ps);
}
}
public void CommonUpdate(String sql ,Object ...args){//通用增删改
Connection conn=null;
PreparedStatement ps=null;
try {
//1获取连接
conn = jdbc_utils.getConnection();
//2sql
ps = conn.prepareStatement(sql);
//3占位符
for(int i=0;i<args.length;i++){
ps.setObject(i+1, args[i]);
}
//4执行
ps.execute();
} catch (Exception e) {
e.printStackTrace();
}finally{
//5关闭
jdbc_utils.closeResource(conn, ps);
}
}
@Test //调用通用增删改
public void up(){
String sql="update stuinfo set id=? where name=?;";
CommonUpdate(sql,13,"d");
}
为了简便 把每次获取连接 新建一个package(我的叫util_3)里面的class(我的叫jdbc_utils)封装了连接和关闭操作
package util_3;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/*
* 封装连接和关闭
* 操作数据库的工具类
*
*
*/
public class jdbc_utils {
public static Connection getConnection() throws Exception{
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
String user = pros.getProperty("user");
String url = pros.getProperty("url");
String password=pros.getProperty("password");
String driverClass=pros.getProperty("driverClass");
//2加载驱动
Class.forName(driverClass);
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
}
public static void closeResource(Connection conn,Statement ps)
{
try {
if(ps!=null)ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null)conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
四ResultSet 查询
针对特定表的特定操作 (有点懒 以后用到在学)
package preparedstatement.CRUD_2;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.junit.Test;
import bean.beauty;
import util_3.jdbc_utils;
public class Queryforbeauty {
@Test
public void test1() throws Exception{
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
conn = jdbc_utils.getConnection();
String sql="select id ,name ,phone from beauty where id =?";
ps = conn.prepareStatement(sql);
ps.setObject(1, 5);
rs = ps.executeQuery();//执行并返回结果集
//处理结果集
if(rs.next()){
int id=rs.getInt(1);
String name=rs.getString(2),phone=rs.getString(3);
//封装到数组
Object data=new Object[]{id,name,phone};
//封装到类对象 新建了一个class
beauty bt = new beauty(id, name, phone);
System.out.println(bt);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
jdbc_utils.closeResource(conn, ps, rs);
}
}
}

浙公网安备 33010602011771号