JDBC连接数据库问题

一、简介  
    JDBC(Java DatabaseConnectivity)是Sun 公司提供的JavaAPI的一部分,JDBC核心的API包括:数据库连接的Connection接口、驱动程序管理器DriverManager类、执行SQL语句的Statement接口、预编译SQL语句的PreparedStatement 接口、结果集ResultSet接口。

二、使用JDBC操作数据库
    以Mysql为例,步骤如下:
    1、载入数据库驱动器
    2、打开数据库链接
    3、Java利用“SQL语句执行器”组建SQL语句。
    4、发送组建完成的SQL语句。
    5、等待数据库返回的结果。
    6、操作返回结果得到需要的数据。
    7、关闭数据库链接。
      注意:加载的驱动器需要到对应的数据库官网上去下载,此处使用的是mysql-connector-java-          5.1.18-bin.jar)   


    java代码示例:
        此处只是一个简单的展示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 {

      @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");
            }
      }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值