package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JDBC_main {
/**
* 加载驱动文件
* 1.在项目下面新建一个文件夹,放入驱动文件
* 2.驱动文件选择build path 的add path
*/
public static void main(String[] args){
try {
//加载驱动类
Class.forName("com.mysql.jdbc.Driver");//Oracle的话里面填oracle.jdbc.driver.OracleDriver
//建立连接(连接对象内部其实包含了Socket对象,是一个远程的连接,比较耗时间,实际使用时大多都会用连接池来管理对象更加高效)
Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc的使用","root","root");
//System.out.println(c);//此时c为加载的驱动文件的实现类,利用输出判断是否成功
//执行SQL语句
/*
String str ="insert into student (name,age) values('赵六',21)";
Statement s = c.createStatement();
s.execute(str);//里面写执行的sql语句
*/
//statement一般不用这个,用他的两个子类,因为它易发生数据sql注入问题,容易留下大漏洞
//解决注入问题的方法为插入数据之前先插入一个占位符号"?",占一个位置,然后参数被下面的set方法替换
String str ="insert into student (name,age) values(?,?)";
PreparedStatement ps = c.prepareStatement(str);
/*
System.out.println("插入一条数据方法1,索引从1开始");
ps.setString(1,"赵六");
ps.setString(2,"21");
*/
System.out.println("插入一条数据方法2");
ps.setObject(1, "冯七");
ps.setObject(2, "21");
ps.execute();//返回的是布尔类型,返回是否有结果集
//还有2个其他的方法:ps.executeQuery()主要用于查询,返回ResultSet;
//关闭
ps.close();
c.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
去除注释后
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class JDBC {
public static void main(String[] args) throws Exception{
//加载驱动类
Class.forName("com.mysql.jdbc.Driver");
//建立连接
Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc的使用","root","root");
//执行SQL语句
String str ="insert into student (name,age) values(?,?)";
PreparedStatement ps = c.prepareStatement(str);
ps.setObject(1, "冯七");
ps.setObject(2, "21");
ps.execute();
ps.close();
c.close();
}
}