JDBC 3—— 操作和访问数据库

数据库连接被用于向数据库服务器发送命令和SQL语句,并接受数据库服务器返回的结果。其实一个数据库连接就是一个Socket连接。

在java.sql包中有3个接口分别定义了对数据库的调用的不同方式:

  • Statement:用于执行静态SQL语句并返回它所生成的结果的对象。
  • PrepatedStatement:SQL语句被预编译并存储在此对象中,可以使用此对象多次高效地执行该语句。
  • CallableStatement:用于执行SQL存储过程。

 使用Statement的弊端,需要拼写sql语句,并且存在SQL注入(SQL注入是利用某些系统没有对用于输入的数据进行充分的检查,而在用户输入数据中注入非法的SQL语句段或命令(如:SELECT user,password FROM user_table WHERE user='a' OR 1 = 'AND' password = 'OR' '1' = '1'),从而利用系统的SQL引擎完成恶意行为的做法。)的问题。对于java而言,只需要用PreparedStatement(从Statement扩展而来)取代Statement就可以了。

 数据的简单添加操作

package com.JDBCStudy3.PreparedStatement.crud;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Properties;

import com.mysql.jdbc.PreparedStatement;

/*
 * 使用PrepareStatement来替代Statement,实现对数据表的增删改查操作。
 * 增删改查
 * */
public class PrepareStatements {
    // 向customers表中添加一条记录
    public void testInsert() {
        Connection coon = null;
        PreparedStatement ps = null;
        try {
            // 1、读取配置文件中的4个基本信息
            InputStream is = PrepareStatements.class.getClassLoader().getResourceAsStream("jdbc.properties");
            Properties pros = new Properties();
            pros.load(is);

            String user = pros.getProperty("user");
            String password = pros.getProperty("password");
            String url = pros.getProperty("url");
            String driverClass = pros.getProperty("driverClass");

            // 2、加载驱动
            Class.forName(driverClass);

            // 3、获取连接
            coon = DriverManager.getConnection(url, user, password);
            // System.out.println(coon);

            // 4、预编译sql语句,返回PreparedStatement的实例
            String sql = "insert into customers(name,email)values(?,?,?)";// ?占位符
            ps = (PreparedStatement) coon.prepareStatement(sql);

            // 5、填充占位符
            ps.setString(1, "娜扎");
            ps.setString(2, "nazha@gmail.com");
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
            java.util.Date date = sdf.parse("1000-01-01");
            ps.setDate(3, new Date(date.getTime()));

            // 6、执行操作
            ps.execute();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // 7、资源的关闭
            try {
                if (ps != null)
                    ps.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                if (coon != null)
                    coon.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
}

jdbc.properties

user=root
password=root
url=jdbc:mysql://localhost:3306/MySQL
driverClass=com.mysql.jdbc.Driver

原文地址:https://www.cnblogs.com/stu-jyj3621/p/14308508.html