JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
本例主要讲的是Java用JDBC与MySQL数据库进行连接,并进行增,删,改,查的操作。
Java本身是不带有与数据库进行连接的jar包的,所以与数据库进行连接的jar包需要我们自己导入,具体方法如下:
(1).从网上下载与数据库进行连接的jar包,本人下载的是5.1.40版本,全名:mysql-connector-java-5.1.40-bin.jar。
(2).导入到你的项目中去。项目名称右键--->Properties--->Java Build Path--->Libraries--->Add External JARs--->到目录下面选择你的Jar包存放的位置--->确定导入。
此时展开你的Referenced Libraries,会发现有一个mysql-connector-java-5.1.40-bin.jar。如下:
(3).import,这个时候只需要在你需要与数据库进行连接的类前面加入一行代码:
import java.sql.*;
此时我们就可以通过JDBC操作数据库了。
对数据库进行操作的步骤如下:
(1)与数据库进行连接并获取操作数据库的类对象:
//加载数据库的驱动程序:
Class.forName("com.mysql.jdbc.Driver");
//获得一个与数据库进行连接的对象,这是的参数url为你需要连接的那个数据库的路径,username为你数据库的用户名,password为你数据库的
//密码,比如我这里
url="jdbc:mysql://localhost:3306/student",username="root",password="admin"。
Connection conn=DriverManager.getConnection(String url,String username,String password);
//获取一个对数据库进行操作的PrepareStatement类对象。参数字符串sql为标准的sql语句。
PrepareStatement ps=conn.prepareStatement(String sql);
(2)增,删,改:
如若是增,删,改操作,那么sql语句就应该是
增:
insert student values(?,?,?,?,?,?)
删:
delete from student where stuId=?
改:
update student set stuName=?,stuSex=?,stuAge=?,stuDept=?,stuAddress=? where stuId=?
传入sql语句的字符串为参数
PrepareStatement ps=conn.prepareStatement(String sql);
当返回PrepareStatement类的对象ps后,需要先替换掉sql语句中的‘?’,
// 用dataArr数组中的元素来替换掉sql语句中的三个'?'
for (inti = 0; i < dataArr.length;i++) {
// 用dataArr[i]来替换掉sql语句中的第i+1'?'
ps.setString(i + 1,dataArr[i]);
}//'?'
内容根据自己的表单所需自己设置。
,替换完后再执行它的ps.executeUadate()方法,此方法会返回一个整形数值,代表的是增加的数据条数,删除的数据条数或者是被修改的数据条数。
(3)查:
对数据库进行查询操作,那么sql语句就应该是
查:select * from student
传入sql语句的字符串为参数,PrepareStatement ps=conn.prepareStatement(String sql);,当返回PrepareStatement类的对象ps后,同样需要替换掉
其中的'?',替换方法见上面代码,然后再执行它的ps.executeQuery()方法,它会返回一个ResultSet类型的对象。此时我们查询的所有数据都存放在这
个ResultSet类对象中,那么我们怎么取出这些数据呢,答案是这样的,我们只需要循环读取到的结果集,将数据库返回来的每一行数据存放进一个
Student类对象中去,例如:
//rs为对数据库进行查询操作后,得到的ResultSet类对象。
while(rs.next()){
Student student=new Student();
student.setId(rs.getInt(1));
student.setName(rs.getString(2));
student.setSex(rs.getString(3));
student.setAge(rs.getInt(4));
student.setDept(rs.getString(5));
student.setAddress(rs.getString(6));
System.out.println(student.toString());
}
当这个循环结束之后,我们对数据库进行查询操作获得的所有数据就都会打印到编译器的控制台上面了。
贴上一个对数据库进行完整增删改查的类。
import java.sql.*;
public class JDBCMain {
// 数据库驱动程序的字符串
privatefinal static StringdriverUrl = "com.mysql.jdbc.Driver";
// 连接数据库的URL
privatefinal static StringdatabaseUrl = "jdbc:mysql://localhost:3306/test_database";
// 连接数据库的账号
private final static String username ="root";
// 连接数据库的密码
private final static String password ="12345678";
private Connection connection;
private PreparedStatement ps;
private ResultSet rs;
// insert()函数会用到的一条数据
private String[] dataArr = { "1", "zhangsan","21" };
// update()函数会用到的一条数据
private String[] dataUpdate = { "lisi", "22","1" };
public staticvoid main(String[] args) {
JDBCMain jdbc = new JDBCMain();
try {
jdbc.conn();
jdbc.select();
} catch (Exceptione) {
e.printStackTrace();
}
}
// 加载驱动程序并连接数据库
public void conn()throws Exception {
// 加载驱动程序
Class.forName(driverUrl);
// 连接数据库
connection = DriverManager.getConnection(databaseUrl,username, password);
}
public void insert()throws Exception {
int num = -1;
// 传递insert操作的sql语句
ps =connection.prepareStatement("insert test values(?,?,?)");
// 用dataArr数组中的元素来替换掉sql语句中的三个'?'
for (inti = 0; i < dataArr.length;i++) {
// 用dataArr[i]来替换掉sql语句中的第i+1'?'
ps.setString(i + 1,dataArr[i]);
}
// 成功插入的行数
num = ps.executeUpdate();
// 关闭连接,释放资源
connection.close();
System.out.println("成功插入的数据行数:" +num);
}
public void select()throws Exception {
// 查询操作
ps = connection.prepareStatement("select * from test");
rs = ps.executeQuery();
// 遍历返回的数据,一条一条输出到控制台
System.out.println("查询到的数据:");
while (rs.next()) {
System.out.println(rs.getInt(1) +"---" + rs.getString(2) + "---" + rs.getInt(3));
}
connection.close();
}
public void delete()throws Exception {
ps =connection.prepareStatement("delete from test where id=?");
ps.setString(1, "1");
// 被成功删除的行数
int num = ps.executeUpdate();
connection.close();
System.out.println("被删除的行数:" +num);
}
public void update()throws Exception {
ps =connection.prepareStatement("update test set name=?,age=? where id=?");
// 用dataUpdate[i]来替换掉sql语句中的第i+1个'?'
for (inti = 0; i < dataUpdate.length;i++) {
ps.setString(i + 1,dataUpdate[i]);
}
int num = ps.executeUpdate();
connection.close();
System.out.println("被修改的行数:" +num);
}
}