目录
一、实现JDBC步骤
1.注册驱动
1.1导入驱动包
1.1异常处理
更正一下是 Class.forName("com.mysql.jdbc.Driver"),上面代码写错了。
//注册驱动(加载驱动类,5.0版本)
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("加载驱动成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("加载驱动失败");
e.printStackTrace();
}
2.创建连接
2.1导包
2.2处理异常
//创建数据库连接
String url = "jdbc:mysql://127.0.0.1:3306/score";
//jdbc:mysql: //数据库主机地址:端口号/数据库名
String user="root"; //数据库用户名
String password="268875"; //数据库密码
Connection connection = DriverManager.getConnection(url,user,password);
System.out.println("获取数据库连接成功");
3.得到执行sql语句的Statement对象
3.1修改数据操作
//修改数据操作
String sql = "update student SET Sage=? where Sid=?";
PreparedStatement pre = connection.prepareStatement(sql);
//prepareStatement--预编译SQL语句执行对象
//把数据设置到占位符位置
pre.setInt(1, 39);
//向sql语句中第一个位置设置数据
pre.setString(2,"100010");
//向sql语句中第二个位置设置数据
3.2删除数据操作
//删除数据操作
String sql="delete from student where Sid=?";
pre = connection.prepareStatement(sql);
pre.setString(1, "100020");
3.3插入数据操作
//插入数据操作
String sql="insert into student values(?,?,?,?,?)";
//问号为占位符,使用占位符主要为了避免sql注入
pre = connection.prepareStatement(sql);
pre.setString(1,"100010");
pre.setString(2,"黎明");
pre.setInt(3,30);
pre.setString(4,"女");
pre.setString(5,"手机游戏");
3.4查询数据操作
//查询数据操作
String sql="select * from student";
pre = connection.prepareStatement (sql);
ResultSet set = pre.executeQuery();
//查询,返回的是结果集,类似于一张虚拟表
//把虚拟表中的数据取出来,即解析结果集
while(set.next()){
/* 调用next()方法时,
* 游标向下移动一行,
* 判断是否存在数据,
* 并把数据放入结果集中,
* 返回值为布尔类型。
*/
/* 通过数所在位置去获取数据,这个方法不可取
* System.out.println(set.getString(1));
* System.out.println(set.getString(2));
* System.out.println(set.getInt(3));
* System.out.println(set.getString(4));
* System.out.println(set.getString(5));
*/
System.out.println(set.getString("Sid"));
System.out.println(set.getString("Sname"));
System.out.println(set.getInt("Sage"));
System.out.println(set.getString("Ssex"));
System.out.println(set.getString("Szhuanye"));
}
4.执行sql语句,并返回结果,并处理结果
/* 执行sql语句
* 对于jdbc来说操作数据库只有两种操作
* 1.修改(增,删,改);2.查询(查)
*/
int row = pre.executeUpdate();
//修改,返回影响数据库的行数
System.out.println(row);
if(row>0){
System.out.println("修改数据成功");
}else{
System.out.println("修改数据失败");
}
5.关闭资源
finally{
//关闭资源,finally无论代码是否出现异常都会被执行
try {
if(connection!=null)
connection.close(); //关闭数据库链接
if(pre!=null)
pre.close(); //关闭语句执行对象
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
6.完整代码
对于jdbc来说操作数据库只有两种操作:
1.修改(增,删,改);2.查询(查)。
6.1修改数据操作代码
package java_projects;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JDBCTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//设置成全局变量,便于后面直接关闭资源
Connection connection = null;
PreparedStatement pre = null;
//注册驱动(加载驱动类,5.0版本)
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("加载驱动成功");
//创建数据库连接
String url = "jdbc:mysql://127.0.0.1:3306/score";
//jdbc:mysql://数据库主机地址:端口号/数据库名
String user="root"; //数据库用户名
String password="268875"; //数据库密码
connection = DriverManager.getConnection(url,user,password);
System.out.println("获取数据库连接成功");
// //通过数据库链接对象获取sql语句执行对象Statement
// //修改数据
// String sql = "update student SET Sage=? where Sid=?";
// pre = connection.prepareStatement(sql);
// //prepareStatement--预编译SQL语句执行对象
// //把数据设置到占位符位置
// pre.setInt(1, 39);
// //向sql语句中第一个位置设置数据
// pre.setString(2,"100010");
// //向sql语句中第二个位置设置数据
// //删除数据操作
// String sql="delete from student where Sid=?";
// pre = connection.prepareStatement(sql);
// pre.setString(1, "100020");
//插入数据操作
String sql="insert into student values(?,?,?,?,?)";
//问号为占位符,使用占位符主要为了避免sql注入
pre = connection.prepareStatement(sql);
pre.setString(1,"100010");
pre.setString(2,"黎明");
pre.setInt(3,30);
pre.setString(4,"女");
pre.setString(5,"手机游戏");
int row = pre.executeUpdate();
//修改,返回影响数据库的行数
System.out.println(row);
if(row>0){
System.out.println("修改数据成功");
}else{
System.out.println("修改数据失败");
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("加载驱动失败");
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("获取数据库连接失败");
e.printStackTrace();
}finally{
//关闭资源,finally无论代码是否出现异常都会被执行
try {
if(connection!=null)
connection.close(); //关闭数据库链接
if(pre!=null)
pre.close(); //关闭语句执行对象
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
6.2查询数据操作代码
package java_projects;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//设置成全局变量,便于后面直接关闭资源
Connection connection = null;
PreparedStatement pre = null;
ResultSet set = null;
//注册驱动(加载驱动类,5.0版本)
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("加载驱动成功");
//创建数据库连接
String url = "jdbc:mysql://127.0.0.1:3306/score";
//jdbc:mysql://数据库主机地址:端口号/数据库名
String user="root"; //数据库用户名
String password="268875"; //数据库密码
connection = DriverManager.getConnection(url,user,password);
System.out.println("获取数据库连接成功");
//查询数据操作
String sql="select * from student";
pre = connection.prepareStatement (sql);
set = pre.executeQuery();
//查询,返回的是结果集,类似于一张虚拟表
//把虚拟表中的数据取出来,即解析结果集
while(set.next()){
/* 调用next()方法时
* 游标向下移动一行
* 判断是否存在数据
* 并把数据放入结果集中
* 返回值为布尔类型
*/
/* 通过数所在位置去获取数据,这个方法不可取
* System.out.println(set.getString(1));
* System.out.println(set.getString(2));
* System.out.println(set.getInt(3));
* System.out.println(set.getString(4));
* System.out.println(set.getString(5));
*/
System.out.println(set.getString("Sid"));
System.out.println(set.getString("Sname"));
System.out.println(set.getInt("Sage"));
System.out.println(set.getString("Ssex"));
System.out.println(set.getString("Szhuanye"));
}
/* 执行sql语句
* 对于jdbc来说操作数据库只有两种操作
* 1.修改(增,删,改);2.查询(查)
*/
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("加载驱动失败");
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("获取数据库连接失败");
e.printStackTrace();
}finally{
//关闭资源,finally无论代码是否出现异常都会被执行
try {
if(connection!=null)
connection.close(); //关闭数据库链接
if(pre!=null)
pre.close(); //关闭语句执行对象
if(set != null)
set.close(); //关闭结果集资源
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
二、JDBC封装函数
1.建立两个类(工具类、测试类)
2.全局变量声明
private static Connection connection;
private static PreparedStatement pre;
private static ResultSet set;
private static String url="jdbc:mysql://127.0.0.1:3306/score";
private static String user="root";
private static String password="268875";
private static String driver="com.mysql.jdbc.Driver";
3.初始化数据库链接函数
public static void initConnection(){
try {
Class.forName(driver);
connection = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
4.修改数据函数
/**
* 修改数据操作(增、删、改)
* @param o 数组第一个位置放sql语句,后面的所有位置放sql语句中对应的值
* @return 影响的行数
*/
public static int update(Object ... o) {
/* Object ... o
* 该写法叫可变参数
* 可以传递0到无限个object参数进来
* 把可变参数当成数组使用即可
*/
try {
pre=connection.prepareStatement(o[0].toString());
for(int i=1;i < o.length;i ++){
pre.setObject(i, o[i]);
//不知道设置什么类型,直接使用Object
}
return pre.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
close(); //关闭资源函数
}
return 0;
}
5.查询数据函数
/**
* 查询操作
* @param o 数组第一个位置放sql语句,后面的所有位置放sql语句中对应的值
* @return 返回结果集
*/
public static ResultSet select(Object ... o){
initConnection();
try {
pre=connection.prepareStatement(o[0].toString());
for(int i = 1;i < o.length;i ++){
pre.setObject(i, o[i]);
}
set = pre.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//结果集资源不能被关闭,所以没有finally语句
return set;
}
6.关闭资源函数
public static void close(){
try {
if(connection!=null)
connection.close(); //关闭数据库链接
if(pre!=null)
pre.close(); //关闭语句执行对象
if(set!=null)
set.close(); //关闭结果集资源
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
7.测试代码
7.1修改数据测试代码
package java_projects;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
JDBCTool.initConnection();
JDBCTool.update("insert into student values(?,?,?,?,?)","100020","黑暗",50,"男","电脑游戏");
// int row=JDBCTool.update("insert into student values(?,?,?,?,?)","100020","黑暗",50,"男","电脑游戏");
// if(row>0){
// System.out.println("修改数据成功");
// }else{
// System.out.println("修改数据失败");
// }
}
}
7.2查询数据测试代码
package java_projects;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
JDBCTool.initConnection();
ResultSet set = JDBCTool.select("select * from student");
try {
while(set.next()){
System.out.println(set.getString("Sid"));
System.out.println(set.getString("Sname"));
System.out.println(set.getInt("Sage"));
System.out.println(set.getString("Ssex"));
System.out.println(set.getString("Szhuanye"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCTool.close();
/*结果集必须在使用完之后再关闭
* 在查询数据函数中不能调用关闭资源函数
* 因为查询数据函数返回的是结果集
*/
}
}
}