Java Data Base Connection(JDBC)

用于执行SQL语句的Java API,可为多种关系数据库提供统一访问。

它由一组用Java语言编写的类和接口组成,是Java访问数据库的标准规范。

JDBC需连接驱动。

  • 驱动:两个设备要进行通信时需满足的一定的通信数据格式。
    • 数据格式由设备供应商规定
    • 设备供应商提供驱动软件,通过软件可以与该设备进行通信。

  • JDBC是接口
  • 驱动是接口的实现

1.JDBC开发步骤

1.1导入驱动jar包

创建lib目录,用于存放当前项目需要的所有jar包。

选择jar包,右键执行build path/Add to Build Path

1.2注册驱动

Class.forName("com.mysql.jdbc.Driver");
  • java.sql.Driver:JDBC规范定义驱动接口;
  • com.mysql.jdbc.Driver:MySQL包提供的实现类;
  • Class.forName():加载一个使用空字符串描述的驱动类 
    • static Class<?>  forName(String classname):返回与带有给定字符串名的类或接口相关联的Class对象。
  • Driver类主动将自己注册。

1.3获得连接

Connection cn=DriverManager.getConnection("jdbc:mysql"//localhost:3306/mydb","root","root");

1.3.1DriverManager

在调用 getConnection方法时,DriverManager 会试着从初始化时加载的那些驱动程序以及使用与当前 applet 或应用程序相同的类加载器显式加载的那些驱动程序中查找合适的驱动程序。

DriverManager.getConnection(String url,String username,String pw):试图建立到给定数据库 URL 的连接。

三个参数:

  • 需要连接数据库的位置
  • 用户名
  • 密码

JDBC规定url格式:

  • jdbc固定
  • 数据路名称(mysql)
  • 数据库厂商规定
    • 数据库IP地址:localhost
    • 端口号:3366
    • DATABASE名称:mydb

1.4获得语句执行平台

String sql="某sql语句";
Statement stmt=con.createStatement();

获得Statement语句执行平台。

1.4.1Statement

用于执行静态 SQL 语句并返回它所生成结果的对象。

在默认情况下,同一时间每个 Statement对象在只能打开一个 ResultSet对象。

因此,如果读取一个 ResultSet对象与读取另一个交叉,则这两个对象必须是由不同的 Statement对象生成的。

如果存在某个语句的打开的当前ResultSet对象,则 Statement接口中的所有执行方法都会隐式关闭它。

常用方法:

int executeUpdate(String sql):执行insert、update、delete语句

ResultSet executeQuery(String sql):执行select语句

boolean execute(sql):执行select返回true,执行其他语句,返回false

1.5处理结果集

ResultSet是一个二维表格。

boolean next():执行下一条记录。

getXXX(int col):列从1开始。

  • 获得对象:Object getObject(int index)、Object getObject(String name)
  • 获得字符串:String getString(index)、Object getObject(String name)
  • 获得整型:int getInt(index)、Object getObject(String name)
  • 获得双精度浮点型:double getDouble(int index)、Object getObject(String name)

1.6释放资源

关闭的顺序:先得到的后关闭

rs.close();

stmet.close();

con.close();

2.SQL注入

输入的口令为:

则进入系统会,判断语句会为:password='xxx'OR'a'='a',通过验证。

PreparedStatement解决

3.PreparedStatement

建议每条SQL语句的所有实际参数都用逗号分隔。

String sql="insert into user(id,name) values (?,?)";

PreparedStatement psmt=conn.preparedStatement(sql);

preparedStatement(String sql):创建一个preparedStatement对象来将参数化的 SQL 语句发送到数据库。

带有 IN 参数或不带有 IN 参数的 SQL 语句都可以被预编译并存储在preparedStatement对象中。然后可以有效地使用此对象来多次执行该语句。

  • sql - 可能包含一个或多个 '?' IN 参数占位符的 SQL 语句

3.1常用方法

int executeUpdate()

ResultSet executeQuery()

boolean execute()

3.2设置实际参数

void setXXX(int index, XXX xx)

将指定参数设置为给定的Java值。

将此值发给数据库时,驱动程序将它转换为一个SQL xxx类型值。

setString(2,"张三");

把SQL语句中的第2个占位符'?'替换为“张三“。

3.3预处理对象executeUpdate方法

3.3.1 操作格式

  1. 注册驱动
  2. 获取连接
  3. 获取预处理对象
  4. SQL语句占位符设置实际参数
  5. 执行SQL语句
  6. 释放资源

3.3.2 insert

Class.forName("com.mysql.jdbc.Driver");

Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");

String sql="insert into user(name) values (?)";

PreparedStatement pstmt=conn.preparedStatement(sql);

stmt.setString(1,"李四");

int line=stmt.executeUpdate();

System.out.println("新添加的行数:"+line);

stmt.close();
conn.close();

3.3.3update

Class.forName("com.mysql.jdbc.Driver");

Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");

String sql="update user set name=? where id=?";

PreparedStatement pstmt=conn.preparedStatement(sql);

stmt.setString(1,"李四");
stmt.setString(2,1);

stmt.close();
conn.close();

3.3.4delete

Class.forName("com.mysql.jdbc.Driver");

Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");

String sql="delete from user where id=?";

PreparedStatement pstmt=conn.preparedStatement(sql);

stmt.setString(1,1);

stmt.close();
conn.close();

3.4预处理对象executeQuery方法

3.4.1 操作格式

  1. 注册驱动
  2. 获取连接
  3. 获取预处理对象
  4. SQL语句占位符设置实际参数
  5. 执行SQL语句
  6. 处理结果集(遍历结果集合)
  7. 释放资源

3.4.2 select

Class.forName("com.mysql.jdbc.Driver");

Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");

String sql="select * from user";

PreparedStatement pstmt=conn.preparedStatement(sql);

ResultSet rs=stmt.executeQuery(sql);
while(rs.next()){
    String id=rs.getInt("id");
    String name=rs.getString("name);
    System.out.println(id+"---"+name);}

rs.close();
stmt.close();
conn.close();

4. JDBC工具类

可将“获得数据库连接”操作封装为工具类JDBCUtils

提供获取连接对象的方法,从而达到代码复用

提供方法:public static Connection getConn();

public class JDBCUtils{
    public static final String DRIVERNAME="com.mysql.jdbc.Driver";
    public static final String URL="JDBC:MYSQL://LOCALHOST:3306/mydb";
    public static final String USER="root";
    public static final String PAEEWORD="root";

    static{
        try{
            Class.forName(DRIVERNAME);
        }catch(ClassNotFoundException e){
            System.out.println("数据库驱动注册失败!");
        }
    }
    public static Connection getConn() throws Exception{
        Connection conn=DriverManager.getConnection(URL,USER,PAEEWORD);
        return conn;
    }    
}

5.Properties配置文件

获得的连接的4个参数(驱动、URL、用户名、密码)通常在配置文件中保存,方便后期维护。

层序如果需要更换数据库,只需要改配置文件即可。

习惯使用Properties文件,要求如下;

  • 文件位置:任意,建议src下
  • 文件名称:任意,扩展名为.properties
  • 文件内容:一行一组数据,格式为"key=value"
    • key命名自定义,多个单词用点分隔,jdbc.driver
    • value不支持中文,如果非要用非中文,需unicode转换

文件名db.properties

driver=com.mysql.jdbc.Driver;

url=jdbc:mysql://localhost:3306/mydb;

user=root;

password=root

JDBCUtils更改为:

public class JDBCUtils{
    public static String driver;
    public static String url;
    public static String user;
    public static String password;

    static{
        try{
            Properties props=new Properties();
            Reader is=new FileReader("db.properties");
            props.load(is);

            driver=props.getProperties("deriver");
            url=props.getProperties("url");
            user=props.getProperties("user");
            password=props.getProperties("pwssword");
        }catch(ClassNotFoundException e){
            throw new RuntimeException(e);
        }
    }
    public static Connection getConn() throws Exception{
        try{
            Class.forName(driver);
            
            Connection conn=DriverManager.getConnection(url,user,password);
            return conn;
        }catch(Exception e){
            throw new RuntimeException(e);
        }
    }    
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Java和MySQL将Base64编码的数据存储到数据库中。首先,你需要创建一个MySQL表来存储数据。表的结构可以包含一个列来存储Base64编码的字符串。 以下是一个示例的MySQL表的创建语句: ```sql CREATE TABLE my_table ( id INT AUTO_INCREMENT PRIMARY KEY, base64_data TEXT ); ``` 接下来,在Java中,你可以使用JDBC连接MySQL数据库并执行插入操作。你需要将Base64编码的数据转换为字节数组,然后将字节数组插入到数据库中。 以下是一个示例的Java代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Base64; public class Main { public static void main(String[] args) { String base64Data = "SGVsbG8gV29ybGQh"; // Base64编码的数据 // 连接到MySQL数据库 try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/my_database", "username", "password")) { // 插入数据 String sql = "INSERT INTO my_table (base64_data) VALUES (?)"; try (PreparedStatement stmt = conn.prepareStatement(sql)) { byte[] data = Base64.getDecoder().decode(base64Data); // 将Base64编码的字符串解码为字节数组 stmt.setBytes(1, data); // 将字节数组设置为参数值 stmt.executeUpdate(); // 执行插入操作 } } catch (SQLException e) { e.printStackTrace(); } } } ``` 以上代码中,你需要将`jdbc:mysql://localhost:3306/my_database`替换为你的MySQL数据库连接字符串,`username`和`password`替换为你的数据库用户名和密码。 这样,你就可以将Base64编码的数据存储到MySQL数据库中了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值