package com.fill.jweb_jdbc_new;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;
public class jdbcDemo {
public final static String URL="jdbc:mysql://127.0.0.1:3308/test";
public final static String USERNAME="root";
public final static String PWD="root";
/**
* jdbc操作数据库
* 用ResultSet接口来处理结果集
* eg:
* ResultSet executeQuery(String sql)throws SQLException
* ResultSet常用方法:
* boolean next()
* int getInt();
* Date getDate();
* String getString();
*/
public static void query(){
//用ResultSet接口来获取结果
try {
//1.加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取数据库链接
Connection conn=(Connection) DriverManager.getConnection(URL, USERNAME, PWD);
//3.构造sql语句
String sql="select * from admin_sql_inject where 1 limit 3";
//4.构造一个statement实例(发送sql语句的载体)
Statement stat=(Statement) conn.createStatement();
//5.执行sql语句(其实是实现发送)
ResultSet rs=stat.executeQuery(sql);//此时结果还是放在数据库的
while(rs.next()){
System.out.println(rs.getString("name")+"=="+rs.getString("pwd")+"<br>");
}
//6.关闭连接
rs.close();
stat.close();
conn.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* insert避免拼字符串问题以及拼接时的安全问题.
* PreparedStatement接口(预编译的sql语句)实现多次高效地使用sql
* 语句(会对sql语句作缓存)
*/
public static void insert(Admin p){
try {
//1.加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取数据库链接
Connection conn=(Connection) DriverManager.getConnection(URL, USERNAME, PWD);
//3.构造sql语句
String sql="insert into admin_sql_inject(name,pwd)values(?,?)";
//4.构造一个statement实例(发送sql语句的载体)
//Statement stat=(Statement) conn.createStatement();
PreparedStatement ps=(PreparedStatement) conn.prepareStatement(sql);
ps.setString(1,p.getName());
ps.setString(2,p.getPwd());
//5.执行sql语句(其实是实现发送)
ps.executeUpdate();
//6.关闭连接
ps.close();
conn.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Admin a=new Admin("对的对的","jiushijiushi");
//System.out.println(a.getName()+'-'+a.getPwd());
insert(a);
}
}
/*
* PreparedStatement小结
* 在jdbc应用中,应该始终以PreparedStatement代替Statement,即在任何时候都
* 不用Statement原因如下:
* a.代码的可读性和可维护性
* b.PreparedStatement尽最大可能提高性能
* c.是最重要的一点是极大的提高了安全性
*/