您的位置:首页 > 编程语言 > Java开发

JAVA通过JDBC链接数据库获取数据(三)PreparedStatement预编译SQL

2017-09-09 16:21 706 查看
JAVA通过JDBC链接数据库获取数据(三)PreparedStatement预编译SQL

一、PreparedStatement 作用

1、可以防止SQL注入:对JDBC而言,SQL注入攻击只对Statement有效,对PreparedStatement是无效的,这是因为PreparedStatement不允许在插入时改变查询的逻辑结构.

2、可以存储和读取大文本文件。

二、PreparedStatement 操作数据库使用实例

package com.sql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class PreparedStatementDemo {
Connection con = null;
// 在执行SQL语句前先执行 @Before 的代码
@Before
public void init() throws Exception{
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取链接
String url = ("jdbc:mysql://127.0.0.1:3306/long1?characterEncoding=UTF8");
con = DriverManager.getConnection(url,"root","123456");
System.out.println(con);
}

//获取到数据库的数据后,执行释放资源
@After
public void destory() throws SQLException{
con.close();
}

@Test
public void Preparedst() throws SQLException{

System.out.println("请输入账号和密码");
Scanner sc = new Scanner(System.in);

String name = sc.nextLine(); //输入账号
String pwd = sc.next(); //输入密码
//获取sql 输入的参数都用? 作为占位符
String sql = "insert into uses(u_name,pwd) values(?,?)";
//输出SQL语句,?号不会显示为具体的参数都是在PreparedStatement内部处理。不会给其他人看到。
System.out.println("sql 语句是:"+sql);
//获取预编译的statement
PreparedStatement pt = con.prepareStatement(sql);
//给每一个?替换成输入的参数

//第一个?替换成输入的账号 name变量
pt.setString(1, name);
//第二个?替换成输入的密码 pwd 变量
pt.setString(2, pwd);
//执行sql语句
pt.executeUpdate();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: