一、简介
JDBC(Java DatabaseConnectivity)是Sun 公司提供的JavaAPI的一部分,JDBC核心的API包括:数据库连接的Connection接口、驱动程序管理器DriverManager类、执行SQL语句的Statement接口、预编译SQL语句的PreparedStatement 接口、结果集ResultSet接口。
以Mysql为例,步骤如下:
1、载入数据库驱动器
2、打开数据库链接
3、Java利用“SQL语句执行器”组建SQL语句。
4、发送组建完成的SQL语句。
5、等待数据库返回的结果。
6、操作返回结果得到需要的数据。
7、关闭数据库链接。
注意:加载的驱动器需要到对应的数据库官网上去下载,此处使用的是mysql-connector-java- 5.1.18-bin.jar)
java代码示例:
此处只是一个简单的展示JDBC连接的过程,实际项目中设计到事务的提交等也许不会这么简单。
运行结果:
三、关于多条件查询问题的SQL拼接
1、多条件拼接sql语句
public class StudentDaoImpl implements StudentDao {
@SuppressWarnings("rawtypes")
@Override
public ListfindAll(StudentListVO vo) throws DBLinkException,
DataNotFoundException {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch(ClassNotFoundException e) {
e.printStackTrace();
}
Connectioncnn = null;
try{//oracle的链接方式
cnn=
DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL","DangDang","Qweasd");
//注意此处的"1=1",这样的目的是防止用户的输入条件拼接出错
String sql ="
SELECT * FROMDANGDANG.STUDENT WHERE1=1 ";
List<Object> params = newArrayList<Object>();
//非空判断
if(vo.getNo() != null &&!"".equals(vo.getNo())) {
sql += "ANDstuno = ? ";
params.add(vo.getNo());
}
if(vo.getName() != null &&!"".equals(vo.getName())) {
sql += "ANDname like ? ";
params.add("%" + vo.getName() + "%");
}
if(vo.getAge() != null &&!"".equals(vo.getAge())) {
sql += "ANDage = ? ";
//对用户输入的年龄进行校验,譬如用户在age处输入英文
//NumberUtils类见下文
params.add(NumberUtils.convertStrintToShort(vo.getAge()));
}
if(vo.getSex() != null &&!"".equals(vo.getSex())) {
sql += "ANDsex = ? ";
params.add(Byte.valueOf(vo.getSex()));
}
if(vo.getType() != null &&!"".equals(vo.getType())) {
sql += "ANDtype = ? ";
//params.add(Short.valueOf(vo.getType()));
params.add(NumberUtils.convertStrintToShort(vo.getType()));
}
if(vo.getMobile() != null &&!"".equals(vo.getMobile())) {
sql += "ANDmobile = ? ";
params.add(vo.getMobile());
}
if(vo.getAddress() != null &&!"".equals(vo.getAddress())) {
sql += "ANDaddress like ? ";
params.add("%" + vo.getAddress() + "%");
}
PreparedStatement cmd = cnn.prepareStatement(sql);
for(int i =1;i<=params.size();i++) {
cmd.setObject(i, params.get(i-1));
}
ResultSet rs= cmd.executeQuery();
List<Student> students = newArrayList<Student>();
while(rs.next()) {
//对象封装
Student stu= new Student();
stu.setId(rs.getLong("id"));
stu.setStuno(rs.getString("stuno"));
stu.setName(rs.getString("name"));
stu.setPasswrod(rs.getString("passwrod"));
stu.setAge(rs.getShort("age"));
stu.setSex(rs.getByte("sex"));
stu.setAddress(rs.getString("address"));
stu.setMobile(rs.getString("mobile"));
stu.setType(rs.getShort("type"));
students.add(stu);
}
if(students.size() == 0)
throw newDataNotFoundException(CommonConstants.DATA_NOT_FOUND);
returnstudents;
} catch(SQLException e) {
throw newDBLinkException(CommonConstants.DBLINK_ERROR);
}finally{
try {
//关闭数据库链接前先判断
if(cnn !=null && !cnn.isClosed())
cnn.close();
} catch(SQLException e) {
e.printStackTrace();
}
}
}
}
2、数字验证类NumberUtils
public class NumberUtils {
publicstatic Short convertStrintToShort(String s) {
try {
//将用户输入的age条件值进行校验,若String S转成 Short型成功返回
returnShort.valueOf(s);
} catch(NumberFormatException e) {
//若String S转成 Short型不成功返回“-1000”,那么在进行SQL拼接查找时数据库中一般不会存在age=-1000的数据,所以数据找不到,错误也就不存在了
returnShort.valueOf("-1000");
}
}
}
二、使用JDBC操作数据库
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MainClass {
public static void main(String[] args) {
Connection con=null;
try {
//1、载入数据库驱动器
Class.forName("com.mysql.jdbc.Driver");
//2、打开数据库链接
Stringurl="jdbc:mysql://
192.168.0.98:3306/
db_Wikipedia";
//String url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
String user="
root";//String user="DangDang";
String pwd="
mysql";//String pwd="Qweasd";
con=DriverManager.getConnection(url, user, pwd);
//3、Java利用“SQL语句执行器”组建SQL语句。
PreparedStatement cmd =
con.prepareStatement("select * from tb_user where sex=?");
//insert intotb_user(id,regname,name,password)value(?,?,?,?)
cmd.setString(1, "男");
//4、发送组建完成的SQL语句。
//ResultSet:查询结果集对象,实际就是一个数据表循环游标。
//1-5、等待数据库返回的结果。
ResultSet rs=cmd.executeQuery();
//6、操作返回结果得到需要的数据。
while(rs.next()){
System.out.println(rs.getInt(1));
System.out.println(rs.getString("userName"));
System.out.println(rs.getString("password"));
System.out.println("----------------------------");
}
} catch (ClassNotFoundException e) {
//当未向工程引入数据库Jar包得时候,发生此异常。
e.printStackTrace();
}
catch (SQLException e) {
//链接数据库过程中发生驱动器不匹配,数据库服务器未启动
//等所有数据库链接错误,都有该异常抓获。
e.printStackTrace();
}finally{
//7、关闭数据库链接。
try {
if(con != null &&!con.isClosed())
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

三、关于多条件查询问题的SQL拼接
1、多条件拼接sql语句
public class StudentDaoImpl implements StudentDao {
}
2、数字验证类NumberUtils
public class NumberUtils {
}