DriverManager:用于管理JDBC驱动的服务类,这个类主要是获取对象
getConnection(String url,String user,String pass)//获取URL对应的数据库连接.
Connection代表数据库连接对象,每个Connection代表一个物理连接层的会话,要想访问数据库,必须要建立数据库连接
createStatement()这个方法返回的是一个Statement对象。
prepareStatement(String sql)这个方法返回预编译的Statement对象,就是将SQL语句提交到数据库进行预编译。
prepareCall(String sql)该方法返回的是一个CallableStatement对象,该对象用于调用存储过程。
Statement用于执行SQL语句的工具接口。常用方法如下:
executeQuery(String sql)该方法用于执行sql语句,并且返回ResultSet对象。
executeUpdate(String sql)该方法用于sql的DML语句,并且返回受影响的行数
使用:第一种:Statement 对数据库添加数据:
package jdbc3;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Test1 {
public static void main(String[] args) {
Connection connection=null;
Statement statement=null;
try {//statement的使用
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/mmysql?useUnicode=true&characterEncoding=utf8";
connection= DriverManager.getConnection(url,"root","root");
String sql="insert into test values(2,'李四')";//添加数据
statement=connection.createStatement();//建立数据库连接 Statement
//执行更新语句,返回一个影响的行数,对行数再加判断。
System.out.println(statement.executeUpdate(sql)>0?"添加成功":"添加失败");
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
使用第二种:prepareStatement(sql)提前预编译,预编译的sql语句可以写为?
package jdbc3;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Test2 {
public static void main(String[] args) {
Connection connection=null;
PreparedStatement preparedStatement=null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/mmysql?useUnicode=true&characterEncoding=utf8";
connection= DriverManager.getConnection(url,"root","root");
//如果此时不确定输入什么值,或者是修改什么值,只需要将放入的值设置为?
String sql="insert into test VALUES (?,?)";
//提起发送预编译的sql语句
preparedStatement=connection.prepareStatement(sql);
//第一个是?的位置,我们写1,就是第一个? 值为3
preparedStatement.setInt(1,3);
//2代表第二个?的位置,写2代表sql语句中第二个?值为四儿
preparedStatement.setString(2,"四儿");
int flag=preparedStatement.executeUpdate();
System.out.println(flag);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
preparedStatement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
第三种方式使用CallableStatement 的prepareCall(sql)语句,这种情况一般sql语句为存储过程,安全性比较高
package jdbc3;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Test3 {
public static void main(String[] args) {
Connection connection=null;
CallableStatement callableStatement=null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/mmysql?useUnicode=true&characterEncoding=utf8";
connection= DriverManager.getConnection(url,"root","root");
String sql="call adduser(?,?)";//调用了存储过程来进行存储
callableStatement=connection.prepareCall(sql);
//1是第一个? 值为5
callableStatement.setObject(1,5);
//2代表第二个? 值为来了
callableStatement.setString(2,"来了");
int flag=callableStatement.executeUpdate();
System.out.println(flag);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
callableStatement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
对于sql语句有?的,因为灵活,所以我们可以针对这种方式写一个万能的赋值语句来进行赋值。
package jdbc3;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Test4 {
public static void main(String[] args) {
String sql="call adduser(?,?)";
System.out.println(sec(sql,6,"fucker"));
}
public static int sec(String sql,Object...obj){
Connection connection=null;
CallableStatement callableStatement=null;
int flag=0;
try {
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/mmysql?useUnicode=true&characterEncoding=utf8";
connection= DriverManager.getConnection(url,"root","root");
callableStatement=connection.prepareCall(sql);
//for循环 一次添加数组进callablestatement
for(int i=0;i<obj.length;i++){
callableStatement.setObject(i+1,obj[i]);
}
flag=callableStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
callableStatement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return flag;
}
}